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.
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.