K dispozícii je Emscripten 4.0, kompilátor z C/C++ do WebAssembly

Bol vydaný nástroj Emscripten 4.0, ktorý umožňuje kompiláciu kódu v C/C++ a iných jazykoch, pre ktoré existujú frontendy na báze LLVM, do univerzálneho nízkoúrovňového medzičlánku WebAssembly. Výsledný kód môže byť použitý na integráciu s projektmi JavaScript, spustenie v webovom prehliadači, použitie v Node.js alebo vytvorenie samostatných multiplatformných aplikácií spúšťaných pomocou wasm runtime. Kód projektu je distribuovaný pod licenciou MIT. V kompilátore sú použité výstupy projektu LLVM, a na generovanie WebAssembly a optimalizáciu je využívaná knižnica Binaryen.

Hlavným cieľom Emscripten je vytvorenie nástroja, ktorý umožňuje vykonávať v prehliadači kód nezávisle od programovacieho jazyka, v ktorom bol tento kód pôvodne napísaný. V kompilovaných aplikáciách je možné používať volania štandardných knižníc C a C++ (libc, libcxx), rozšírenia C++, viacvláknovú prácu na báze pthreads, API POSIX a mnoho multimediálnych knižníc. Samostatne sú poskytnuté API na integráciu s Web API a kódom v JavaScripte.

Emscripten podporuje transláciu výstupu knižnice SDL2 cez Canvas a implementuje podporu OpenGL a EGL cez API WebGL, čo umožňuje prevádzať do WebAssembly grafické aplikácie a hry (napríklad existuje port toolkit Qt, sú podporované herné enginy Unreal Engine a Unit, ako aj engine simulácie fyzikálnych procesov Bullet).

Okrem kompilácie kódu v C/C++ sú samostatne vyvíjané projekty na spustenie interpretátorov v prehliadačoch a virtuálních strojů pre jazyky Lua, C#, Python, Ruby a Perl. Okrem toho je možné aplikovať frontendy k LLVM, odlišné od Clang, napríklad frontendy pre jazyky ako Swift, Rust, D a Fortran.

Priradenie verzie 4.0 je spojené s vykonaním zmien, ktoré narušujú kompatibilitu na úrovni ABI (pri prekompilovaní projektu do Emscripten 4.0 bude potrebné znova prekompilovať objektové súbory a knižnice vytvorené predchádzajúcimi verziami Emscripten). Hlavné zmeny v Emscripten 4.0:

  • Bola pridaná možnosť „-sWASM_LEAGCY_EXCEPTIONS“ na výber medzi starými a novými mechanizmami správy výnimiek. Predvolene sa naďalej používa starý mechanizmus, pretože nie všetky prehliadače implementovali funkcie WebAssembly na prácu nových spracovateľov výnimiek.
  • Komponenty compiler-rt, libcxx, libcxxabi a libunwind boli aktualizované na vetvu LLVM 19.
  • Minimálne podporovaná verzia prehliadača Safari v zostavách (nastavenie MIN_SAFARI_VERSION) bola zvýšená z 14.1 na 15.0, čo umožnilo predvolene aktivovať niekoľko rozšírených funkcií WebAssembly:
    • Bolo zapnuté používanie nových inštrukcií na konverziu typu float na int (nontrapping-fptoint), ktoré namiesto generovania výnimky pri pretečení výsledku vracajú minimálnu alebo maximálnu možnú hodnotu (nevyhnutné pre SIMD).
    • Bola aktivovaná voľba WASM_BIGINT, pri ktorej sa na výmenu 64-bitových celočíselných hodnôt medzi WebAssembly a JavaScriptom používa typ BigInt.
    • Bola pridaná voľba BULK_MEMORY, pri ktorej sa na implementáciu C funkcií memcpy a memset používajú inštrukcie WebAssembly memory.copy a memory.fill.
  • V funkcii PATH.basename() bola deaktivovaná normalizácia ciest (PATH.normalize()), t.j. volanie ‘PATH.basename(„a/.”)’ teraz vráti „.” namiesto „a”, a ‘PATH.basename(„a/b/..”)’ vráti „..” namiesto „a”.
  • Pri použití voľby „-sMODULARIZE” sú továrenské funkcie, ktoré vytvárajú a vracajú inštancie WebAssembly modulov a objektov pre JavaScript, teraz označené ako „async” pri kompilácii v režime WASM_ASYNC_COMPILATION, ktorý je predvolený.
  • Bola pridaná možnosť uvádzať JavaScript knižnice, použitím voľby „-lfoo.js”. Na rozdiel od voľby „—js-library” sa vyhľadávanie knižnice vykonáva vo všetkých cestách špecifikovaných cez voľbu „-L”.
  • Pri linkovaní v režime ladenia (-O0 alebo -sASSERTIONS) je predvolene použité ladené prevedenie funkcie malloc so zapnutými assert kontrolami, ktoré odhaľujú také chyby, ako je dvojité volanie funkcie free().

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster