Avalikustati Emscripten 4.0 vĂ€ljaanne, mis vĂ”imaldab C/C++ ja teiste keelte, millel on LLVM-pĂ”hised frontendâid, kompileerimist universaalseks madala taseme WebAssembly vahefailiks. Saadud tulemust saab kasutada JavaScripti projektidega integreerimiseks, veebibrauseris kĂ€itamiseks, Node.js-is kasutamiseks vĂ”i iseseisvate mitme platvormi rakenduste loomiseks, mida kĂ€itatakse lĂ€bi wasm runtime'i. Projekti kood on litsentseeritud MIT litsentsi alusel. Kompilaatoris kasutatakse LLVM projekti arengut ja WebAssembly genereerimiseks ning optimeerimiseks kasutatakse Binaryen'i teeki.
Emscripteni pÔhieesmÀrgiks on arendada tööriista, mis vÔimaldab kÀitada veebis koodi olenemata programmeerimiskeelest, milles see kood algselt kirjutatud on. Kompilleeritud rakendustes vÔivad kasutada C ja C++ standardraamatukogude (libc, libcxx) kutseid, C++ laiendusi, mitme lÔime toetust pthreads'i pÔhjal, POSIX API-d ning mitmeid multimeedia raamatukogusid. Eraldi antakse vÀlja API-d Web API-de ja JavaScripti koodiga integreerimiseks.
Emscripten toetab SDL2 teeki vĂ€ljundi tĂ”lkimist Canvas kaudu ning rakendab OpenGL-i ja EGL-i tuge WebGL API kaudu, vĂ”imaldades graafiliste rakenduste ja mĂ€ngude (nĂ€iteks Qt tööriistakomplekti port, Unreal Engine'i ja Unity mĂ€ngumootorite tugi ning Bullet fĂŒĂŒsikamootor) teisendamist WebAssembly-ks.
Lisaks C/C++ koodi kompileerimisele arendatakse eraldi projekte, et kÀivitada tÔlgendajaid brauserites ja virtuaalmasinad muid keeltes nagu Lua, C#, Python, Ruby ja Perl. Samuti on vÔimalik rakendada LLVM frontend'e, mis ei ole Clang, nÀiteks keelte frontend'id nagu Swift, Rust, D ja Fortran.
Versiooninumbri 4.0 mÀÀramine on seotud ABI tasandi ĂŒhilduvust rikkuvate muudatustega (projekti taascompileerimisel Emscripten 4.0-ga tuleb uuesti kompileerida objektifailid ja raamatukogud, mille on loonud varasemad Emscripteni versioonid). Emscripten 4.0 peamised muudatused:
- Lisatud valik «-sWASM_LEGACY_EXCEPTIONS» uute ja vanade erandi töötlemise mehhanismide valimiseks. Vaikimisi kasutatakse vana mehhanismi, kuna kÔik brauserid ei ole veel WebAssembly uusimate erandi töötlemise mehhanismide toetust realiseerinud.
- Komponendid compiler-rt, libcxx, libcxxabi ja libunwind on uuendatud LLVM 19 harule.
- Toetatud minimaalne Safari brauseri versioon (seade MIN_SAFARI_VERSION) on tÔstetud 14.1-lt 15.0-le, mis vÔimaldas vaikimisi kasutusele vÔtta mitmeid tÀiustatud WebAssembly vÔimalusi:
- Uute kĂ€skluste kasutamine, mis teisendab float tĂŒĂŒbi int-iks (nontrapping-fptoint), mis genereerimise asemel, kui tulemus ĂŒletab piire, tagastab minimaalse vĂ”i maksimaalse vĂ”imaliku vÀÀrtuse (SIMD jaoks vajalik).
- Lisatud valik WASM_BIGINT, mille puhul vahetatakse 64-bitiseid tĂ€isarve WebAssembly ja JavaScripti koodi vahel BigInt tĂŒĂŒbi abil.
- Lisatud valik BULK_MEMORY, mille puhul C funktsioonide memcpy ja memset rakendamiseks kasutatakse WebAssembly kÀske memory.copy ja memory.fill.
- Funktsioonis PATH.basename() on vĂ€lja lĂŒlitatud teede normaliseerimine (PATH.normalize()), st âPATH.basename("a/")â tagastab nĂŒĂŒd «.» mitte «a», ja âPATH.basename("a/b/..")â tagastab «..» mitte «a».
- Kui kasutatakse valikut «-sMODULARIZE», siis tehasefunktsioonid, mis loovad ja tagastavad WebAssembly moodulite ja objektide eksemplare JavaScripti jaoks, on nĂŒĂŒd tĂ€histatud «async» mĂ€rgendiga, kui neid kompileeritakse reĆŸiimis WASM_ASYNC_COMPILATION, mis on vaikimisi rakendatud.
- Lisatud vÔimalus mÀÀrata JavaScripti raamatukogud, kasutades valikut «-lfoo.js». Erinevalt valikust «--js-library» otsitakse raamatukogu kÔikidest teedest, mis on mÀÀratud valiku «-L» kaudu.
- Silumise reĆŸiimis (-O0 vĂ”i -sASSERTIONS) on vaikimisi aktiveeritud silumise variant malloc funktsioonist koos assert-uga, mis leiab selliseid vigu nagu kahekordne free() funktsiooni kutsumine.
Allikas: opennet.ru
