Emscripten 4.0 er tilgjengelig, en kompilator fra C/C++ til WebAssembly

Versjonen av Emscripten 4.0 er offentliggjort, og den lar deg kompilere kode skrevet i C/C++ og andre språk som har frontender bygget på LLVM, til et universelt lavnivå mellomliggende WebAssembly-kode. Det resulterende produktet kan brukes til integrasjon med JavaScript-prosjekter, kjøres i nettleseren, benyttes i Node.js eller skape selvstendige plattformuavhengige applikasjoner som kjøres ved hjelp av wasm-runtime. Prosjektkoden er lisensiert under MIT. Kompilatoren bruker bidrag fra LLVM-prosjektet, og for generering av WebAssembly og optimalisering brukes biblioteket Binaryen.

Hovedmålet med Emscripten er å lage et verktøy som lar kode kjøres på nettet uavhengig av programmeringsspråket koden opprinnelig er skrevet i. De kompilert applikasjonene kan bruke standardbibliotekene libc og libcxx (libc, libcxx), C++-utvidelser, multithreading basert på pthreads, POSIX-APIer, og mange multimedia-biblioteker. Separate APIer tilbys for integrasjon med Web API-er og kode skrevet i JavaScript.

Emscripten støtter oversettelse av SDL2-bibliotekets utdata gjennom Canvas, samt implementerer støtte for OpenGL og EGL gjennom WebGL-API-et, noe som muliggjør konvertering av grafiske applikasjoner og spill til WebAssembly (for eksempel er det en port av Qt-verktøysettet, og spillmotorene Unreal Engine og Unity er støttet, samt simuleringsmotoren Bullet).

I tillegg til kompilering av C/C++-kode, utvikles prosjekter for å kjøre tolker i nettleserne for virtual machines språk som Lua, C#, Python, Ruby, og Perl. I tillegg er det mulig å bruke frontender til LLVM som er forskjellige fra Clang, for eksempel frontender for språk som Swift, Rust, D, og Fortran.

Tildelingen av versjonsnummer 4.0 er knyttet til endringer som bryter ABI-kompatibilitet (ved ombygging av prosjektet i Emscripten 4.0 må objektfiler og biblioteker bygget med tidligere versjoner av Emscripten ombygges). De viktigste endringene i Emscripten 4.0 er:

  • Alternativet «-sWASM_LEGACY_EXCEPTIONS» er lagt til for å velge mellom den gamle og den nye unntakshåndteringsmekanismen. Den gamle mekanismen brukes som standard, ettersom ikke alle nettlesere har implementert WebAssembly-funksjonalitet for å håndtere de nye unntakshåndtererne.
  • Komponentene compiler-rt, libcxx, libcxxabi og libunwind er oppdatert til LLVM 19-grenen.
  • Den minimalt støttede versjonen av Safari-nettleseren (innstillingen MIN_SAFARI_VERSION) har blitt hevet fra 14.1 til 15.0, noe som gjør det mulig å aktivere flere avanserte funksjoner i WebAssembly som standard.
    • Bruken av nye instruksjoner for å konvertere float til int (nontrapping-fptoint) er inkludert, som i stedet for å generere et unntak ved overflyt returnerer det minimale eller maksimale mulige verdiene (nødvendig for SIMD).
    • Alternativet WASM_BIGINT er aktivert, som gir mulighet for utveksling av 64-biters heltallsverdier mellom WebAssembly og JavaScript-kode ved hjelp av typen BigInt.
    • Alternativet BULK_MEMORY er aktivert, som gjør at WebAssembly-instruksjonene memory.copy og memory.fill brukes til implementering av C-funksjoner memcpy og memset.
  • I funksjonen PATH.basename() er normalisering av baner (PATH.normalize()) deaktivert, det vil si at anropet ‘PATH.basename(«a/.»)’ nå returnerer «.» i stedet for «a», og ‘PATH.basename(«a/b/..»)’ returnerer «..» i stedet for «a».
  • Når du bruker alternativet «-sMODULARIZE», er fabrikkfunksjoner som oppretter og returnerer instanser av WebAssembly-moduler og objekter til JavaScript nå merket med «async» ved kompilering i modus WASM_ASYNC_COMPILATION, som er aktivert som standard.
  • Muligheten for å spesifisere JavaScript-biblioteker er lagt til, ved å bruke alternativet «-lfoo.js». I motsetning til alternativet «—js-library» søkes det etter biblioteket i alle stier som er spesifisert gjennom alternativet «-L».
  • Når du kompilerer i feilsøkingsmodus (-O0 eller -sASSERTIONS) er det standard å bruke en feilsøkingsversjon av malloc-funksjonen med aktivert assert-sjekking, som avdekker feil som dobbel anrop av free()-funksjonen.

Kilde: opennet.ru

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster