Emscripten 3.0, una cadena de herramientas de compilación para WebAssembly utilizando LLVM

Hace poco se dio a conocer el lanzamiento de la nueva versión del compilador Emscripten 3.0, el cual se caracteriza por permitir compilar código en C/C++ y otros lenguajes para los que estĆ”n disponibles frontends basados ​​en LLVM, en un WebAssembly de middleware universal de bajo nivel.

La principal función de realizar esta compilación es para su posterior integración con Proyectos de JavaScript, ejecutar en un navegador web, utilizar en Node. Js o crear aplicaciones independientes multiplataforma que se ejecutan con el tiempo de ejecución wasm.

Sobre Emscripten

El principal objetivo de desarrollo del proyecto Emscripten es crear una herramienta que le permita ejecutar código en la Web, independientemente del lenguaje de programación en el que esté escrito.

Las aplicaciones compiladas pueden usar llamadas a bibliotecas estĆ”ndar de C y C++ (libc, libcxx), extensiones de C++, subprocesos mĆŗltiples basados ​​en pthreads, API POSIX y muchas bibliotecas multimedia. Las API para la integración con la API web y el código JavaScript se proporcionan por separado.

Emscripten admite la transmisión de la salida de la biblioteca SDL2 a través de Canvas, y también proporciona compatibilidad con OpenGL y EGL a través de WebGL, lo que permite convertir aplicaciones grÔficas y juegos a WebAssembly.

PrÔcticamente cualquier base de código C o C++ portÔtil se puede compilar en WebAssembly usando Emscripten, desde juegos de alto rendimiento que necesitan renderizar grÔficos, reproducir sonidos y cargar y procesar archivos, hasta marcos de aplicaciones como Qt. Emscripten ya se ha utilizado para convertir una lista muy larga de bases de código del mundo real a WebAssembly, incluidas bases de código comerciales como Unreal Engine 4 y Unity Engine.

AdemÔs de compilar el código C/C++, los proyectos se desarrollan por separado para garantizar que los intérpretes y las mÔquinas virtuales para Lua, C #, Python, Ruby y Perl se inicien en los navegadores. También es posible aplicar interfaces que no sean de Clang a LLVM disponibles para idiomas como Swift, Rust, D y Fortran.

Cabe destacar que existen diferencias entre el entorno de ejecución nativo y Emscripten, lo que significa que, por lo general, es necesario realizar algunos cambios en el código nativo. Dicho esto, muchas aplicaciones solo necesitarÔn cambiar la forma en que definen su bucle principal y también modificar su manejo de archivos para adaptarse a las limitaciones del navegador / JavaScript.

También existen limitaciones que pueden hacer que algunos códigos sean mÔs fÔciles de migrar: lea las Pautas de portabilidad para determinar dónde puede que deba dedicar mÔs esfuerzo.

Principales novedades de Emscripten 3.0

En esta nueva versión que se presenta, la biblioteca musl C utilizada en emscripten se ha actualizado a la versión 1.2.2 (la versión 1.1.15 se utilizó en la rama Emscripten 2.x).

De la biblioteca parseTools.js se eliminó una parte de las funciones, que se utilizan principalmente en el proyecto: removePointing, apuntandoLevels, removeAllPointing, isVoidType, isStructPointerType, isArrayType, isStructType, isVectorType, isStructuralType getStructuralTypeParts, getStructuralType _IntToHex, IEEEUnHex, Compiletime.isPointerType, Compiletime.isStructType, Compiletime.INT_TYPES, isType.

Mientras que en las plantillas shell.html y shell_minimal.html, la salida de los mensajes de error que ocurren durante la operación de emscripten y emitidos por la aplicación a través de stderr se cambia de forma predeterminada para usar console.warn en lugar de console.error.

Tambien se destaca que se agregó la capacidad de especificar una codificación de texto específica utilizada en los nombres de los archivos. La codificación se puede especificar en forma de sufijo al pasar el nombre del archivo, por ejemplo, «a.rsp.utf-8» o «a.rsp.cp1251»).

Finalmente si estƔs interesado en conocer mƔs al respecto sobre Emscripten, puedes consultar los detalles del proyecto en su pagina web oficial.

Y de igual forma, puedes consultar documentación en la web de como utilizar Emscripten, un sitio de referencia que te podemos recomendar es el sitio web para desarrolladores de Mozilla: https://developer.mozilla.org.

Ademas, es importante mencionar que el código del proyecto se distribuye bajo la licencia MIT. El compilador usa los desarrollos del proyecto LLVM y la biblioteca Binaryen se usa para generar WebAssembly y optimización. Puedes consultar su código fuente en GitHub.


AƱadir como fuente preferida en Google