WebAssembly, qui ambitionne de devenir le code binaire du web, franchit une nouvelle étape. La technologie est en cours de test chez Apple, Google, Microsoft et Mozilla, certains proposant même des préversions aux développeurs intéressés.
WebAssembly est un projet commun des quatre entreprises pour s’occuper des problèmes de JavaScript. Comme nous l’indiquions ce matin, le langage de script est devenu omniprésent, au point d’être utilisé dans la conception de logiciels classiques. On le trouve évidemment surtout dans les pages web, où il permet de créer des services complets. Se pose alors la question des performances.
Gommer les problèmes du JavaScript
De nombreux travaux ont été menés sur les dernières années pour accélérer le traitement du JavaScript. C’est le cas des optimisations réalisées par Google sur le moteur V8, d’asm.js chez Mozilla, de Chakra chez Microsoft et ainsi de suite, chacun y allant de sa machine virtuelle ou de composants divers. Comment du coup garder les avantages de JavaScript, tout en gommant ses défauts, en particulier la sécurité et les performances ?
Apple, Google, Microsoft et Mozilla ont proposé en juin de l’année dernière leur solution : un bytecode, autrement dit un code intermédiaire, à mi-chemin entre le script et l’assembleur. Les développeurs Java et .NET notamment connaissent bien ce code, qui consiste en fait à prémâcher le travail du compilateur en lui fournissant un code précompilé. Les avantages proposés étaient multiples : performances, sécurité, une taille réduite des fichiers, un parsing très rapide du code via des types de variables très simples, etc.
Une première démonstration fonctionnelle
Lors de l’annonce cependant, l’ensemble du projet en était à un stade peu avancé, malgré les efforts manifestes des quatre entreprises. Évidemment, le travail a avancé, et ils sont prêts désormais pour une démonstration et des préversions de certains navigateurs. C’est Mozilla qui a ouvert le bal des annonces, via l’ingénieur Luke Wagner : « Je suis très heureux d’annoncer que WebAssembly a franchi une étape importante : il y a désormais de multiples implémentations expérimentales dans les navigateurs, toutes interopérables ».
Wagner indique que la route est encore longue mais que la synchronisation des éditeurs permet de présenter un résultat beaucoup plus probant au public. Même écho chez Microsoft, à travers Limin Zhu, responsable du développement du moteur Chakra : « En dépit de leur statut précoce, la démo démarre beaucoup plus rapidement qu’en utilisant uniquement asm.js, puisque les binaires WebAssembly ont une taille de fichier réduite et sont parsés plus rapidement que du JavaScript ordinaire ».
Un travail sur les performances avant tout
Du côté de chez Google, le message est peu ou prou le même : les performances sont clairement supérieures. Le responsable Seth Thompson explique par ailleurs que la prise en charge de WebAssembly se fait en aménageant une compatibilité dans la machine virtuelle V8, notamment en réutilisant le compilateur TurboFan. « Un décodeur WebAssembly spécialisé valide les modules en vérifiant les types, les indices de variables locales, les références de fonctions, les valeurs de retour et la structure du contrôle de flux en une seule passe ».
Pour autant, même si la démonstration fournie est fonctionnelle, les travaux nécessaires sont encore nombreux, sans parler des outils à fournir aux développeurs. Thomson en donne d’ailleurs une idée : « Nous prévoyons également plusieurs fonctionnalités pour le futur (notamment le multithreading, le dynamic linking et une intégration au DOM et au ramasse-miettes) et de continuer le développement des toolchains pour la compilation C, C++ et d’autres langages, via le backend WebAssembly LLVM et Emscripten ».
Chez Mozilla, les ambitions sont les mêmes. Le support de WebAssembly sera donc ajouté plus tard aux outils de développement de Firefox, notamment le débogueur et le profileur. Parmi les améliorations envisagées, l’éditeur souhaite également réduire le temps de lancement à froid et la préparation d’un lot complet d’opérateurs. Luke Wagner, qui travaille également au W3C, indique que ce dernier suit le développement de près en vue de standardiser l’ensemble.
Le succès passe par la séduction des développeurs web
Il est évident que WebAssembly pourrait jouer un grand rôle dans le développement web au cours des prochaines années. Le succès de la technologie passe cependant par une interopérabilité totale (ce qui est évidemment l’un des objectifs) et par des outils adaptés aux développeurs. La question du support par les navigateurs ne se pose évidemment pas, les sociétés travaillant sur le projet représentant tous les plus utilisés.
Actuellement, si l’on souhaite tester WebAssembly, il n’existe qu’un moyen de le faire : se rendre sur la nouvelle page mise en ligne sur le dépôt GitHub officiel. De là, on pourra récupérer une préversion de Chrome ou de Firefox compatible, puis revenir sur la page afin d’y lancer la démo, Angry Bots (basé sur le moteur Unity). Cette dernière est un jeu où l’on contrôle au clavier (déplacements) et à la souris (tir et visée) un personnage dans un complexe futuriste, rempli de robots meurtriers. Notez qu’on peut la lancer également en asm.js classique pour mesurer l’écart significatif des temps de chargement.
Pour ceux qui le souhaitent d’ailleurs, la page est à garder dans les favoris pour vérifier le statut général du projet. Signalons également que Microsoft dispose également d’une version compatible de son navigateur Edge, mais uniquement en interne pour l’instant. Du côté d’Apple, pas d’annonce particulière, mais la page consacrée au statut des technologies supportées par Webkit indique bien que WebAssembly est en développement.