Tout cela a commencé lorsque je cherchais un moyen de tester la conformité de ma page Web avec JavaScript, comme le validateur HTML du W3C . Je n'en ai pas encore trouvé. Alors laissez-moi savoir si vous savez de tout ...
J'ai cherché la page JavaScript officielle et trouvé le script ECMA . Ces personnes ont normalisé un langage de script (je n'ai plus envie de l'appeler JavaScript!) Et l'ont appelé ECMA-262 ( Wikipedia ). Leur dernier travail est l'édition 5.1
JavaScript a été développé par Mozilla Corporation et sa dernière version stable est la 1.8.5 ( voir ci- dessous ), basée sur l'édition 5.1 de l'ECMA.
La page Wikipedia liée mentionne des dialectes. Le code JavaScript 1.8.5 de Mozilla est répertorié comme un dialecte avec JScript 9 (IE) et JavaScript ( V8 de Chrome [ Wiki ]), entre autres. Dois-je comprendre que JavaScript 1.8.5 est un dérivé de l'ECMA-262 et que SpiderMonkey [ Wiki ] est un moteur qui l'exécute? Et Chrome a son propre dialecte et le moteur V8 est le programme qui l’exécute?
Avec tous ces dialectes basés sur ECMA-262, ce que je ne peux plus comprendre, c'est "Qu'est-ce que JavaScript "? Existe-t-il des langages de script réellement inter-navigateurs? Les différents responsables de la mise en œuvre se rencontrent-ils pour s’entendre sur la compatibilité croisée des dialectes? Est-ce que cet effort est ECMA?
la source
Réponses:
Pratiquement tous les langages matures sont définis par une spécification, et les compilateurs ou interprètes tentent de suivre la norme définie dans cette spécification. Mais ils réussissent très rarement, à moins que la norme ne soit définie par l'auteur du langage.
Vous pouvez trouver en ligne le standard C ++ 2003 , la spécification C # 4 , la spécification Java 7 et bien d’autres. Beaucoup d’entre eux portent des numéros de normalisation ECMA ou ISO. Ce ne sont que des organisations avec lesquelles vous pouvez enregistrer une norme et la rendre plus officielle.
Ruby a toujours fait les choses un peu différemment, avec un ensemble de tests exécutables en tant que spécification . Donc, si vous voulez écrire un interprète et l'appeler Ruby standard, il vous suffit de créer un interprète qui a réussi tous ces tests. Mais même Ruby deviendra éventuellement une spécification plus formelle .
Javascript n'est pas différent, sauf peut-être de la façon dont il a évolué.
Javascript a été créé par Netscape. Ils l'appelaient LiveScript, mais cela ressemblait à Java et ils ont passé un accord avec Sun sur le nom, ce qui a été bénéfique à la fois pour le marketing de Netscape et de Java. Microsoft avait VBScript et (pour des raisons sans doute conjecturées) copiait essentiellement Javascript, mais le nom était la propriété de Sun, alors ils l'appellent joliment JScript.
Mais JScript, tout en étant très similaire à la syntaxe Javascript, a beaucoup utilisé COM - par exemple, IE5 et 6 instancient un objet XMLHttpRequest avec
new ActiveXObject("Microsoft.XMLHTTP");
.Ainsi sont nés des "dialectes" parallèles, similaires mais également différents de Javascript. Au fil du temps, divers groupes possédant des navigateurs dont la part de marché était inférieure à celle d'IE ont essayé de normaliser le langage et Microsoft a résisté pendant des années. Jusqu'au V8.
V8 était rapide. Il a établi une nouvelle norme du marché. Tout le reste a l'air pauvre.
Et, dans diverses affaires antitrust contre Microsoft, IE perdait des parts de marché. Du coup, Microsoft avait intérêt à prendre en charge la normalisation. Nous n'en sommes pas encore là, mais c'est sur la bonne voie.
Pendant ce temps, V8 était open source, ce qui a permis aux gens de commencer à penser de nouvelles utilisations pour un analyseur rapide Javascript, comme Node.JS .
Mais pour revenir à votre question: qu'est-ce que le Javascript? C'est le nom commun (et original) d'ECMAScript, spécification d'un langage prototype utilisé couramment, mais pas exclusivement, pour la navigation et la manipulation du modèle d'objet de domaine dans un navigateur.
ECMA-262 n’est que la définition standard, tout comme ECMA-334 est la définition standard de C #. ECMAScript était le seul nom sur lequel toutes les parties intéressées pouvaient s’accorder, en 1999, au moment de la rédaction de la ECMA-262.
la source
Javascript est une implémentation couramment utilisée de ECMAScript. C'est une situation très similaire à celle de la famille Scheme . Dans Scheme, vous avez une spécification hautement formalisée. La version actuelle est R6RS, bien que R5RS soit de loin le standard le plus couramment implémenté à ce jour. Les implémentations sont plus dispersées que celles d'ECMAScript en raison de l'âge et de la philosophie générale de Scheme.
Le langage Javascript est devenu courant, en grande partie à cause de la croissance explosive de la part de marché de Firefox de Mozilla et de Google Chrome. Netscape Navigator, qui s’était initialement développé dans le navigateur Mozilla puis dans Firefox (et Iceweasel si vous exécutiez avec la foule Scheme), a trouvé un pied d’avant avec Netscape Navigator.
Maintenant, voici où ça devient un peu risqué. La plupart des performances de Javascript proviennent de l'analyseur et du moteur qui l'exécute. C’est là que les différences réelles entre les navigateurs deviennent apparentes. Spidermonkey utilise Javascript différemment de la version 8. Le Javascript a toujours des points durs comme l’absence d’une bibliothèque entièrement commune, bien que cela soit en train d’être travaillé
Donc, si Javascript était en C ++, alors ECMAScript serait le C ++ 11, UNIX et G ++ étant les plus proches du "standard", tandis que C ++ pour .NET et Objective C ++ sont plus éloignés que ce que fait ActionScript à partir de ECMAScript
la source