4 puntos por GN⁺ 2023-09-06 | 1 comentarios | Compartir por WhatsApp
  • Watlings es un proyecto práctico para aprender el formato de texto de WebAssembly corrigiendo varios programas pequeños
  • Cada ejercicio se completa siguiendo las instrucciones dentro del directorio exercises, y las respuestas se prueban con npm start 001_hello
  • Para revisar la solución se usa el comando npm run show 001_hello, y para aplicar la solución directamente al ejercicio se usa npm run solve 001_hello
  • Para compilar y ejecutar las pruebas usa Node 23+ y wasm-tools; dentro de los scripts se invoca wasm-tools parse
  • Los ejercicios a partir del número 015 usan funciones más nuevas de WebAssembly, como exception handling y GC types, y requieren la bandera --experimental-wasm-exnref, disponible solo en Node.js 23 o superior
  • Ofrece una versión web que puede ejecutarse en el navegador, y recomienda usar VSCode junto con la extensión wat-lsp como editor
  • El método de aprendizaje presenta el trabajo y el contexto mediante comentarios en cada archivo, reduce las explicaciones al mínimo y adopta un enfoque centrado en escribir directamente para exponer repetidamente la sintaxis en distintos contextos
  • Como ejemplos de referencia para la estructura del proyecto, menciona rustlings y Ziglings

1 comentarios

 
GN⁺ 2023-09-06
Comentarios de Hacker News
  • Lo veo mencionado seguido en varios lados, pero lo que le falta a WASM en el navegador no es solo acceso al DOM, sino casi todas las Web API, incluidas fetch y XMLHttpRequest.
    La lista de Web API que el navegador soporta pero WASM no está aquí, y el DOM es solo una de ellas: https://developer.mozilla.org/en-US/docs/Web/API
    Aun así, si GC se concreta y los navegadores lo soportan, podría ser posible usar estas interfaces. Se dice que, con soporte para GC, el código WebAssembly podrá referenciar y acceder a JavaScript, al DOM y a objetos comunes definidos con WebIDL.
    Ver el último párrafo: https://webassembly.org/docs/web/

  • Se ve muy parecido al modelo de Exercism. Exercism también tiene un curso de WASM gratuito lleno de pequeños ejercicios: https://exercism.org/tracks/wasm
    Me pregunto si el autor consideró contribuir a ese curso o trabajar junto con ellos. Así podría llegar a una audiencia más amplia y aprovechar las herramientas existentes de Exercism.

    • Me encanta Exercism, pero su modelo de ejercicios es mucho más libre, con bloques bastante más grandes y relativamente menos guiado.
      Es un buen modelo en ciertos contextos, pero el formato de este repositorio se parece más a rustlings o ziglings, donde se aprende sintaxis y funcionalidades junto con ejemplos de código.
      El módulo de Wasm de Exercism no está precisamente “roto”, así que no sé si mi contribución sería bienvenida.
    • Lo que no me gusta de Exercism es que, salvo en los lenguajes populares, los ejercicios suelen ser poco sistemáticos.
      En otras palabras, se parecen más a un conjunto de problemas estilo LeetCode ordenados por dificultad.
      Un curso bien hecho debería organizar los ejercicios por funcionalidades del lenguaje. Exercism ya creó una interfaz excelente para esto, pero la mayoría de los lenguajes no la aprovechan: https://exercism.org/tracks/csharp/concepts
  • Una de mis formas favoritas de aprender un lenguaje o framework nuevo son los koans, y esto me los recuerda: https://github.com/ahmdrefat/awesome-koans/blob/master/koans...
    La progresión suave desde funciones básicas hasta avanzadas, y el flujo tipo TDD de ver fallar una prueba, entender por qué y luego arreglarla, encajan muy bien con el aprendizaje. También te da esa dopamina del momento “¡ajá!”.

    • Suena como una buena forma de aprender un lenguaje por cuenta propia. Lamentablemente falta Rust; me pregunto si alguien podría recomendar un enlace.
  • Para experimentar con funcionalidades como GC en WASM, conviene usar wasm-opt de Binaryen en lugar de WABT. wasm-opt soporta muchas más extensiones de WASM.

  • Bastante genial.
    No he trabajado directamente con WASM en profundidad, pero pienso probar esta guía, y creo que, a estas alturas, después de varios años, ya aportó grandes beneficios al desarrollo web.
    No fue el “asesino de JavaScript” que algunos esperaban, pero ese nunca fue realmente su propósito. En cambio, se integra bastante bien con el ecosistema existente para optimizar casos de uso actuales y habilitar nuevos cuando hace falta cómputo pesado.
    Es una ganancia neta para todos los desarrolladores web. Tenemos librerías más rápidas, herramientas de desarrollo impresionantes y binarios de Node más portables.

    • He seguido WASM desde lejos, y entiendo que la razón por la que no es un asesino de JS es que no puede acceder directamente al DOM ni a la mayoría de las API del DOM.
      Me pregunto si hay alguna otra razón que se me esté escapando.
  • Me alegra que la adopción de WebAssembly siga avanzando. Por aquí Microsoft suele recibir poca atención, pero si te interesa WASM, recomiendo mucho probar Blazor WebAssembly.
    Es un framework muy potente que permite usar C#, la mayoría de las librerías de .NET e incluso paquetes NuGet en el navegador como WASM compilado.

    • Cuando dicen “la mayoría de los paquetes NuGet”, me pregunto cuáles son las limitaciones.
      Si un paquete necesita leer archivos del disco, ¿falla de inmediato, o la interfaz de lectura de archivos deriva la operación a algo como renderizado del lado del servidor?
    • Por lo que he leído, parece tener el mismo problema que al compilar Go a WASM. El payload es grande, y aun comprimido suele pesar varios MB.
  • Gran proyecto.
    Mantengo aquí un repositorio algo relacionado: https://github.com/eliben/wasm-wat-samples/

    • Se ve realmente útil. Ojalá lo hubiera conocido cuando empecé a aprender wat; parece que será una excelente referencia.
  • Probé WASM y tuve problemas para exponer una conexión a una base de datos SQLite que quería conectar localmente.
    Me pregunto si alguien hizo algo parecido o puede recomendar buenos recursos.

  • Me parece realmente interesante que WebAssembly se vea como un lenguaje real que puede escribirse a mano hasta cierto punto.
    Creo que eso reduce bastante la barrera de entrada cuando se lo usa como target.

  • A medida que WebAssembly se convierte en un lenguaje común entre varios ecosistemas, vale cada vez más la pena invertir tiempo en entender bien cómo funciona.