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

Utgivelsen av Emscripten 4.0-verktøysettet har blitt publisert, slik at du kan kompilere kode i C/C++ og andre språk som LLVM-baserte grensesnitt er tilgjengelige for i universell lavnivå-mellomkode WebAssembly. Det resulterende resultatet kan brukes til integrasjon med JavaScript-prosjekter, kjøres i en nettleser, bruke i Node.js, eller lage frittstående multi-plattformapplikasjoner lansert ved bruk av wasm runtime. Prosjektkoden er distribuert under MIT-lisensen. Kompilatoren bruker utviklinger fra LLVM-prosjektet, og Binaryen-biblioteket brukes til å generere WebAssembly og optimalisering.

Hovedmålet med Emscripten er å lage et verktøy som lar deg kjøre kode på nettet, uavhengig av hvilket programmeringsspråk denne koden opprinnelig ble skrevet på. Kompilerte applikasjoner kan bruke kall til standard C- og C++-biblioteker (libc, libcxx), C++-utvidelser, pthreads-basert multithreading, POSIX APIer og mange multimediebiblioteker. APIer for integrasjon med Web API og JavaScript-kode leveres separat.

Emscripten støtter kringkasting av utdata fra SDL2-biblioteket gjennom Canvas, og implementerer også støtte for OpenGL og EGL gjennom WebGL API, som lar deg konvertere grafiske applikasjoner og spill til WebAssembly (det er for eksempel en port til Qt-verktøysettet, spillmotorene Unreal Engine og Unit støttes, så vel som den fysiske simuleringsmotoren Bullet-prosesser).

I tillegg til å kompilere C/C++-kode, utvikles det separate prosjekter for å kjøre tolker i nettlesere og virtuelle maskiner for Lua, C#, Python, Ruby og Perl. Det er også mulig å bruke andre LLVM-grensesnitt enn Clang, for eksempel grensesnitt for Swift, Rust, D og Fortran.

Tildelingen av versjonsnummer 4.0 skyldes innføring av endringer som bryter kompatibiliteten på ABI-nivå (ved ombygging av prosjektet i Emscripten 4.0 vil det være nødvendig å gjenoppbygge objektfiler og biblioteker kompilert av tidligere versjoner av Emscripten). Store endringer i Emscripten 4.0:

  • Lagt til "-sWASM_LEAGCY_EXCEPTIONS"-alternativet for å velge mellom gamle og nye unntakshåndteringsmekanismer. Som standard fortsetter den gamle mekanismen å brukes, siden ikke alle nettlesere har implementert WebAssembly-funksjoner for å håndtere de nye unntaksbehandlerne.
  • Compiler-rt-, libcxx-, libcxxabi- og libunwind-komponentene har blitt oppdatert til LLVM 19-grenen.
  • Minimumsversjonen av Safari-nettleseren som støttes i assemblies (MIN_SAFARI_VERSION-innstillingen) er økt fra 14.1 til 15.0, noe som gjorde det mulig å bruke flere avanserte WebAssembly-funksjoner som standard:
    • Aktivert bruk av nye float til int-konverteringsinstruksjoner (nontrapping-fptoint), som i stedet for å kaste et unntak når resultatet renner over, returnerer minimum eller maksimum mulig verdi (nødvendig for SIMD).
    • Alternativet WASM_BIGINT er aktivert, som bruker BigInt-typen til å utveksle 64-bits heltallsverdier mellom WebAssembly og JavaScript-kode.
    • Alternativet BULK_MEMORY er aktivert, som bruker WebAssembly-instruksjonene memory.copy og memory.fill for å implementere C-funksjonene memcpy og memset.
  • I PATH.basename()-funksjonen er banenormalisering deaktivert (PATH.normalize()), dvs. ringer 'PATH.basename("a/.")' vil nå returnere "." i stedet for "a", og 'PATH.basename("a/b/..")' vil returnere ".." i stedet for "a".
  • Når du bruker alternativet -sMODULARIZE, blir fabrikkfunksjoner som oppretter og returnerer forekomster av WebAssembly-moduler og objekter for JavaScript nå flagget som "async" når de kompileres i standard WASM_ASYNC_COMPILATION-modus.
  • Lagt til muligheten til å spesifisere JavaScript-biblioteker ved å bruke alternativet "-lfoo.js". I motsetning til "--js-library"-alternativet, søkes biblioteket i alle stier spesifisert gjennom "-L"-alternativet.
  • Når du kobler i feilsøkingsmodus (-O0 eller -sASSERTIONS), er standard feilsøkeversjonen av malloc-funksjonen aktivert, med assert-sjekker aktivert for å oppdage feil som å ringe free() to ganger.

Kilde: opennet.ru

Legg til en kommentar