4 points par GN⁺ 2023-09-06 | 1 commentaires | Partager sur WhatsApp
  • 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 avec npm start 001_hello
  • Pour vérifier la solution, utilisez la commande npm run show 001_hello, et pour appliquer directement la solution à l'exercice, utilisez npm 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

 
GN⁺ 2023-09-06
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 fetch et XMLHttpRequest
    La 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/

  • 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

    • J’aime beaucoup Exercism, mais leur modèle d’exercices est bien plus libre, avec des blocs beaucoup plus gros, et il enseigne relativement moins
      C’est un bon modèle dans certains contextes, mais le format de ce dépôt est plus proche de rustlings ou ziglings, où l’on apprend la syntaxe et les fonctionnalités à travers des exemples de code
      Le module Wasm d’Exercism n’est pas vraiment « cassé », donc je ne suis pas sûr que ma contribution y serait bien accueillie
    • Ce que je n’aime pas dans Exercism, c’est qu’à l’exception des langages populaires, les exercices sont généralement peu structurés
      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 ! »

    • Ça semble être une bonne façon d’apprendre un langage en solo. Dommage qu’il manque Rust ; je me demande si quelqu’un aurait un lien à recommander
  • Pour expérimenter des fonctionnalités comme le GC dans WASM, mieux vaut utiliser wasm-opt de Binaryen plutôt que WABT. wasm-opt prend en charge beaucoup plus d’extensions WASM

  • Plutô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

    • J’ai suivi WASM de loin, et je comprends que la raison pour laquelle ce n’est pas un tueur de JS est qu’il ne peut pas accéder directement au DOM ni à la plupart des API DOM
      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é

    • Quand on dit « la plupart des packages NuGet », je me demande quelles sont les limites
      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 ?
    • D’après ce que j’ai lu, cela semble avoir le même problème que la compilation de Go vers WASM. Le payload est gros, généralement plusieurs Mo même après compression
  • Super projet
    Je maintiens ici un dépôt plus ou moins lié : https://github.com/eliben/wasm-wat-samples/

    • Ça a l’air vraiment utile. J’aurais aimé connaître ça quand j’apprenais wat au début ; ça devrait faire une excellente référence
  • 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