Écrire du Web Assembly "from scratch" avec WAT

Compiler vers du Web Assembly c'est bien, mais l'écrire à la main, c'est mieux ?

Améliorez vos compétences en dev !

Des cours complets, créés par des experts, pour tous niveaux et accessibles en illimité grâce à notre abonnement !

Découvrir

19,99€/mois

Écrire du Web Assembly "from scratch" avec WAT
Dans un précédent article nous avons parlé du concept de Web Assembly, de sa nature et de son utilité (voir l'article).

Le WASM est généralement compilé à partir d'un autre langage, plutôt bas-niveau (C++, Rust, Go,...), mais le saviez-vous, il est également possible d'écrire du Web Assembly à la main (from scratch) ?

Web Assembly Text Format (WAT)

Le WAT est une représentation textuelle du format binaire de WASM, qui permet deux choses :

  • Ecrire du WASM directement, sans le compilier depuis un autre langage
  • Comprendre et analyser le fonctionnement d'un module WASM existant

Bien sûr, en théorie, rien ne vous empêche d'écrire un module en web assembly sous le format binaire, mais avouons, la tâche est plutôt imbuvable :

00 61 73 6d 01 00 00 00 
01 07 01 60 02 7f 7f 01 
7f 03 02 01 00 07 0c 01 
08 6d 75 6c 74 69 70 6c 
79 00 00 0a 09 01 07 00 
20 00 20 01 6c 0b
Ci-dessus, un module exposant une simple fonction pour multiplier deux entiers 32 bits.

Et si jamais vous viens l'envie de tenter l'expérience, voici la documentation complète de la spécification : https://webassembly.github.io/spec/core/index.html

Mais si, comme le commun des mortels, vous ne passez pas vos Samedi soirs à manger de l'hexadécimal, le format textuel WAT sera sûrement bien plus adapté :

(module
  (func $multiply (param $lhs i32) (param $rhs i32) (result i32)
    get_local $lhs
    get_local $rhs
    i32.mul)
  (export "multiply" (func $multiply))
)
Ci-dessus le même module, mais au format WAT

Chaque structure de la grammaire de Web Assembly a été ramené dans un langage lisible, court et relativement facile à écrire donc vous pouvez retrouver toute la documentation ici.

Une fois votre module écrit en WAT, il vous suffira de le compiler en WASM avec des outils comme celui-ci :

wat-wasm
WebAssembly Text to binary WASM module tools. It includes a version of wat2wasm that has optimization flag. It also has a version of wasm2wat to convert from WASM binary back to WAT. This tool provides a CLI built on top of WebAssembly Binary Toolkit a
J'espère que cet article vous aura été utile, et à bientôt sur le blog !

Les articles les plus populaires du blog

Envie de continuer à lire des articles autour du développement web (entre autres) ? Voici la sélection des articles de mon blog les plus lus par la communauté !

Voir la sélection 🚀

Recevez les articles de la semaine par e-mail pour ne rien manquer !

S'abonner à la newsletter 📧
Mes formations disponibles 🎓  -5% inclus pour les lecteurs du blog

À propos de l'auteur

Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage d'expériences et de connaissances.

Aujourd'hui je suis aussi formateur pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et recevoir des offres exclusives !


Photo par Rick Mason sur Unsplash