Dostupný Emscripten 4.0, kompilátor z C/C++ do WebAssembly

Byl vydán nástroj Emscripten 4.0, který umožňuje kompilaci kódu v C/C++ a jiných jazycích s front-endy založenými na LLVM do univerzálního nízkoúrovňového mezikódu WebAssembly. Výsledek lze využít pro integraci s projekty JavaScript, spuštění v webovém prohlížeči, použití v Node.js nebo vytváření samostatných multiplatformních aplikací spuštěných pomocí wasm runtime. Kód projektu je distribuován pod licencí MIT. Kompilátor využívá poznatky projektu LLVM a knihovna Binaryen se používá pro generování WebAssembly a optimalizaci.

Hlavním cílem Emscripten je vytvořit nástroj, který umožňuje spouštět kód v Webu bez ohledu na jazyk, ve kterém byl tento kód původně napsán. V kompilovaných aplikacích lze používat volání standardních knihoven C a C++ (libc, libcxx), rozšíření C++, vícethreadování založené na pthreads, API POSIX a mnoho multimediálních knihoven. K dispozici jsou také API pro integraci s Web API a kódem v JavaScriptu.

Emscripten podporuje translaci výstupu knihovny SDL2 přes Canvas a také implementuje podporu OpenGL a EGL přes API WebGL, což umožňuje převod grafických aplikací a her do WebAssembly (například existuje port nástroje Qt, jsou podporovány herní enginy Unreal Engine a Unity, stejně jako simulátor fyzikálních procesů Bullet).

Kromě kompilace kódu v C/C++ se samostatně rozvíjejí projekty pro spuštění interpretů v prohlížečích a virtuálních strojů pro jazyky Lua, C#, Python, Ruby a Perl. Navíc je možné aplikovat front-endy k LLVM, které nejsou Clang, například front-endy pro jazyky jako Swift, Rust, D a Fortran.

Přiřazení čísla verze 4.0 souvisí se změnami, které narušují kompatibilitu na úrovni ABI (při překompilaci projektu v Emscripten 4.0 bude zapotřebí překompilace objektových souborů a knihoven, které byly sestaveny dřívějšími verzemi Emscripten). Hlavní změny v Emscripten 4.0:

  • Byla přidána volba „-sWASM_LEGACY_EXCEPTIONS“ pro výběr mezi starými a novými mechanismy zpracování výjimek. Ve výchozím nastavení se nadále používá starý mechanismus, protože ne všechny prohlížeče implementovaly možnosti WebAssembly pro práci s novými zpracovateli výjimek.
  • Složky compiler-rt, libcxx, libcxxabi a libunwind byly aktualizovány na větev LLVM 19.
  • Minimálně podporovaná verze prohlížeče Safari ve verzích sestavení (nastavení MIN_SAFARI_VERSION) byla zvýšena z 14.1 na 15.0, což umožnilo výchozí aktivaci několika pokročilých funkcí WebAssembly:
    • Bylo povoleno používání nových instrukcí pro převod typu float na int (nontrapping-fptoint), které místo generování výjimky při přetečení výsledku vrací minimální nebo maximální možnou hodnotu (nezbytné pro SIMD).
    • Byla povolena možnost WASM_BIGINT, díky které se pro výměnu celočíselných 64bitových hodnot mezi WebAssembly a JavaScriptovým kódem používá typ BigInt.
    • Byla povolena možnost BULK_MEMORY, díky které se pro implementaci C funkcí memcpy a memset používají instrukce WebAssembly memory.copy a memory.fill.
  • V funkci PATH.basename() byla zakázána normalizace cest (PATH.normalize()), tj. volání ‘PATH.basename(„a/.“)’ nyní vrátí „.“ místo „a“, a ‘PATH.basename(„a/b/..“)’ vrátí „..“ místo „a.“
  • Při použití volby „-sMODULARIZE“ jsou factory funkce, které vytvářejí a vracejí instance WebAssembly modulů a objektů pro JavaScript, nyní při kompilaci v režimu WASM_ASYNC_COMPILATION, který je použit ve výchozím nastavení, označeny jako „async.“
  • Byla přidána možnost specifikovat JavaScript knihovny pomocí volby „-lfoo.js“. Na rozdíl od volby „—js-library“ je vyhledávání knihovny prováděno ve všech cestách uvedených prostřednictvím volby „-L“.
  • Při sestavování v ladicím režimu (-O0 nebo -sASSERTIONS) je ve výchozím nastavení používána ladící verze funkce malloc se zapnutými kontrolami assert, které odhalují takové chyby, jako je dvojité zavolání funkce free().

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster