Está disponible Emscripten 4.0, un compilador de C/C++ a WebAssembly

Se ha publicado la versión 4.0 de la herramienta Emscripten, que permite compilar código en C/C++ y otros lenguajes que tienen frontends basados en LLVM a un código intermedio universal de bajo nivel llamado WebAssembly. El resultado obtenido se puede utilizar para la integración con proyectos de JavaScript, su ejecución en navegadores web, su uso en Node.js o para crear aplicaciones multiplataforma independientes que se ejecutan mediante un entorno de ejecución wasm. El código del proyecto se distribuye bajo la licencia MIT. En el compilador se utilizan desarrollos del proyecto LLVM, y para generar WebAssembly y optimizar, se emplea la biblioteca Binaryen.

El objetivo principal de Emscripten es crear una herramienta que permita ejecutar código en la web independientemente del lenguaje de programación en el que se haya escrito originalmente ese código. En las aplicaciones compiladas se pueden utilizar llamadas a bibliotecas estándar de C y C++ (libc, libcxx), extensiones de C++, multihilo basado en pthreads, API POSIX y muchas bibliotecas multimedia. Se proporcionan API separadas para la integración con API web y código en JavaScript.

Emscripten soporta la traducción de la salida de la biblioteca SDL2 a través de Canvas, así como la implementación de soporte para OpenGL y EGL mediante la API WebGL, lo que permite convertir aplicaciones gráficas y juegos a WebAssembly (por ejemplo, hay un puerto del toolkit Qt, se soportan los motores de juegos Unreal Engine y Unity, así como el motor de simulación de procesos físicos Bullet).

Además de compilar código en C/C++, se desarrollan proyectos por separado para ejecutar intérpretes en navegadores y máquinas virtuales para lenguajes como Lua, C#, Python, Ruby y Perl. Además, es posible aplicar frontends a LLVM diferentes de Clang, como frontends para lenguajes como Swift, Rust, D y Fortran.

La asignación del número de versión 4.0 está relacionada con la introducción de cambios que rompen la compatibilidad a nivel de ABI (al recompilar un proyecto en Emscripten 4.0 será necesario recompilar los archivos objeto y bibliotecas construidos con versiones anteriores de Emscripten). Los cambios principales en Emscripten 4.0 son:

  • Se ha añadido la opción «-sWASM_LEGACY_EXCEPTIONS» para elegir entre la antigua y la nueva mecánica de manejo de excepciones. Por defecto, se sigue utilizando la antigua mecánica, ya que no todos los navegadores han implementado las capacidades de WebAssembly para trabajar con los nuevos manejadores de excepciones.
  • Los componentes compiler-rt, libcxx, libcxxabi y libunwind se han actualizado a la rama LLVM 19.
  • La versión mínima soportada en las compilaciones del navegador Safari (configuración MIN_SAFARI_VERSION) se ha aumentado de 14.1 a 15.0, lo que permite habilitar varias funcionalidades avanzadas de WebAssembly por defecto:
    • Se ha incluido el uso de nuevas instrucciones para la conversión de tipo de float a int (nontrapping-fptoint), que en lugar de generar una excepción al desbordar el resultado, devuelven el valor mínimo o máximo posible (necesario para SIMD).
    • Se ha habilitado la opción WASM_BIGINT, en la cual se utiliza el tipo BigInt para el intercambio de valores enteros de 64 bits entre WebAssembly y código de JavaScript.
    • Se ha habilitado la opción BULK_MEMORY, donde para la implementación de las funciones C memcpy y memset se utilizan las instrucciones de WebAssembly memory.copy y memory.fill.
  • En la función PATH.basename() se ha desactivado la normalización de rutas (PATH.normalize()), es decir, la llamada a ‘PATH.basename("a/.")’ ahora devolverá ‘.’ en lugar de ‘a’, y ‘PATH.basename("a/b/..")’ devolverá ‘..’ en lugar de ‘a’.
  • Al usar la opción ‘-sMODULARIZE’, las funciones factory que crean y devuelven instancias de módulos y objetos WebAssembly para JavaScript ahora están marcadas con la característica ‘async’ al compilar en modo WASM_ASYNC_COMPILATION, que se aplica por defecto.
  • Se ha añadido la posibilidad de especificar bibliotecas de JavaScript, utilizando la opción ‘-lfoo.js’. A diferencia de la opción ‘—js-library’, la búsqueda de la biblioteca se realiza en todos los caminos especificados a través de la opción ‘-L’.
  • Al compilar en modo de depuración (-O0 o -sASSERTIONS) se ha habilitado por defecto la versión de depuración de la función malloc con verificaciones de aserción, que identifican errores como la llamada doble a la función free().

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster