Predstavljen je Cheerp 3.0 kompajler koji vam omogućuje kompajliranje bilo kojeg C/C++ koda u WebAssembly ili JavaScript. Nova grana poznata je po premještanju prevoditelja i pratećih biblioteka na korištenje dopuštajućih licenci Apache 2.0 i LLVM, umjesto prethodno primijenjene politike ograničenog licenciranja, nudeći opciju GPLv2 licence za nekomercijalne projekte i vlasničku licencu za komercijalne. Kod prevoditelja temelji se na razvoju LLVM-a i Clanga i uključuje dodatne optimizacije za poboljšanje performansi i smanjenje veličine prevedenog rezultata.
Cheerp se može koristiti i za prijenos postojećih C/C++ biblioteka i aplikacija za pokretanje u pregledniku i za stvaranje web aplikacija visokih performansi i WebAssembly komponenti od nule. Projekt vam omogućuje kombiniranje koda u C/C++ i JavaScriptu u jednoj web aplikaciji s mogućnošću pristupa od JavaScript koda do funkcija izvorno razvijenih u C/C++, i od C/C++ koda do JavaScript objekata, JavaScript biblioteka, Web API-ja i sve značajke DOM. Moguće je izraditi kombinirane sklopove u kojima je dio koda kompajliran u JavaScript, a dio u WebAssembly. Podržava građevinske projekte koji koriste standardne biblioteke libc i libc++.
U usporedbi s kompilatorom Emscripten, Cheerp generira optimiziraniji i kompaktniji međukod WebAssembly (u prosjeku 7% manje rezultirajuće datoteke). Konceptualno, razlike su u tome što se Emscripten koristi kao format objekta WebAssembly i vrši povezivanje i optimizaciju u fazi naknadne obrade WebAssembly (wasm-opt). Cheerp koristi LLVM bajt kod kao posredni prikaz za biblioteke i objektne datoteke, dopuštajući šire optimizacije koje obuhvaćaju cijeli projekt i iskorištavaju metapodatke na razini LLVM bez potrebe za naknadnom obradom.
Dodatno, Cheerp koristi optimizator PreExecuter, koji osigurava preventivno izvršavanje koda u fazi kompilacije, na primjer, za pretvaranje konstruktora koji se koriste za inicijalizaciju globalnih objekata u konstante. Također, tijekom kompilacije koristi se PartialExecuter koji na temelju analize parametara funkcije uklanja kod koji se garantirano neće koristiti tijekom izvođenja.
Cheer također može generirati JavaScript kôd za dinamičku manipulaciju memorijom koju pokriva skupljač smeća. Konkretno, umjesto oponašanja tradicionalnog adresnog prostora pomoću tipiziranih nizova, Cheerp omogućuje izravno mapiranje C++ objekata u JavaScript objekte, što smanjuje potrošnju memorije jer JavaScript skupljač smeća ima mogućnost uklanjanja neiskorištenih objekata. Za poboljšanje performansi, generirani međukod WebAssembly koristi SIMD ekstenzije koje omogućuju paralelizaciju podatkovnih operacija.
Cheerp se može koristiti kao platforma za stvaranje integriranih web aplikacija klijent/poslužitelj u C++. U trenutnoj praksi uobičajeno je razviti odvojeni prednji kraj u pregledniku, napisan u JavaScriptu, i odvojeni stražnji kraj, napisan u PHP-u, Pythonu, Rubyju ili JavaScript/Node.js. Cheerp pruža alate za izradu cjelovitih web aplikacija u C++, u kojima su backend i frontend podržani u jednoj bazi koda. Tijekom procesa kompilacije, poslužiteljska strana se kompilira u izvorni kod, a sučelje se pretvara u JavaScript reprezentaciju. Otklanjanje pogrešaka svih komponenti projekta, uključujući one pretvorene u JavaScript, provodi se korištenjem izvornih tekstova u C++ pomoću tehnologije Source Map (ako se pojavi pogreška, možete vidjeti odjeljak C++ koda; podržava postavljanje prijelomnih točaka u C++ kodu i line-by -linijski korak po korak izvršavanje C++ koda).
Izvor: opennet.ru
