Le futur de JavaScript encore incertain

le 07/09/2008 par Olivier Martin
Tags: Software Engineering

Après bientôt une décennie de réflexions, le comité en charge de standardiser le langage JavaScript semble avoir trouvé une position commune parmi les initiatives qui visaient à le faire évoluer. Quelles sont les nouvelles orientations prises pour ce langage ?

Il y a presque 10 ans était lancée la version actuelle de JavaScript, celle que nous utilisons tous les jours ou presque via un navigateur, standardisée sous le nom officiel d'ECMAScript-262 3e édition (ou ES 3). Un groupe de travail réunissant les acteurs majeurs du Web est alors lancé pour réfléchir à de nouvelles évolutions.

Ce groupe vient tout juste d'aboutir à un compromis après plus d'un an où se sont affrontés deux visions diamétralement opposées : ES 4 une refonte totale du langage et ES 3.1 constituant une évolution mineure, comme son numéro le suggère.

ES 4 : la révolution ?

Il y a quelques années JavaScript avait mauvaise presse : peu considéré par les développeurs, souffrant de bugs et beaucoup utilisé pour ces fenêtres surgissantes – les popups. Pourtant l'arrivée d'une nouvelle gamme d'applications AJAX comme GMail ou Google Maps a relancé l'intérêt pour ce langage.

Les nouvelles applications Web gagnant en taille et en complexité, des limites freinant l'adoption de JavaScript son apparues :

  • Malgré une syntaxe simple, le langage reste difficile à appréhender à cause de son système objet basé sur l'héritage par prototype et par sa nature peu typée.
  • Tous les objets sont mutable, c'est-à-dire qu'on peut redéfinir leur comportement à l'exécution ce qui rend possible les attaques de type Cross Site Scripting (XSS).

Afin de lever ces limites, une proposition émerge : ES 4 annoncée comme étant le futur JavaScript 2. Elle provient principalement de Mozilla, Opera et Adobe qui a déjà ajouté les concepts suivants dans ActionScript 3 le langage utilisé par Flex :

  • L'ajout d'un système objet plus classique basé sur les classes et d'interfaces, familier des développeurs Java ou C#
  • La possibilité d'utiliser un mode de programmation fortement typé à l'instar là aussi de Java. Plusieurs bénéfices : la détection d'erreurs lors de l'écriture du code et non à l'exécution et moins de travail pour le moteur JavaScript et donc de meilleures performances attendues
  • Les objets de base (Object, String, Array etc) deviennent immutable afin de renforcer la sécurité des applications Web
  • Enfin, un peu de sucre syntaxique comme l'ajout de méthodes Array.each ou String.trim.

ES 3.1 : la modération ?

Pourtant ES 4 ne fait pas l'unanimité au sein du groupe chargé de définir le futur de JavaScript : les changements sont trop profonds et en ferait un langage totalement différent, à titre d'exemple la taille de la grammaire doublerait. Microsoft laisse même entendre que ce standard ne sera pas implémenté dans les futures versions d'Internet Explorer.

De plus, certaines corrections du langage risqueraient de casser la compatibilité ascendante, toute la difficulté est là : faut-il accepter les bugs qui sont pour certains devenus presque des features ou faut-il risquer une incompatibilité ?

Rapidement une proposition plus conservatrice conjointe de Microsoft et Yahoo apparaît : ES 3.1. Les fondements du langage y restent inchangés et les modifications sont mineures, principalement des corrections et l'ajout d'une méthode Object.freeze empêchant un objet de pouvoir être modifié.

Un futur harmonieux

Les deux propositions sont ensuite restées en concurrence jusqu'à Juillet dernier où lors d'un meeting à Oslo un consensus est enfin obtenu sur une nouvelle proposition nommée poétiquement « ES-Harmony » .

Il s'agit de recommencer les travaux sur la base d'ES 3.1, l'ajout d'Object.freeze est donc entériné. Certaines des nouveautés d'ES 4 ont été jugées intéressantes et seront réexaminées, d'autres en revanche sont définitivement abandonnées car jugées incompatibles avec le Web, à savoir les namespaces et les packages. Pour finir la nature des objets et le typage dynamique devraient peu évoluer.

Au final on ne sait pas encore exactement à quoi ressemblera le JavaScript de demain si ce n'est que ce ne sera ni Java ni ActionScript (qui va donc diverger d'ECMAScript), l'objectif étant une implémentation dans deux navigateurs de la 4e édition de JavaScript avant la fin de l'année prochaine.

Pour conclure je citerais l'un des protagonistes de la proposition ES 3.1, Douglas Crockford de Yahoo, illustrant la difficulté de faire évoluer un standard :

“Simplicity should be highly valued in a standard. Simplicity cannot be added. Instead, complexity must be removed.”