Cheerp 3.0, compilador C/C++ para JavaScript, migrado a Apache 2.0 e licenzas LLVM

Introdúcese o compilador Cheerp 3.0, que lle permite compilar calquera código C/C++ para WebAssembly ou JavaScript. A nova rama destaca por mover o compilador e as bibliotecas que o acompañan para usar licenzas permisivas de Apache 2.0 e LLVM, en lugar da política de licenzas limitadas aplicada anteriormente, que ofrece unha opción de licenza GPLv2 para proxectos non comerciais e unha licenza propietaria para os comerciais. O código do compilador baséase nos desenvolvementos de LLVM e Clang, e inclúe optimizacións adicionais para mellorar o rendemento e reducir o tamaño do resultado compilado.

Cheerp pódese usar tanto para portar bibliotecas e aplicacións C/C++ existentes para executalas no navegador, como para crear aplicacións web de alto rendemento e compoñentes WebAssembly desde cero. O proxecto permítelle combinar código C/C++ e JavaScript nunha aplicación web coa posibilidade de acceder desde código JavaScript a funcións desenvolvidas orixinalmente en C/C++, e desde código C/C++ ata obxectos JavaScript, JavaScript. bibliotecas, API web e todas as características DOM. Permítese crear conxuntos combinados, parte do código no que se compila en JavaScript e outras en WebAssembly. Soporta proxectos de construción que usan as bibliotecas estándar libc e libc++.

En comparación co compilador Emscripten, Cheerp xera un código intermedio WebAssembly máis optimizado e compacto (de media, o tamaño dos ficheiros resultantes é un 7% menor). Conceptualmente, as diferenzas redúcense no feito de que Emscripten se usa como formato de obxecto WebAssembly e realiza a vinculación e optimización na fase de postprocesamento de WebAssembly (wasm-opt). Cheerp usa o código de bytes LLVM como representación intermedia para bibliotecas e ficheiros de obxectos, o que permite optimizacións máis amplas para todo o proxecto que usan metadatos a nivel de LLVM sen necesidade de posprocesamento.

Ademais, Cheerp usa o optimizador PreExecuter, que proporciona a execución de código preventivo en tempo de compilación, por exemplo, para converter os construtores usados ​​para inicializar obxectos globais en constantes. Ademais, ao compilar utilízase PartialExecuter, que, baseándose na análise dos parámetros da función, elimina o código que se garante que non se utilizará durante a execución.

Cheer tamén pode xerar código JavaScript para traballar de forma dinámica coa memoria cuberta polo colector de lixo. En particular, en lugar de emular un espazo de enderezos tradicional con matrices escritas, Cheerp ofrece unha asignación directa de obxectos C++ a obxectos JavaScript, o que reduce o consumo de memoria porque o colector de lixo de JavaScript ten a capacidade de eliminar obxectos non utilizados. Para mellorar o rendemento, o código intermedio de WebAssembly xerado usa extensións SIMD para organizar a paralelización das operacións de datos.

Cheerp pódese usar como plataforma para construír aplicacións web cliente/servidor integradas en C++. Na práctica actual, é común desenvolver un front-end separado baseado en navegador escrito en JavaScript e un back-end separado escrito en PHP, Python, Ruby ou JavaScript/Node.js. Cheerp proporciona os medios para construír aplicacións web C++ completas que admitan o backend e o frontend nunha única base de código. Durante o proceso de compilación, o lado do servidor compílase en código nativo e a interface convértese nunha representación de JavaScript. A depuración de todos os compoñentes do proxecto, incluídos os convertidos a JavaScript, realízase utilizando textos fonte C++ usando a tecnoloxía Source Map (se se produce un erro, podes ver unha sección de código C++, establecendo puntos de interrupción en código C++ e paso liña por liña). Admítese a execución paso a paso de código C++).

Fonte: opennet.ru

Engadir un comentario