WebAssembly es un lenguaje de bajo nivel, similar a ensamblador, diseñado para ser rápido de cargar y ejecutar en navegadores modernos. Su objetivo es permitir que aplicaciones escritas en distintos lenguajes se ejecuten en la web con velocidad casi nativa.
Los formatos que soporta son:
- .wasm: un formato binario ejecutable.
- .wat: un formato formato de texto legible.
Se complementa con JavaScript; permite invocar funciones WASM desde JS y viceversa. Y como vimos en este blog, también puedes optar por usar un lenguaje como Grain cuya compilación es directa a WASM.
¿Cuál es el objetivo de WebAssembly?
El objetivo de WebAssembly es compilar código escrito en lenguajes como Rust, C o C++ (entre otros) y transformarlo en un módulo .wasm que puede ejecutarse en navegadores o en entornos como Node.js con rendimiento cercano al nativo.
Flujo típico de trabajo con WebAssembly:
- Escribimos nuestro código en un lenguaje soportado (ej. Rust, C, C++, Go, AssemblyScript).
- Compilamos ese código a WebAssembly y se generará un archivo .wasm.
- Cargamos el módulo en tu aplicación web usando JavaScript.
- Ejecutamos las funciones exportadas desde el módulo .wasm como si fueran algo nativo.
¿Y qué con Dlang?
Dlang es un lenguaje similar al mítico y poderoso C. No solo en su sintaxis sino en su filosofía.
Dlang permite generar código WASM mediante la herramienta LDC.
Creando código WASM con Dlang
Crearemos una sencilla función llamada ``suma_wasm.d``.
extern(C): double suma(double a, double b) { return a + b; } void _start() {}
Compilamos para generar el código WASM:
$ ldc2 -mtriple=wasm32-unknown-unknown-wasm -betterC suma_wasm.d
Ahora crearemos una página HTML para cargar el código WASM generado (suma_wasm.wasm).
index.html
<html> <head> <script> const request = new XMLHttpRequest(); request.open('GET', 'suma_wasm.wasm'); request.responseType = 'arraybuffer'; request.onload = () => { console.log('respuesta recibida'); const bytes = request.response; const importObject = {}; WebAssembly.instantiate(bytes, importObject).then(result => { console.log('iniciado'); const { exports } = result.instance; const r = exports.suma(33, 10.88); console.log('r = ' + r); }); }; request.send(); console.log('solicitud enviada'); </script> </head> <body> Código D desde WebAssembly </body> </html>
Ahora ejecutaremos este comando para abrir la página web:
$ python -m http.server 8000
Abrimos un navegador en la ruta: http://localhost:8000
Salida:
solicitud enviada respuesta recibida iniciado r = 43.88
WebAssembly permite que aplicaciones complejas escritas en lenguajes de alto nivel como D, C/C++, Rust, etc. se ejecuten en aplicaciones web a través de un compilado .wasm.
Imaginemos que hemos creado una aplicación para gestionar datos complejos en Rust o Java y la queremos ejecutar como una aplicación web. Con WebAssembly es posible. Se podrá compialr ese código y generar un archivo .wasm que podrá ser cargado en una página web.
Continuaremos con este tema en próximas entregas.
Enlaces:
https://dlang.org/https://webassembly.org/
https://wiki.dlang.org/Generating_WebAssembly_with_LDC
https://alquimistadecodigo.blogspot.com/2026/04/webassembly-con-rust.html

No hay comentarios:
Publicar un comentario