Watlings - apprendre le format texte de WebAssembly en corrigeant de petits programmes
(github.com/EmNudge)- Watlings est un projet d'entraînement pour apprendre le format texte de WebAssembly en corrigeant plusieurs petits programmes
- Chaque exercice se complète en suivant les instructions dans le répertoire
exercises, puis en testant la réponse avecnpm start 001_hello - Pour vérifier la solution, utilisez la commande
npm run show 001_hello, et pour appliquer directement la solution à l'exercice, utiliseznpm run solve 001_hello - La compilation et les tests utilisent Node 23+ et wasm-tools, avec un appel à
wasm-tools parseà l'intérieur des scripts - Les exercices à partir du n°015 utilisent des fonctionnalités WebAssembly plus récentes, comme exception handling et GC types, et nécessitent le flag
--experimental-wasm-exnref, disponible uniquement dans Node.js 23 ou version ultérieure - Une version web exécutable dans le navigateur est proposée, et l'utilisation de VSCode avec l'extension wat-lsp est recommandée comme éditeur
- La méthode d'apprentissage repose sur une approche centrée sur l'écriture directe, avec des commentaires dans chaque fichier pour présenter le travail et le contexte, en réduisant autant que possible les explications et en favorisant une exposition répétée à la syntaxe dans des contextes variés
- Le projet cite rustlings et Ziglings comme exemples de référence pour la structure du projet
1 commentaires
Commentaires sur Hacker News
Je le vois souvent un peu partout, mais ce qui manque à WASM dans le navigateur, ce n’est pas seulement l’accès au DOM : c’est presque toutes les API web, y compris
fetchetXMLHttpRequestLa liste des API web prises en charge par le navigateur mais pas par WASM est ici, et le DOM n’en est qu’une parmi d’autres : https://developer.mozilla.org/en-US/docs/Web/API
Cela dit, si le GC est finalisé et pris en charge par les navigateurs, il sera peut-être possible d’utiliser ce type d’interfaces. Avec la prise en charge du GC, il est indiqué que le code WebAssembly pourra référencer et accéder à JavaScript, au DOM et aux objets génériques définis en WebIDL
Voir le dernier paragraphe : https://webassembly.org/docs/web/
Vu les possibilités que cela pourrait ouvrir, on dirait que ça prend beaucoup trop longtemps
Cela ressemble beaucoup au modèle d’Exercism. Exercism propose aussi un cours WASM gratuit composé de petits exercices : https://exercism.org/tracks/wasm
Je me demande si l’auteur a envisagé de contribuer à ce cours ou de travailler avec eux. Cela permettrait probablement de toucher un public plus large et de tirer parti des outils existants d’Exercism
C’est un bon modèle dans certains contextes, mais le format de ce dépôt est plus proche de
rustlingsouziglings, où l’on apprend la syntaxe et les fonctionnalités à travers des exemples de codeLe module Wasm d’Exercism n’est pas vraiment « cassé », donc je ne suis pas sûr que ma contribution y serait bien accueillie
Autrement dit, cela ressemble davantage à un ensemble de problèmes à la LeetCode triés par difficulté
Un vrai cours devrait organiser les exercices par fonctionnalités du langage. Exercism a déjà créé une excellente interface pour cela, mais elle n’est pas exploitée pour la plupart des langages : https://exercism.org/tracks/csharp/concepts
L’une de mes façons préférées d’apprendre un nouveau langage ou framework, ce sont les koans, et ça m’y fait penser : https://github.com/ahmdrefat/awesome-koans/blob/master/koans...
La progression est fluide, des fonctionnalités de base aux fonctionnalités avancées, et le déroulé façon TDD — voir les tests échouer, comprendre pourquoi, puis corriger — se prête bien à l’apprentissage. Cela donne aussi la petite dose de dopamine du moment « aha ! »
Pour expérimenter des fonctionnalités comme le GC dans WASM, mieux vaut utiliser
wasm-optde Binaryen plutôt que WABT.wasm-optprend en charge beaucoup plus d’extensions WASMPlutôt chouette
Je n’ai pas vraiment exploré WASM en profondeur directement, mais je compte essayer ce guide, et je pense qu’aujourd’hui, après quelques années, il a déjà apporté un gros bénéfice au développement web
Ce n’est pas le « tueur de JavaScript » que certains attendaient, mais ce n’était pas son objectif au départ. À la place, il s’intègre plutôt bien à l’écosystème existant pour optimiser les cas d’usage actuels, et rend aussi possibles de nouveaux cas d’usage quand des calculs lourds sont nécessaires
C’est un gain net pour tous les développeurs web. On obtient des bibliothèques plus rapides, des outils de développement impressionnants et des binaires Node plus portables
Je me demande s’il y a d’autres raisons que j’aurais manquées
C’est réjouissant de voir l’adoption de WebAssembly continuer à progresser. Microsoft est souvent peu mentionné ici, mais si WASM vous intéresse, je recommande vivement d’essayer Blazor WebAssembly
C’est un framework très puissant qui permet d’utiliser C#, la plupart des bibliothèques .NET et même des packages NuGet dans le navigateur sous forme de WASM compilé
Si un package doit pouvoir lire des fichiers sur le disque, échoue-t-il immédiatement, ou bien l’interface de lecture de fichiers délègue-t-elle l’opération d’une manière comparable au rendu côté serveur ?
Super projet
Je maintiens ici un dépôt plus ou moins lié : https://github.com/eliben/wasm-wat-samples/
J’ai essayé WASM, mais j’ai eu des problèmes pour exposer une connexion à une base de données SQLite à laquelle je voulais me connecter localement
Je me demande si quelqu’un a déjà fait quelque chose de similaire ou peut indiquer de bonnes ressources
Je trouve vraiment intéressant que WebAssembly ressemble à un vrai langage que l’on peut, dans une certaine mesure, écrire à la main
Cela devrait nettement abaisser la barrière à l’entrée quand on le cible
À mesure que WebAssembly devient la langue commune de plusieurs écosystèmes, il vaut de plus en plus la peine d’investir du temps pour bien comprendre son fonctionnement