Descripción general
Un libro de 312 páginas compuesto por 11 capítulos. Además del texto, contiene una gran cantidad de código. También incluye numerosas ilustraciones que aclaran distintos ejemplos. El nivel de lectura es avanzado. Al final de cada capítulo se ofrece un breve resumen.
Resumen rápido
Los dos primeros capítulos sirven como introducción a la tecnología. El autor explica por qué existe WebAssembly, en qué contextos se utiliza y muestra formas de interactuar con ella. Se presenta el formato textual de WebAssembly (WAT), y se analiza el primer programa: Hola, mundo!. El formato WAT se utiliza durante casi toda la obra.
Siguientes capítulos
El siguiente capítulo se centra en funciones e integración más estrecha con JavaScript. Se abordan los tipos de datos, el manejo de variables (globales y locales), estructuras condicionales (if/else), ciclos y bifurcaciones. Algunos de estos temas ya se mencionan brevemente en el segundo capítulo.
Le sigue un capítulo principalmente teórico dedicado al manejo de números. Si alguna vez has trabajado con representaciones en binario directo, complemento a uno y complemento a dos, o con operaciones bit a bit (desplazamientos, máscaras, XOR), este capítulo te resultará familiar y despertará cierta nostalgia.
Luego viene un capítulo sobre cadenas de texto, en el que se examinan las codificaciones ASCII y Unicode, el almacenamiento de cadenas en la memoria lineal y otros aspectos relacionados.
A continuación, se profundiza en el uso de la memoria lineal. Sobre esta base, se desarrolla un ejemplo interesante: un programa que detecta colisiones entre objetos. Este ejemplo se perfecciona y amplía más adelante.
Después, varios capítulos están dedicados a la creación de una pequeña aplicación web completa. Uno de ellos explica cómo configurar un servidor con Node.js y cómo interactuar con el DOM, mientras que otro se centra en el uso de Canvas.
Posteriormente, el autor aborda el tema de depuración del código WebAssembly: cómo encontrar y corregir errores y cómo identificar funciones que consumen muchos recursos. Estos temas ocupan dos capítulos completos.
El libro cierra con un capítulo sobre AssemblyScript, un lenguaje de alto nivel creado especialmente para WebAssembly. También se incluye una comparación de rendimiento con otros enfoques.
Opinión personal
Este año WebAssembly cumple 10 años — una edad lo suficientemente madura para evaluar si ha cumplido sus promesas y qué lugar ocupa actualmente en el mercado. Es cierto que grandes compañías como Google (Docs), Figma o Photoshop han reescrito partes críticas o incluso módulos completos usando WebAssembly. Sin embargo, su adopción en el desarrollo web general sigue siendo lenta, y JavaScript/TypeScript siguen sin tener competencia real.
Quizás una causa sea la ausencia de un recolector de basura integrado, lo que dificulta el uso de lenguajes como Python o Java. A diferencia de C++ o Rust, que desde su diseño manejan explícitamente la memoria, esos lenguajes tienen más dificultades para adaptarse a WebAssembly (aunque en los últimos años se ha avanzado bastante en esta área). Otra limitación es la falta de acceso directo al DOM. Intentar usar WebAssembly mediante capas compiladas o realizar demasiadas llamadas desde JavaScript puede incluso hacer que la solución final sea más lenta que el código JS nativo.
Al leer este libro, poco a poco se entiende por qué WebAssembly aún se limita a casos específicos y no ha logrado una adopción masiva en desarrollo aplicado. Es una tecnología verdaderamente compleja. Imagina mezclar ensamblador con un lenguaje de nivel algo superior, y luego añadir una sintaxis parecida a Lisp. Esa es más o menos la sensación que transmite el libro. Hace mucho que no trabajo con código de bajo nivel, por lo que muchos capítulos me resultaron difíciles. Claro que hubo momentos en los que valoré el enfoque e incluso disfruté analizando el código. Pero en general, el libro me pareció bastante exigente. Por primera vez en mucho tiempo, sentí la necesidad de dividir las frases del autor en oraciones más cortas para entender mejor el significado.
Para formarse una base sólida sobre WebAssembly y aprender WAT, el libro es excelente. Pero claramente no basta para comenzar a aplicar la tecnología en un proyecto profesional justo después de leerlo.