Quelle feuille de route 2018 pour WebAssembly

Le format de bas niveau WebAssembly permettant d’exécuter rapidement des apps web sur des mobiles va bénéficier d’améliorations notables pendant les mois qui viennent. Au programme : ramasse-miettes, support des threads, fonctions de débogage améliorées ou encore support étendu des langes de programmation.

Trois premières ébauches de travail publiques sur la technologie WebAssembly ont été publiées par le W3C. (crédit : Feralt/Pixabay)

Selon la feuille de route de WebAssembly, le compagnon JavaScript qui permet une exécution plus rapide des applications Web sur les ordinateurs et périphériques mobiles, le format binaire devrait offrir un meilleur support des langages de programmation grâce notamment à la collecte des ordures, aux threads, à un meilleur débogage et à l’ajout d’une extension SIMD (instruction unique, données multiples). Introduit en grande pompe en 2015, WebAssembly est un format bas niveau qui surpasse les performances du JavaScript quand il s’agit d’exécuter des opérations de calcul intensif dans un navigateur. Le format de code binaire généré par WebAssembly est plus léger, il se charge plus rapidement et offre de meilleures performances que JavaScript. Il pourrait s’avérer utile dans des applications de CAO basées sur le Web, la modélisation 3D, les calculateurs et les jeux.

Le groupe du World Wide Web Consortium (W3C) en charge de WebAssembly a publié trois premières ébauches de travail publiques sur la technologie, y compris une proposition de base et une interface pour JavaScript. Celles-ci incluent :

WebAssembly Core Specification : elle décrit la Version 1.0 de la norme qu’elle définit comme un format sûr, portable et low-code permettant une représentation compacte et une exécution efficace. La proposition précise les objectifs de WebAssembly. Notamment que le code WebAssembly supportera les applications Web hautes performances, facilitera l’inspection et le débogage. Par ailleurs, la technologie est structurée autour de concepts comprenant des types de valeurs de base et un modèle informatique dit de machines à stack. Le code est organisé selon des fonctions distinctes. La spécification mentionne également l’intention d’être indépendant du matériel, du langage et de la plate-forme.

WebAssembly JavaScript Interface : elle spécifie une API JavaScript explicite pour interagir avec WebAssembly. Initialement, l’API sert à accéder à WebAssembly à partir de la plate-forme web via une passerelle pour construire des modules à partir d’ECMAScript, la spécification sous-jacente de JavaScript. Les futures versions pourraient charger et exécuter directement WebAssembly à partir d’un tag HTML <script type=’ module’ > et de tout autre API Web chargeant des modules ECMAScript 6 via une URL dans le cadre de l’intégration du module ECMAScript 6.

WebAssembly Web API : elle décrit l’intégration de WebAssembly avec la plate-forme Web élargie. La proposition couvre des aspects tels que la compilation de modules de streaming, l’instanciation et les conventions d’affichage orientés développeur.

Les fonctionnalités qui arrivent dans WebAssembly

Ramasse-miettes« Pour permettre à WebAssembly de prendre en charge plusieurs langages de programmation, la collecte des ordures est nécessaire pour allouer et manipuler efficacement les objets gérés à partir du code WebAssembly », a déclaré Deepti Gandluri, ingénieur logiciel Google Chrome, membre de l’équipe WebAssembly. Actuellement, la collecte des ordures fait partie des propositions de la feuille de route de WebAssembly.

Support des threads bientôt disponible : « Nous comptons livrer une version test comportant le support des threads, courant 2018, la sortie de la « general release » étant programmée pour juillet 2018 », a aussi déclaré Deepti Gandluri. L’usage des threads simplifiera le portage d’applications multithreads sur le web et préparera le terrain pour des applications plus rapides.

Des fonctions de débogage améliorées en cours de développement : Afin d’améliorer le débogage, les développeurs de WebAssembly travaillent sur de capacités de mappage des sources et d’inspection de mémoire. Pour l’instant, les fonctions de débogage de WebAssembly sont limitées. Grâce à l’ajout prévu de l’extension SIMD, WebAssembly sera compatible avec les instructions utilisées dans le traitement des images et des vidéos et dans la cryptographie. Également inscrit à la feuille de route, le mécanisme « zero-cost» pour la gestion des exceptions en C/C++ pour éviter les surcharges de code.

Un support étendu des langages de programmation : L’un des principaux objectifs de WebAssembly est de permettre l’exécution de code écrit dans des langages autres que JavaScript dans le navigateur. La technologie sert de cible de compilation pour d’autres langues. Pour l’instant, le C++ est le langage conseillé avec WebAssembly. Mais, il est techniquement possible d’utiliser d’autres langages avec WebAssembly. « Il existe des implémentations expérimentales permettant travailler avec le format, mais ces langages ne peuvent pas offrir les meilleures performances, un usage mémoire ou l’intégration DOM », a expliqué Luke Wagner, un ingénieur de l’équipe WebAssembly de Mozilla. Par conséquent, WebAssembly sera probablement amélioré pour prendre en charge les langages nécessitant des niveaux de collecte d’ordures (Garbage Collector) plus importants, comme Java, C# et Python. Mais cela pourrait prendre quelques années.

Prise en charge de WebAssembly par les navigateurs : Actuellement, WebAssembly est disponible pour les dernières versions des quatre navigateurs principaux : Apple Safari, Google Chrome, Microsoft Edge et Mozilla Firefox. Google a publié une librairie 3D appelée Draco qui utilise WebAssembly. Utilisée pour compresser et décompresser les maillages géométriques 3D et les nuages de points de données, la bibliothèque open source Draco dispose d’un décodeur WebAssembly qui améliore les performances. Il est possible d’utiliser WebAssembly avec JavaScript dans les applications, le code JavaScript servant à l’écriture de scripts et WebAssembly servant à améliorer les performances de traitement. Les API JavaScript de WebAssembly peuvent charger des modules WebAssembly dans une application JavaScript.

chevron_left
chevron_right