Description générale
Un livre de 312 pages composé de 11 chapitres. En plus du texte, il contient une grande quantité de code et de nombreuses illustrations explicatives pour illustrer divers exemples. Le niveau de lecture est élevé. Chaque chapitre se termine par un bref résumé.
Aperçu rapide
Les deux premiers chapitres servent d'introduction à la technologie. L’auteur explique pourquoi WebAssembly est nécessaire, dans quels cas l’utiliser et montre comment interagir avec elle. Le format texte de WebAssembly (WAT) est introduit, et le premier programme « Bonjour, le monde ! » est analysé. Le WAT est utilisé tout au long de l’ouvrage, sauf exception.
Le chapitre suivant traite des fonctions et d’une intégration plus étroite avec JavaScript. Sont abordés les types de données, la gestion des variables (locales et globales), les conditions (if/else), les boucles et les branchements. Certains de ces sujets ont déjà été effleurés dans le deuxième chapitre.
Vient ensuite un chapitre essentiellement théorique consacré à la manipulation des nombres. Si vous avez déjà manipulé les représentations binaire directe, complément à un ou complément à deux, ou les opérations bit à bit (décalages, masques, XOR), ce chapitre suscitera chez vous une certaine nostalgie bienvenue.
Le chapitre suivant se penche sur les chaînes de caractères : encodages ASCII et Unicode, stockage des chaînes en mémoire linéaire, et bien d’autres aspects.
Un chapitre approfondit ensuite l’utilisation de la mémoire linéaire, autour d’un exemple concret : un programme détectant des collisions entre objets. Cet exemple est par la suite amélioré et rendu plus complexe.
Viennent ensuite plusieurs chapitres centrés sur la création d’une mini-application web complète. L’un d’eux couvre la configuration d’un serveur Node.js et l’interaction avec le DOM, un autre le travail avec Canvas.
Ensuite, l’auteur explique comment déboguer du code WebAssembly, repérer et corriger les erreurs, ainsi que détecter les fonctions gourmandes en ressources. Deux chapitres sont consacrés à ces thèmes.
Le livre s’achève sur un chapitre traitant d’AssemblyScript, un langage de haut niveau spécialement conçu pour WebAssembly. Une comparaison des performances avec d’autres approches est également présentée.
Avis personnel
Cette année marque les 10 ans de WebAssembly — un âge suffisamment mûr pour évaluer si la technologie a tenu ses promesses et quelle place elle occupe réellement sur le marché. Certes, de grands acteurs comme Google (Docs), Figma ou Photoshop utilisent WebAssembly pour réécrire des modules critiques, voire entiers. Pourtant, son adoption générale dans le développement web reste lente, et JavaScript/TypeScript conservent clairement leur position dominante.
Peut-être que l’absence de ramasse-miettes intégré en est une des causes, rendant WebAssembly peu adapté à des langages comme Python ou Java. Contrairement au C++ ou à Rust, pensés dès l’origine pour gérer la mémoire manuellement, ces langages ont plus de mal à « s’insérer » dans WebAssembly (même si des progrès notables ont été faits récemment). On note aussi l’impossibilité d’accéder directement au DOM. Tenter d’utiliser WebAssembly via des surcouches compilées ou multiplier les appels en provenance de JavaScript peut même aboutir à des solutions moins efficaces que du code JS natif.
En lisant ce livre, on finit par comprendre pourquoi WebAssembly reste cantonnée à des usages ponctuels et n’a pas encore percé dans le développement courant. C’est une technologie réellement complexe. Imaginez un mélange entre l’assembleur et un langage un peu plus haut niveau, auquel on ajoute une syntaxe évoquant Lisp. C’est un peu cette impression qu’on ressent en lisant l’ouvrage. N’ayant pas touché à du code bas niveau depuis longtemps, beaucoup de chapitres m’ont été difficiles. Certes, j’ai eu des moments où j’ai apprécié l’approche, voire pris plaisir à analyser le code. Mais globalement, le livre m’a semblé très exigeant. Pour la première fois depuis longtemps, j’ai eu envie de découper les phrases de l’auteur en énoncés plus courts, pour mieux en saisir le sens.
Pour se faire une bonne introduction à WebAssembly et prendre en main le format WAT, ce livre est excellent. Mais il ne suffit clairement pas à permettre d’appliquer directement la technologie dans un projet professionnel juste après l’avoir terminé.