6 Lenguajes que puedes Desplegar a WebAssembly ahora mismo

WebAssembly (Wasm) ofrece a los desarrolladores la capacidad de crear programas que se ejecutan a una velocidad cercana a la nativa en el navegador o en cualquier otro entorno que soporte la ejecución de Wasm.

Aunque no se escribe directamente en Wasm, sino que se programan en otros lenguajes que se pueden compilar a Wasm, algunos de los cuales son más adecuados para ser traducidos a Wasm que otros.

Aquí te mostramos seis lenguajes que pueden ser desplegados en runtimes Wasm y qué debes saber al respecto.

1. Rust

Rust es uno de los lenguajes más adecuados para desplegar en WebAssembly. El código Rust existente no necesita muchos cambios para compilarse a Wasm.

La mayoría de los ajustes son en la configuración del compilador y la configuración de compilación. Además, la herramienta de Rust genera automáticamente el código JavaScript necesario para que los módulos compilados en Wasm trabajen directamente con las páginas web.

El tamaño del módulo compilado variará, pero Rust puede generar un código bastante eficiente, por lo que un «Hola Mundo» generalmente no supera unos pocos kilobytes.

Los mantenedores de Rust incluso han creado una guía completa para usar Wasm desde Rust, con detalles sobre cómo mantener pequeños los binarios entregados y agregar soporte Wasm a crates de Rust existentes.

2. C/C++

C y C++ fueron de los primeros lenguajes en ser compilados a Wasm, en gran parte porque muchos comportamientos de bajo nivel de estos lenguajes se mapean bien con el conjunto de instrucciones de Wasm.

Muchos de los primeros demos de Wasm eran puertos de gráficos y juegos escritos en C/C++.

Una de las primeras herramientas desarrolladas para compilar C/C++ a Wasm fue el conjunto de herramientas Emscripten que ahora se ha convertido en un entorno completo para compilar C o C++ a Wasm.

Emscripten admite características avanzadas como SIMD, redes, excepciones en C++ y código asincrónico, aunque la cantidad de trabajo requerido varía según la característica. Con la versión 8 en adelante del compilador Clang, se puede compilar nativamente a Wasm sin herramientas adicionales.

3. Golang

El lenguaje Go añadió soporte para WebAssembly como objetivo de compilación en la versión 1.11, lanzada en agosto de 2018. Desde entonces, Wasm ha sido bien soportado como objetivo en Go, con algunas advertencias.

La mayor parte del trabajo al compilar programas Go a Wasm implica ajustar el proceso de compilación en lugar de modificar el programa en sí.

El toolchain de Wasm está incluido en el compilador de Go, por lo que no necesitas instalar herramientas adicionales, solo cambiar las variables de entorno GOOS y GOARCH al compilar.

Aunque interactuar con el DOM (Document Object Model) a través del paquete syscalls/js puede ser incómodo para interacciones más complejas, aunque existen bibliotecas de terceros para hacerlo más fácil.

Un inconveniente de usar Go con Wasm es el tamaño de los binarios generados, que puede ser considerable debido al runtime de Go, incluso para un «Hola Mundo».

Se puede comprimir los binarios de Wasm para ahorrar espacio o utilizar un runtime alternativo como TinyGo, aunque este solo es compatible con un subconjunto del lenguaje Go.

4. JavaScript

Parece redundante compilar JavaScript a Wasm, dado que la mayoría de los navegadores ya incluyen un runtime de JavaScript. Aunque es posible hacerlo, y uno de los métodos más disponibles para convertir JavaScript en Wasm es Javy, creado por la Bytecode Alliance.

Javy no compila JavaScript directamente a Wasm, sino que lo ejecuta en un runtime de JavaScript basado en Wasm.

Utiliza una estrategia de enlace dinámico para mantener los módulos Wasm relativamente pequeños, aunque el tamaño final dependerá de las características usadas en el programa.

5. Python

El caso de Python es similar al de Go, pero más pronunciado. No puedes ejecutar un programa de Python sin el runtime de Python y hacer algo útil sin la biblioteca estándar de Python es complicado.

Es posible ejecutar Python a través de un runtime Wasm, pero la herramienta disponible actualmente no está muy optimizada.

Una forma común de ejecutar aplicaciones Python a través de un runtime Wasm es Pyodide, un puerto del runtime CPython a Wasm mediante Emscripten. Una de sus implementaciones, PyScript, permite ejecutar programas Python en páginas web como si fueran programas JavaScript.

No obstante, Pyodide tiene varias limitaciones, como la necesidad de portar manualmente los paquetes que usan extensiones en C, como NumPy, para que funcionen.

6. Java

Java también puede ser compilado a Wasm, aunque el proceso no es tan sencillo como el de otros lenguajes. Se requiere una configuración especial y el uso de herramientas adicionales.

Aunque hay implementaciones como TeaVM que permiten compilar código Java a Wasm, la compatibilidad no es perfecta y el soporte para bibliotecas y el ecosistema de Java completo es limitado en este entorno.


Conclusión

  • Rust, C/C++, Go, JavaScript, Python y Java son lenguajes que se pueden desplegar a WebAssembly, aunque cada uno tiene sus propios desafíos y ventajas dependiendo del contexto y las necesidades del proyecto.
  • Rust se destaca por su eficiencia y facilidad de integración con Wasm.
  • Go es viable para Wasm, pero los binarios tienden a ser grandes.
  • C/C++ es excelente para Wasm, especialmente en aplicaciones con gráficos o procesamiento intensivo.
  • JavaScript se utiliza principalmente como un runtime para JavaScript en Wasm, no como una compilación directa.
  • Python tiene herramientas como Pyodide, pero el ecosistema aún no está tan optimizado para Wasm.

Si estás buscando aprovechar WebAssembly, la elección del lenguaje adecuado dependerá en gran medida de la complejidad de tu proyecto y los requisitos específicos de tu aplicación.


Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Deja un comentario