U compilatore Cheerp 3.0 hè introduttu, chì vi permette di cumpilà qualsiasi codice C/C++ à WebAssembly o JavaScript. U novu ramu hè notu per trasfurmà u compilatore è e biblioteche accumpagnate per utilizà licenze permissive Apache 2.0 è LLVM, invece di a pulitica di licenza limitata applicata in precedenza, chì offre una opzione di licenza GPLv2 per i prughjetti non cummirciali è una licenza proprietaria per i cummirciali. U codice compilatore hè basatu annantu à i sviluppi di LLVM è Clang, è include ottimisazioni supplementari per migliurà u rendiment è riduce a dimensione di u risultatu compilatu.
Cheerp pò esse usatu sia per portà e librerie esistenti C / C ++ è l'applicazioni per eseguisce in u navigatore, è per creà applicazioni web d'altu rendiment è cumpunenti WebAssembly da zero. U prughjettu permette di cumminà u codice C / C ++ è JavaScript in una sola applicazione web cù a capacità di accede da u codice JavaScript à e funzioni sviluppate in origine in C / C ++, è da u codice C / C ++ à l'uggetti JavaScript, JavaScript. biblioteche, Web API è tutte e funzioni DOM. Hè permessu di creà assemblei cumminati, alcuni di u codice in quale hè compilatu in JavaScript, è alcuni in WebAssembly. Supporta i prughjetti di custruzzione chì utilizanu e librerie standard libc è libc++.
Comparatu à u compilatore Emscripten, Cheerp genera un codice intermediu WebAssembly più ottimizatu è compactu (in media, a dimensione di i fugliali resultanti hè 7% più chjucu). Conceptually, e differenze riduttanu à u fattu chì Emscripten hè utilizatu cum'è u formatu di l'ughjettu WebAssembly è eseguisce l'ubligatoriu è l'ottimisazione in u stadiu post-processing WebAssembly (wasm-opt). Cheerp usa LLVM bytecode cum'è una rapprisintazioni intermediata per e biblioteche è i fugliali d'ughjettu, chì permettenu ottimisazioni più larghe per u prughjettu chì utilizanu metadati à livellu LLVM senza a necessità di post-processamentu.
Inoltre, Cheerp usa l'ottimisatore PreExecuter, chì furnisce l'esekzione preventiva di codice in tempu di compilazione, per esempiu, per cunvertisce i custruttori utilizati per inizializza l'uggetti globali in custanti. Inoltre, durante a compilazione, hè utilizatu PartialExecuter, chì, basatu annantu à l'analisi di i paràmetri di a funzione, sguassate u codice chì hè garantitu micca esse usatu durante l'esekzione.
Cheer pò ancu generà codice JavaScript per travaglià dinamicamente cù a memoria coperta da u cullettore di basura. In particulare, invece di emulà un spaziu d'indirizzu tradiziunale cù array typed, Cheerp furnisce un mapping direttu di l'uggetti C++ à l'uggetti JavaScript, chì reduce u cunsumu di memoria perchè u cullettivu di basura JavaScript hà a capacità di sguassà l'uggetti inutilizati. Per migliurà u rendiment, u codice intermediu WebAssembly generatu usa estensioni SIMD per urganizà a parallelizazione di l'operazioni di dati.
Cheerp pò esse usatu cum'è una piattaforma per custruisce applicazioni web integrate di cliente / servitore in C ++. In a pratica attuale, hè cumuni di sviluppà un front-end separatu basatu in navigatore scrittu in JavaScript è un back-end separatu scrittu in PHP, Python, Ruby, o JavaScript/Node.js. Cheerp furnisce i mezi per custruisce applicazioni web C++ cumpletu chì supportanu u backend è u frontend in una sola base di codice. Durante u prucessu di compilazione, u latu di u servitore hè cumpilatu in codice nativu, è l'interfaccia hè cunvertita in una rapprisintazioni JavaScript. A debugging di tutti i cumpunenti di u prughjettu, cumpresi quelli cunvertiti in JavaScript, hè realizatu utilizendu testi fonte C++ cù a tecnulugia Source Map (se un errore si trova, pudete vede una sezione di codice C++, stabilisce punti di rottura in codice C++ è passo linea per linea). L'esecuzione -by-step di codice C++ hè supportata).
Source: opennet.ru
