Les standards de JavaScript (ECMAScript)

Auteur Message
À la manière du sujet sur les standards du C, mais plus bref, car il y a moins à en dire.

Il existe un standard en deux versions pour JavaScript, formellement ECMAScript; un projet de standard pour un ECMAScript typé — régulièrement repoussée à une date ultérieur — au moins une formalisation de la sémantique et une ébauche de profil standard visant l’efficacité.

Le standard


La dernière version est l’édition 5, de 2011. L’édition 3 datant de 1999, reste encore une référence. L’édition 4 devait apporter le typage, mais fût abandonnée et laissa la place à l’édition 5, plus dans le fil directe de l’édition 3 (contrairement à l’édition 4 qui devait apporter des changements « radicaux »). L’édition 6 est actuellement (Septembre 2014) à l’état d’ébauche.


En marge de ces références, une version annotée au format HTML, qui n’est pas la spécification normative : Annotated ECMAScript 5.1 (es5.github.io). Septembre 2013.

Formalisation de la sémantique


Ces documents ne sont pas des standards; ils formalisent tout ou partie de celui‑ci.


Il a existé une spécification exécutable, sous forme d’implémentation de référence en SML, pour ECMAScript 4. Cette implémentation est devenue introuvable. Quoiqu’il en soit, elle présenterait peu d’intérêt pratique (mais un intérêt théorique, toujours), comme ECMAScript 4 a été abandonné.

Profils JavaScript



Il existe au moins un profil JavaScript, visant l’efficacité, nommé asm.js (en minuscule et avec un point) : asm.js (asmjs.org). Actuellement à l’état d’ébauche.

Ce n’est pas un nouveau langage en remplacement de JavaScript, c’est un profil de JavaScript, qui ne présente aucune obligation, et seulement des recommandations. Ce standard recommande que certaines constructions, choisies avec raisons à cette fin, soit interprétées d’une manière particulièrement optimisées, par les implémentations (principalement les navigateurs). Ce profil garanti aux applications JavaScript qui s’y restreignent, le maximum d’opportunité d’optimisation sur les implémentations suivant ces recommandations. Il n’est pas nécessaire pour une implémentation, de suivre toutes les recommandations, pas plus qu’il n’est nécessaire pour une application JavaScript, de strictement se restreindre à ce profil.
Le spécification d’un concept maintenant natif en JavaScript, les objets Promise : promisesaplus.com.

Le même standard pourrait s’appliquer à d’autres langages que ECMAScript.

En cas de migraine à la lecture de ce court standard, voir cette introduction aux concepts : JavaScript Promises: an Introduction (google.com), 2017.
Un bon document pédagogique sur ECMAScript 6, en un eBook au prix de 35 €, également consultable en ligne : Exploring ES6 (exploringjs.com), Dr. Axel Rauschmayer.

L’auteur a la bonté de mettre à disposition gratuitement en ligne, son eBook payant, alors merci de respecter l’auteur et de désactiver tout éventuel bloqueur publicitaire sur la version en ligne gratuite.
Non‑officielle et indépendante de l’ECMA, il existe une sémantique formelle pour ECMAScript 5.1 : KJS: A Complete Formal Semantics of JavaScript (fsl.cs.illinois.edu), 2015.

Comme ECMAScript 6 ne modifie pas la sémantique du langage, ne fait « que » ajouter des sucres syntaxiques et de nouvelles classes (Promise, pour la plus célèbre), il devrait être possible de considérer que cette sémantique formelle s’applique aussi à ES6.
Un standard pour les API EMAScript dans les environnements aux ressources restreintes (ce qui est relatif), les embedded systems. Il est maintenu par l’ECMA aussi. C’est sa troisième édition, la première date de Juin 2021 : ECMAScript® embedded systems API specification — ECMA-419 (ecma-international.org), Juin 2025.

J’imagine que ça s’applique aussi au smartphone ou même au simple téléphones mobiles. Mais certains microcontrôleurs, peuvent être habités par des applications en langages interprétés, comme Lua. JavaScript est moins économes que Lua, mais il y a toute une gamme dans ce domaine et pour certaines plateformes, Lua est même trop gourmand aussi.
L’ECMA a écrit : 
ECMAScript® and OpenXPS® are registered trademarks of Ecma International.

JavaScript™ is a trademark of Oracle.


D’après la page d’information sur la comité technique TC39, qui s’occupe de ECMAScript et d’autres en rapport : TC39 (ecma-international.org).

En pratique, je crois qu’on dit JavaScript pour signifier le langage et son environnement typique, qui est les navigateurs web ou moins souvent mais aussi Node.js et peut‑être d’autre et qu’on dit ECMAScript pour parler du langage de base, de sa définition, en dehors de tout qui ne fait pas partie du langage lui‑même. Par exemple l’objet Math (les classes y sont des objets aussi), fait partie de ECMAScript, mais l’objet HTMLElement, est défini par le DOM des pages web, et dans ce cas, c’est plus souvent le nom JavaScript qui revient.

Mais la citation plus haut clarifie l’origine des deux noms auxquels les usages ont accordé des nuances différentes.
JavaScript est utilisé dans d’autres environnements que les seuls navigateurs. Il existe d’autres standards de l’ECMA qui définissent ces environnements, les autres étant définis par exemple par le W3C et le WHATWG. Un standard de l’ECMA mentionne les autres standards ECMA définissant ces environnements, mais pas ceux en dehors de l’ECMA : ECMAScript® specification suite — ECMA-414 (ecma-international.org), Décembre 2017.

Pourtant, il existe d’autres standards pourtant aussi définis par l’ECMA, qui ne sont pas listés dans ce document. Il y a au moins celui mentionné dans ce message : Re: HTML5 : la finalisation annoncée « prochainement ».

Mentionné par l’ECMA‑414 :