Na voljo je Emscripten 4.0, prevajalnik iz C/C++ v WebAssembly

Objavljen je izdanak Emscripten alata 4.0, koji omogućava kompajliranje koda napisanog u C/C++ i drugim jezicima koji imaju frontend baziran na LLVM, u univerzalni niskonivoi međukulturni kod WebAssembly. Dobijeni rezultat može se koristiti za integraciju sa JavaScript projektima, pokretanje u web pretraživaču, korišćenje u Node.js ili kreiranje odvojenih multiplatformskih aplikacija koje se pokreću pomoću wasm runtime-a. Kod projekta distribuira se pod MIT licencom. U kompajleru se koriste resursi projekta LLVM, a za generisanje WebAssembly i optimizaciju koristi se biblioteka Binaryen.

Osnovni cilj Emscripten-a je kreiranje alata koji omogućava izvođenje koda u Web-u bez obzira na programski jezik u kojem je taj kod prvobitno napisan. U kompajliranih aplikacijama mogu se koristiti pozivi standardnih biblioteka C i C++ (libc, libcxx), C++ ekstenzije, multithreading zasnovan na pthreads, POSIX API, kao i mnoge multimedijalne biblioteke. Posebno se nude API za integraciju sa Web API i kodom na JavaScript-u.

Emscripten podržava prevođenje izlaza biblioteke SDL2 preko Canvas-a, a takođe implementira podršku za OpenGL i EGL putem API-ja WebGL, što omogućava konvertovanje grafičkih aplikacija i igara u WebAssembly (na primer, postoji port Qt toolkit-a, podržani su Unreal Engine i Unity, kao i engine za simulaciju fizičkih procesa Bullet).

Pored kompajliranja koda u C/C++, posebno se razvijaju projekti za pokretanje interpretatora u pretraživačima i virtualnih naprav za jezike Lua, C#, Python, Ruby i Perl. Pored toga, moguće je korišćenje frontenda za LLVM, različitog od Clang-a, kao što su frontendi za jezike poput Swift, Rust, D i Fortran.

Dodeljivanje broja verzije 4.0 povezano je sa promenama koje krše ABI kompatibilnost (pri ponovnom kompajliranju projekta u Emscripten 4.0, biće neophodno ponovo kompajlirati objekte i biblioteke koje su napravljene prethodnim verzijama Emscripten-a). Glavne promene u Emscripten 4.0:

  • Dodata je opcija „-sWASM_LEAGCY_EXCEPTIONS“ za odabir između starog i novog mehanizma obrade izuzetaka. Prema podrazumevanju nastavlja se koristiti stari mehanizam, s obzirom da svi pretraživači nisu implementirali mogućnosti WebAssembly-a za rad novih obraditelja izuzetaka.
  • Komponente compiler-rt, libcxx, libcxxabi i libunwind ažurirane su na LLVM 19 granu.
  • Minimalna podpora za različico brskalnika Safari (nastavitev MIN_SAFARI_VERSION) je bila zvišana z 14.1 na 15.0, kar je omogočilo privzeto aktivacijo več naprednih funkcij WebAssembly:
    • Omogočeno je uporabo novih ukazov za pretvorbo tipa float v int (nontrapping-fptoint), ki namesto generiranja izjeme ob prekoračitvi rezultata vrnejo minimalno ali maksimalno možno vrednost (kar je potrebno za SIMD).
    • Omogočena je možnost WASM_BIGINT, pri kateri se za izmenjavo 64-bitnih celih števil med WebAssembly in JavaScriptom uporablja tip BigInt.
    • Omogočena je možnost BULK_MEMORY, pri kateri se za implementacijo C-funkcij memcpy in memset uporabljajo ukazi WebAssembly memory.copy in memory.fill.
  • V funkciji PATH.basename() je bila onemogočena normalizacija poti (PATH.normalize()), torej klic ‘PATH.basename(«a/.»)’ zdaj vrne ‘.’ namesto ‘a’, medtem ko ‘PATH.basename(«a/b/..»)’ vrne ‘..’ namesto ‘a’.
  • Pri uporabi možnosti ‘-sMODULARIZE’ so tovarniške funkcije, ki ustvarjajo in vračajo primerke WebAssembly modulov in objektov za JavaScript, zdaj označene s predznakom ‘async’ pri prevajanju v načinu WASM_ASYNC_COMPILATION, ki je privzeto uporabljen.
  • Dodana je možnost navedbe JavaScript bibliotek, s pomočjo možnosti ‘-lfoo.js’. V nasprotju z možnostjo ‘—js-library’ se iskanje knjižnice izvaja v vseh poteh, določenih skozi možnost ‘-L’.
  • Pri povezovanju v načinu za odpravljanje napak (-O0 ali -sASSERTIONS) je privzeto aktivirana različica funkcije malloc za odpravljanje napak s vključenimi preverjanji assert, ki odkrivajo napake, kot je dvojni klic funkcije free().

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster