Cheerp 3.0, kompilátor C/C++ do JavaScriptu, migrovaný na licencie Apache 2.0 a LLVM

Je predstavený kompilátor Cheerp 3.0, ktorý vám umožňuje zostaviť akýkoľvek kód C/C++ do WebAssembly alebo JavaScriptu. Nová vetva je pozoruhodná presunutím kompilátora a sprievodných knižníc na používanie permisívnych licencií Apache 2.0 a LLVM namiesto predtým uplatňovanej obmedzenej licenčnej politiky, ktorá ponúka možnosť licencie GPLv2 pre nekomerčné projekty a proprietárne licencie pre komerčné. Kód kompilátora je založený na vývoji LLVM a Clang a zahŕňa ďalšie optimalizácie na zlepšenie výkonu a zníženie veľkosti kompilovaného výsledku.

Cheerp je možné použiť na portovanie existujúcich knižníc a aplikácií C/C++ na spustenie v prehliadači, ako aj na vytváranie vysokovýkonných webových aplikácií a komponentov WebAssembly od začiatku. Projekt umožňuje kombinovať kód C/C++ a JavaScript v jednej webovej aplikácii s možnosťou prístupu z kódu JavaScript k funkciám pôvodne vyvinutým v C/C++ a z kódu C/C++ k objektom JavaScript, JavaScript knižnice, webové rozhranie API a všetky funkcie DOM. Je povolené vytvárať kombinované zostavy, z ktorých časť kódu je kompilovaná do JavaScriptu a časť do WebAssembly. Podporuje budovanie projektov, ktoré využívajú štandardné knižnice libc a libc++.

V porovnaní s kompilátorom Emscripten Cheerp generuje optimalizovanejší a kompaktnejší medzikód WebAssembly (veľkosť výsledných súborov je v priemere o 7 % menšia). Koncepčne sa rozdiely zmenšujú na skutočnosť, že Emscripten sa používa ako objektový formát WebAssembly a vykonáva väzbu a optimalizáciu vo fáze následného spracovania WebAssembly (wasm-opt). Cheerp používa bajtový kód LLVM ako prechodnú reprezentáciu pre knižnice a objektové súbory, čo umožňuje širšie optimalizácie v rámci celého projektu, ktoré využívajú metadáta na úrovni LLVM bez potreby následného spracovania.

Okrem toho Cheerp používa optimalizátor PreExecuter, ktorý poskytuje preventívne spustenie kódu v čase kompilácie, napríklad na konverziu konštruktorov používaných na inicializáciu globálnych objektov na konštanty. Pri kompilácii sa používa aj PartialExecuter, ktorý na základe analýzy parametrov funkcií odstráni kód, ktorý sa zaručene nepoužije pri vykonávaní.

Cheer môže tiež generovať kód JavaScript na dynamickú prácu s pamäťou pokrytou zberačom odpadu. Najmä namiesto emulácie tradičného adresného priestoru s typovanými poľami, Cheerp poskytuje priame mapovanie objektov C++ na objekty JavaScript, čo znižuje spotrebu pamäte, pretože zberač odpadu JavaScript má schopnosť odstraňovať nepoužívané objekty. Na zlepšenie výkonu vygenerovaný medzikód WebAssembly používa rozšírenia SIMD na organizáciu paralelizácie dátových operácií.

Cheerp možno použiť ako platformu na vytváranie integrovaných webových aplikácií klient/server v C++. V súčasnej praxi je bežné vyvinúť samostatný front-end založený na prehliadači napísaný v JavaScripte a samostatný back-end napísaný v PHP, Pythone, Ruby alebo JavaScript/Node.js. Cheerp poskytuje prostriedky na vytváranie kompletných webových aplikácií v C++, ktoré podporujú backend a frontend v jednej kódovej základni. Počas procesu kompilácie sa serverová strana skompiluje do natívneho kódu a rozhranie sa skonvertuje na reprezentáciu JavaScriptu. Ladenie všetkých komponentov projektu, vrátane tých, ktoré sú konvertované na JavaScript, sa vykonáva pomocou zdrojových textov C++ pomocou technológie Source Map (ak sa vyskytne chyba, môžete vidieť časť kódu C++, nastavenie bodov prerušenia v kóde C++ a krok za riadkom -podporuje sa postupné spúšťanie kódu C++).

Zdroj: opennet.ru

Pridať komentár