- 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 connpm 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 usanpm 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
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
fetchyXMLHttpRequest.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/
Pensando en las posibilidades que podría abrir, parece que el avance está tardando demasiado.
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.
Es un buen modelo en ciertos contextos, pero el formato de este repositorio se parece más a
rustlingsoziglings, 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.
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á!”.
Para experimentar con funcionalidades como GC en WASM, conviene usar
wasm-optde Binaryen en lugar de WABT.wasm-optsoporta 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.
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.
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?
Gran proyecto.
Mantengo aquí un repositorio algo relacionado: https://github.com/eliben/wasm-wat-samples/
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.