WebAssembly : un fichier de format binaire complémentaire à JavaScript

Par:
fredericmazue

jeu, 18/06/2015 - 14:39

Indéboulonnable JavaScript... Il est lent, il est peu sûr à l'exécution, il ne convient pas aux grands projets, bref il est plein de défauts :-) C'est un discours que l'on entend souvent et de nombreuses solutions ont été créées pour le remplacer. A l'image d'un langage Dart (Google) ou d'un langage TypeScript (Microsoft). Mais malgré tout ça, JavaScript est toujours là et ses solutions de remplacement connaissent un succès moyen.

Parce qu'il est portable, parce que tous les navigateurs Web l'implémentent, et parce que les applications Web à base de HTML, CSS et JavaScript se sont généralisées ces dernières années, JavaScript s'est imposé, il a la peau dure, et il l'aura probablement encore longtemps.

C'est dans doute pourquoi Google, Microsoft et Mozilla, en coopération avec Brendan Eich, le créateur de JavaScript, se sont associés autour de WebAssembly, un projet qui ne veut pas remplacer JavasScript, mais plutôt lui être complémentaire.

WebAssembly ou wasm est un format de fichier binaire, destiné à être exécuté dans les navigateurs, avec des performances proches du code natif. Un fichier wasm contient d'une part un code-byte annoncé comme au moins 20 fois plus rapide à parser que du code asm.js et d'informations de débogage d'autre part. Il sera donc possible de déboguer une application wasm après compilation.

La compilation, quant à elle, convertit le code source d'un langage en ce byte-code wasm. Pour l'instant il s'agit de code C/C++, mais de nombreux autres langages devraient être supportés ultérieurement. Rust (Mozilla), Go (Google) et C# (Microsoft) au moins sont pressentis.

Comment cela va-t-il se passer si un navigateur ne supporte pas wasm ? Le projet WebAssembly inclut le développement d'une bibliothèque polyfill qui convertira le code-byte wasm en JavaScript. Même dans ces conditions le gain de performances apporté par wasm doit être non négligeable. Toutefois cette solution 'compliquée' ne doit être que temporaire. L'idée directrice du projet est que wasm soit supporté par tous les navigateurs. Cependant, probablement dans le but de favoriser son adoption, les concepteurs du projet ont estimé qu'il était bon qu'un développeur qui adopte wasm puisse toujours être sûr que son code fonctionne partout.

Le projet WebAssembly est sur GitHub.

Mozilla et Breand Eich évoquent WebAssembly respectivement ici et ici.