C++ ahora es compatible oficialmente con WASI: una nueva etapa en el desarrollo multiplataforma
El comité de estandarización del lenguaje C++ (ISO/IEC JTC1/SC22/WG21), en conjunto con el grupo de desarrolladores de LLVM y el proyecto WebAssembly, anunciaron un evento largamente esperado: el lenguaje C++ ha obtenido compatibilidad oficial y documentada con la plataforma WebAssembly System Interface (WASI). Esto significa que ahora los desarrolladores pueden escribir código de sistema en C++ que funcionará no solo en sistemas operativos tradicionales (Windows, Linux, macOS), sino también en el entorno de WebAssembly fuera del navegador: en servidores, dispositivos IoT y sistemas edge en la nube.
¿Qué es WASI y por qué es importante para C++?
WASI (WebAssembly System Interface) es una interfaz de sistema estandarizada que proporciona a los módulos de WebAssembly acceso al sistema de archivos, sockets de red, tiempo y otros recursos del sistema operativo. Anteriormente, C++ podía compilarse a WebAssembly, pero la interacción con el mundo exterior estaba limitada al entorno del navegador. Ahora, con la compatibilidad oficial con WASI, C++ obtiene un entorno aislado completo para la ejecución segura de código fuera del navegador.
- Seguridad: Los módulos de C++ se ejecutan en una sandbox con control de acceso a los recursos, ideal para servicios multiusuario.
- Portabilidad: Un único archivo binario .wasm funciona en cualquier sistema operativo que tenga un entorno de ejecución WASI (Wasmer, Wasmtime, WAMR).
- Rendimiento: La compilación de C++ directamente a código nativo de WebAssembly (a través de Clang/LLVM) proporciona una velocidad de ejecución casi nativa, sin la sobrecarga de una máquina virtual.
¿Qué ha cambiado en el ecosistema de C++?
La principal novedad es la aparición de una guía oficial para portar código C++ a WASI y la inclusión de la compatibilidad con WASI en el repositorio principal de LLVM. Ahora, cualquier proyecto en C++ puede compilarse para WASI con una simple bandera del compilador:
clang++ --target=wasm32-wasi -O3 my_program.cpp -o my_program.wasm
Además, las bibliotecas estándar de C++ (libc++, libc++abi) se han actualizado para funcionar correctamente con las llamadas al sistema de WASI. Los desarrolladores ya no necesitan configurar manualmente el enlace con bibliotecas externas: todo funciona "listo para usar".
¿Dónde se aplica esto ya?
- Computación en la nube: Ejecución de microservicios en C++ en contenedores WASI aislados (por ejemplo, en Fastly Compute@Edge o Cloudflare Workers con compatibilidad con WASI).
- Sistemas embebidos: Uso de WASI para la actualización segura de firmware de dispositivos IoT escritos en C++.
- Cálculos científicos: Traslado de módulos de C++ con alta carga computacional (bibliotecas de álgebra lineal, simulaciones) a WASI para ejecución multiplataforma sin recompilación.
¿Qué sigue?
Los planes inmediatos incluyen la compatibilidad total con la multitarea de C++ en WASI (actualmente solo está disponible el modelo de un solo hilo) y la integración con las corrutinas de C++20/23. La comunidad ya está trabajando en la adaptación de bibliotecas populares (Boost, Qt, OpenCV) para su compilación en WASI. Siga las actualizaciones en el sitio web oficial wasi.dev y en el repositorio de LLVM.
Si escribe en C++ y desea