Cheerp 3.0, C/C++ kompilaator JavaScriptile, liigutatud Apache 2.0 ja LLVM litsentsidele

Tutvustame Cheerp 3.0 kompilaatorit, mis võimaldab konverteerida mistahes C/C++ koodi WebAssembly või JavaScriptiks. Uus versioon on märkimisväärne kompilaatori ja sellega seotud raamatukogude üleminekuga lubavate litsentside, nagu Apache 2.0 ja LLVM, kasutamisele, asendades varasema piiratud litsentsipoliitika, mis pakkus GPLv2 litsentsi mittetulunduslike projektide jaoks ja omandiõiguse litsentsi kommertslike eesmärkide jaoks. Kompilaatori kood põhineb LLVM ja Clangi arendustel ning sisaldab täiendavaid optimeerimisi, et suurendada jõudlust ja vähendada kompileeritud tulemuse suurust.

Cheerp sobib nii olemasolevate C/C++ raamatukogude ja rakenduste portimiseks, et neid saaks veebibrauseris käivitada, kui ka kõrgjõudlusega veebirakenduste ja WebAssembly-komponentide loomiseks alates nullist. Projekt võimaldab kombineerida ühes veebirakenduses C/C++ ja JavaScripti koodi, andes JavaScripti koodile juurdepääsu C/C++-s algselt loodud funktsioonidele ning samas võimaldades C/C++ koodil juurdepääsu JavaScripti objektidele, JavaScripti raamatukogudele, Web API-le ja kõikidele DOM-i võimalustele. Saa loodud kombineeritud kogumid, kus osa koodist kompileeritakse JavaScriptiks ja osa WebAssemblyks. Toetatakse projektide koostamist, mis kasutavad standardseid libc ja libc++ raamatukogusid.

Emscripteni kompilaatoriga võrreldes genereerib Cheerp optimeeritud ja kompaktsemat WebAssembly vahevormi (lõppfailide keskmine suurus on 7% väiksem). Kontseptuaalselt seisnevad erinevused selles, et Emscripteni kasutatakse WebAssembly objektivorminguna ning see teostab sidumise ja optimeerimise WebAssembly töötlemise etapis (wasm-opt). Cheerp kasutab teekide ja objekti failide vahevormina LLVM formaadis baitkoodi, mis võimaldab rakendada laiemat optimeerimist kogu projektis ja kasutada LLVM tasemel метаданных, ilma et oleks vaja töötlemist pärast.

Cheerpis kasutatakse lisaks PreExecuter'i optimeerijat, mis tagab koodi ennustava täitmise kompileerimise etapis, näiteks konstruktorite konstantideks muutmiseks, mida kasutatakse globaalsete objektide initsialiseerimiseks. Samuti kasutatakse kompileerimise ajal PartialExecuter'it, mis analüüsi põhjal eemaldab koodi, mida kindlasti ei kasutata täitmise käigus.

Cheer võib samuti genereerida JavaScripti koodi, et dünaamiliselt töötada mäluga, mida haldab prügi kogumine. Eelkõige ei emuleeri Cheer traditsioonilist aadressiruumi tüüpide massiivide abil, vaid pakkub otse C++ objektide kaardistamist JavaScripti objektideks, mis vähendab mälutarbimist, kuna JavaScripti prügi kogumise süsteem suudab eemaldada mittekasutatavad objektid. Tootlikkuse suurendamiseks genereeritud vahepealses koodis kasutatakse WebAssembly SIMD laiendusi, mis võimaldavad andmete töötlemise operatsioonide paralleelse täitmise korraldamist.

Cheerp võib toimida C++ keeles loodud integreeritud klient/server veebirakenduste platvormina. Tänapäeva praktikas arendatakse tavaliselt eraldi brauseris käituvat frontend'i, mis on kirjutatud JavaScript'is, ja eraldi serveripoolt, mis on kirjutatud PHP, Python, Ruby või JavaScript/Node.js keeles. Cheerp pakub vahendeid terviklikte veebirakenduste loomiseks C++ keeles, kus backend ja frontend toetavad ühte koodibaasi. Kompileerimise käigus kompileeritakse serveripoolne osa natiivkoodiks ja liides muudetakse JavaScript'i kujule. Projekti kõikide komponentide, sealhulgas JavaScript'i muudetud, silumine toimub C++ keeles algse tekstiga kasutades Source Map tehnoloogiat (vea korral saab näha C++ koodi lõiku, toetatakse peatuste seadmist C++ koodis ja rida-realt käivitamist C++ koodis).

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster