Différences V8 et ECMAScript

Où puis-je trouver une liste de toutes les différences entre V8 et ECMAScript? Par exemple, V8 prend en charge const, qui ne fait pas partie de la norme ECMAScript.

31
demandé sur T.J. Crowder 2011-07-29 17:35:40

1 réponses

Edit: réponse directe: suivre l'état des implémentations ES5 en cours qui indique les problèmes de V8 googlecode étiquetés es5 ou https://github.com/joyent/node/wiki/ECMA-5-Mozilla-Features-Implemented-in-V8

V8 implémente tous les ES5 actuellement à l'exception d'une poignée de cas edge, et seulement ensuite afin d'être conforme à la majorité de la façon dont les autres navigateurs actuels gèrent la situation donnée.

Parce qu'il ne vivra pas tout seul des différences que vous aurez à traiter seront dans l'implémentation de l'environnement hôte enveloppé autour d'elle. Pour la plupart des utilisations, ce sont les différentes API que les navigateurs Web fournissent. En tant qu'exemple non-navigateur, Node.js fournit des API personnalisées pour le système de fichiers et l'interaction réseau. En termes de langage de base, il n'y a tout simplement pas beaucoup de marge de manœuvre. Moins le DOM, JavaScript est un langage assez simple à utiliser (une partie de la raison pour laquelle c'est si génial) et a une spécification spécifique vraiment document.

ES5 est une itération à partir D'ES3 et presque 100% rétrocompatible si vous n'utilisez pas 'use strict'. Après près d'une décennie de stagnation ainsi que l'incapacité à obtenir un consensus parmi les principaux implémenteurs de moteur JavaScript ES5 est né et limité principalement à découper et à résoudre les pires problèmes avec la langue. L'étendue de l'utilisation courante ES5 est extras Array, extras Object (principalement Object.créer), de la Fonction.bind, et le mode strict (qui est entièrement sur le décapage caractéristiques out), et une poignée d'assistants natifs comme construit en JSON et base64.

La majeure partie de cette spécification 240 pages est consacrée à définir laborieusement chaque détail sur le comportement qui existe en JavaScript depuis près de 15 ans, ainsi que la liste des fonctionnalités qui seront obsolètes et éventuellement supprimées (with, diverses utilisations de eval, etc.).

Harmony (ES6) est le premier vrai grand changement que nous allons voir. ES5 a atteint l'objectif d'obtenir le moteur implémentations sur la même page et éviscération de la plupart des parties problématiques de JS. Dans L'attente de ES6, il est temps de résoudre certains problèmes de langage fondamentaux qui nécessitent des changements de syntaxe à corriger. ES6 devrait être finalisé fin 2013, mais de gros morceaux sont déjà implémentés dans les moteurs JS afin de les tester et de voir comment ils fonctionnent dans l'utilisation pratique. Le web est une chose vivante et la mise en œuvre de nouvelles normes n'est pas une question de créer une nouvelle spécification puis de la libérer sur le monde comme c'est la plupart des autres industries. Les idées sont flottées et doivent dépasser le rassemblement à la fois au niveau de l'implémenteur (les gars qui écrivent V8, Spidermonkey, JSC, Chakra, etc.) et ensuite le niveau utilisateur réel (l'utilisateur dans ce cas étant des développeurs web écrivant du code à exécuter dans ces moteurs). La dictée de la tour d'Ivoire entraîne simplement un manque d'utilisation.

Spécifiquement dans le cas de const: ceci n'est actuellement pas exactement défini entièrement. C'est un mot clé avec des fonctionnalités similaires mais pas exactement les mêmes dans V8 et Spidermonkey, et a une signification similaire mais pas exactement la même pour ES6. Vous êtes probablement sûr de l'utiliser si vous vous attendez à ce que le moteur de votre public cible le prenne en charge actuellement, mais tel qu'implémenté, il ne faisait techniquement partie d'aucune spécification officielle. migration let' andconst'

Au-delà de cela, il y a des "objets hôtes" qui sont exposés par le moteur donné dans lequel un script JS s'exécute. JavaScript existait d'abord en tant qu'implémentation et en tant que spécification, donc jusqu'à récemment ce n'était pas le cas évident pour les non-experts de savoir où se trouve la ligne de plongée. Lorsqu'il s'exécute dans un navigateur (comme c'est généralement le cas), le Document Object Model est exposé en tant qu'objet hôte pour une utilisation automatique. La fonctionnalité du DOM est largement décrite à l'aide de IDL et relève du W3C. la multitude d'implémentations de spécifications englobe 6 sections de niveau supérieur, près de 50 groupes de travail distincts et environ 1000 spécifications distinctes. Ce sont des interfaces exposées à JavaScript mais complètement ingouverné par les exigences de toute spécification JavaScript. Le DOM englobe un vaste espace de fonctionnalités décrites et de mises en œuvre en constante évolution.

40
répondu 2017-07-21 04:22:42