De Cheerp 3.0-kompiler wurdt yntrodusearre, wêrtroch jo elke C / C ++-koade kinne kompilearje nei WebAssembly of JavaScript. De nije tûke is opmerklik foar it ferpleatsen fan de kompilator en byhearrende bibleteken om Apache 2.0 en LLVM permissive lisinsjes te brûken, ynstee fan it earder tapaste beheinde lisinsjebelied, en biedt in GPLv2-lisinsje-opsje foar net-kommersjele projekten en in proprietêre lisinsje foar kommersjele. De kompilerkoade is basearre op de ûntwikkelingen fan LLVM en Clang, en omfettet ekstra optimisaasjes om prestaasjes te ferbetterjen en de grutte fan it kompilearre resultaat te ferminderjen.
Cheerp kin sawol brûkt wurde om besteande C / C ++-biblioteken en applikaasjes te portearjen om yn 'e browser te rinnen, en om webapplikaasjes en WebAssembly-komponinten fanôf it begjin te meitsjen mei hege prestaasjes. It projekt lit jo C / C ++ en JavaScript-koade kombinearje yn ien webapplikaasje mei de mooglikheid om tagong te krijen fan JavaScript-koade nei funksjes oarspronklik ûntwikkele yn C / C ++, en fan C / C ++-koade nei JavaScript-objekten, JavaScript biblioteken, Web API en alle funksjes DOM. It is tastien om kombineare gearkomsten te meitsjen, guon fan 'e koade wêryn is kompilearre yn JavaScript, en guon yn WebAssembly. It stipet bouwprojekten dy't de standert libc- en libc++-biblioteken brûke.
Yn ferliking mei de Emscripten-kompiler genereart Cheerp mear optimalisearre en kompakte WebAssembly-tuskenkoade (gemiddeld is de grutte fan 'e resultearjende bestannen 7% lytser). Konseptueel komme de ferskillen del op it feit dat Emscripten wurdt brûkt as it WebAssembly-objektformaat en fiert de bining en optimisaasje op it WebAssembly-postferwurkingsstadium (wasm-opt). Cheerp brûkt LLVM-bytekoade as in tuskenfertsjintwurdiging foar bibleteken en objektbestannen, wêrtroch bredere projektwide optimisaasjes mooglik meitsje dy't LLVM-nivo metadata brûke sûnder de needsaak foar neiferwurking.
Derneist brûkt Cheerp de PreExecuter-optimizer, dy't preemptive koade-útfiering leveret op kompilaasjetiid, bygelyks om konstruktors te konvertearjen dy't brûkt wurde om globale objekten te initialisearjen nei konstanten. Ek by it kompilearjen wurdt PartialExecuter brûkt, dy't, basearre op 'e analyze fan funksjeparameters, koade ferwideret dy't garandearre net brûkt wurdt by útfiering.
Cheer kin ek JavaScript-koade generearje om dynamysk te wurkjen mei ûnthâld bedekt troch de garbage collector. Benammen, yn stee fan in emulearje in tradisjonele adres romte mei typte arrays, jout Cheerp in direkte mapping fan C ++ objekten oan JavaSkript objekten, dat ferleget ûnthâld konsumpsje omdat de JavaScript garbage collector hat de mooglikheid om te ferwiderjen net brûkte objekten. Om de prestaasjes te ferbetterjen, brûkt de generearre WebAssembly-tuskenkoade SIMD-útwreidingen om parallelisaasje fan gegevensoperaasjes te organisearjen.
Cheerp kin brûkt wurde as platfoarm foar it bouwen fan yntegreare client / server webapplikaasjes yn C ++. Yn 'e hjoeddeistige praktyk is it gewoanlik om in aparte front-end te ûntwikkeljen yn' e browser skreaun yn JavaScript en in aparte efterkant skreaun yn PHP, Python, Ruby, of JavaScript/Node.js. Cheerp biedt de middels om folsleine C ++ webapplikaasjes te bouwen dy't de backend en frontend stypje yn ien koadebase. Tidens it kompilaasjeproses wurdt de serverside kompilearre yn native koade, en de ynterface wurdt omboud ta in JavaScript-representaasje. Debuggen fan alle projektkomponinten, ynklusyf dy omboud ta JavaScript, wurdt útfierd mei C++ boarneteksten mei Boarnekaarttechnology (as in flater optreedt, kinne jo in seksje fan C++-koade sjen, brekpunten ynstelle yn C++-koade en line-by-line stap -by-stap útfiering fan C ++ koade wurdt stipe).
Boarne: opennet.ru
