Saadaval on Emscripten 4.0, C/C++ kompilaator WebAssembly jaoks.

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

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