Cheerp un compilador open source de C/C++ a WebAssembly i JavaScript

Cheerp

Cheerp: un compilador de C++ per a la Web

Es va donar a conèixer fa poc el llançament de Cheerp 3.0, un compilador que permet compilar qualsevol codi C/C++ a WebAssembly o JavaScript. La nova branca es destaca per moure el compilador i les biblioteques que l'acompanyen per fer servir llicències permissives d'Apache 2.0 i LLVM, en lloc de la política de llicències limitada aplicada anteriorment, que ofereix una opció de llicència GPLv2 per a projectes no comercials i una llicència propietària per a projectes comercials.

Cheerp es pot utilitzar tant per portar biblioteques i aplicacions C/C++ existents per executar-les al navegador com per crear aplicacions web d'alt rendiment i components WebAssembly des de zero.

Ha passat més d'un any des del llançament anterior de Cheerp ( Cheerp 2.7 ), i aquesta nova versió ve plena de noves característiques i optimitzacions que, una vegada més, mouen l'estat de l'art de l'ús de C++ com a llenguatge de programació per a aplicacions web i jocs.

El que és més important, amb aquest llançament estem fent un canvi significatiu en el model de llicències de Cheerp. A partir de Cheerp 3.0, tots els components i biblioteques principals del compilador tenen ara llicència permissiva sota la llicència Apache 2.0/LLVM . Això marca un canvi radical respecte al nostre model de llicència comercial dual/GPLv2 anterior, cosa que permet que Cheerp 3.0 s'utilitzi per a qualsevol propòsit, sense restriccions.

Sobre Cheerp

El Projecte permet combinar codi C/C++ i JavaScript en una aplicació web amb la capacitat d'accedir des de codi JavaScript a funcions desenvolupades originalment a C/C++, i des de codi C/C++ a objectes JavaScript, JavaScript biblioteques, Web API i totes les característiques DOM, a més que es permet crear compilacions combinades, part del codi que es compila a JavaScript i part a WebAssembly. Admet projectes de construcció que utilitzen les biblioteques libc i libc++ estàndard.

En comparació del compilador Emscripten, Cheerp genera codi intermedi WebAssembly més optimitzat i compacte (de mitjana, la mida dels fitxers resultants és un 7 % més petit).

Conceptualment, les diferències es redueixen al fet que Emscriptin s'utilitza com a format d'objecte de WebAssembly i realitza l'enllaç i l'optimització a l'etapa de postprocessament de WebAssembly (wasm-opt). Cheerp utilitza el codi de bytes LLVM com una representació intermèdia per a biblioteques i fitxers d'objectes, cosa que permet optimitzacions més àmplies en tot el projecte que usen metadades de nivell LLVM sense necessitat de postprocessament.

Article relacionat:
Emscripten 3.0, una cadena d'eines de compilació per a WebAssembly utilitzant LLVM

A més, Cheerp utilitza l'optimitzador PreExecuter per executar codi de forma preventiva en temps de compilació, per exemple, per convertir constructors usats per inicialitzar objectes globals en constants. A més, durant la compilació s'utilitza PartialExecuter, que basant-se en l'anàlisi dels paràmetres de la funció, elimina codi que es garanteix que no s'utilitzarà durant l'execució.

Cheerp també pot generar codi JavaScript per treballar dinàmicament amb la memòria coberta pel recol·lector d'escombraries. En particular, en lloc d'emular un espai d'adreces tradicional amb matrius escrites, Cheerp proporciona una assignació directa d'objectes de C++ a objectes de JavaScript, cosa que redueix el consum de memòria perquè el recol·lector d'elements no utilitzats de JavaScript té la capacitat de eliminar objectes no utilitzats. Per millorar el rendiment, el codi intermedi WebAssembly generat utilitza extensions SIMD per organitzar la paral·lelització de les operacions de dades.

Cheerp es pot fer servir com una plataforma per crear aplicacions web integrades de client/servidor a C++. A la pràctica actual, és comú desenvolupar un front-end separat basat en navegador escrit en JavaScript i un back-end separat escrit en PHP, Python, Ruby o JavaScript/Node.js.

Cheerp proporciona els mitjans per crear aplicacions web C++ completes que admetin el backend i el frontend en una sola base de codi.

Durant el procés de compilació, el costat del servidor es compila en codi nadiu i la interfície es converteix en una representació de JavaScript. La depuració de tots els components del projecte, inclosos els convertits a JavaScript, es fa utilitzant textos font C++ utilitzant la tecnologia Source Map.

Finalment, si estàs interessat en poder conèixer més a l'respecte, Pots consultar els detalls al següent enllaç.

El codi del compilador es basa en els desenvolupaments de LLVM i Clang i inclou optimitzacions addicionals per millorar el rendiment i reduir la mida del resultat compilat.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: AB Internet Networks 2008 SL
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.