Emscripten 4.0 este disponibil, un compilator din C/C++ în WebAssembly

A fost lansată versiunea instrumentului Emscripten 4.0, care permite compilarea codului din C/C++ și alte limbaje pentru care există front-end-uri bazate pe LLVM, în cod intermediar universal de nivel inferior WebAssembly. Rezultatul obținut poate fi folosit pentru integrarea în proiecte JavaScript, rularea în browserul web, utilizarea în Node.js sau crearea de aplicații multiplatformă autonome, executate cu ajutorul runtime-ului wasm. Codul proiectului este distribuit sub licența MIT. Compilatorul folosește realizările proiectului LLVM, iar pentru generarea WebAssembly și optimizare este utilizată biblioteca Binaryen.

Scopul principal al Emscripten este declararea creării unui instrument care să permită rularea codului în Web, indiferent de limbajul de programare în care a fost inițial scris acest cod. În aplicațiile compilate pot fi folosite apeluri la bibliotecile standard C și C++ (libc, libcxx), extensii C++, multiprocesare bazată pe pthreads, API POSIX și multe biblioteci multimedia. În mod separat, sunt oferite API-uri pentru integrarea cu API-urile Web și codul JavaScript.

Emscripten suportă traducerea ieșirii bibliotecii SDL2 prin Canvas și de asemenea implementează suport pentru OpenGL și EGL prin API-ul WebGL, ceea ce permite transformarea aplicațiilor grafice și jocurilor în WebAssembly (de exemplu, există un port al toolkit-ului Qt, suport pentru motoarele de jocuri Unreal Engine și Unity, precum și motorul de simulare a proceselor fizice Bullet).

Pe lângă compilarea codului din C/C++, se dezvoltă separately proiecte pentru a rula în browsere interpretoare pentru mașini virtuale limbaje precum Lua, C#, Python, Ruby și Perl. De asemenea, este posibilă utilizarea front-end-urilor pentru LLVM, diferite de Clang, de exemplu, front-end-uri pentru limbaje precum Swift, Rust, D și Fortran.

Alocarea numărului versiunii 4.0 este asociată cu modificări care afectează compatibilitatea la nivel ABI (la recompilarea proiectului în Emscripten 4.0 va fi necesară recompilarea fișierelor obiect și bibliotecilor compilate cu versiunile anterioare ale Emscripten). Principalele modificări în Emscripten 4.0:

  • A fost adăugată opțiunea „-sWASM_LEGACY_EXCEPTIONS” pentru a alege între vechile și noile mecanisme de tratare a excepțiilor. În mod implicit, continuă să fie folosit vechiul mecanism, deoarece nu toate browserele au implementat capacitățile WebAssembly pentru a lucra cu noii gestionari de excepții.
  • Componentele compiler-rt, libcxx, libcxxabi și libunwind au fost actualizate la ramura LLVM 19.
  • Versiunea minim compatibilă a browserului Safari în construiri (setarea MIN_SAFARI_VERSION) a fost crescută de la 14.1 la 15.0, ceea ce a permis activarea în mod implicit a mai multor funcții avansate WebAssembly:
    • A fost inclusă utilizarea noilor instrucțiuni pentru conversia tipului float în int (nontrapping-fptoint), care, în loc să genereze o excepție în cazul depășirii rezultatului, returnează valoarea minimă sau maximă posibilă (necesară pentru SIMD).
    • A fost activată opțiunea WASM_BIGINT, care permite utilizarea tipului BigInt pentru schimbul valorilor întregi de 64 de biți între WebAssembly și codul JavaScript.
    • A fost activată opțiunea BULK_MEMORY, care permite utilizarea instrucțiunilor WebAssembly memory.copy și memory.fill pentru implementarea funcțiilor C memcpy și memset.
  • În funcția PATH.basename() a fost dezactivată normalizarea căilor (PATH.normalize()), adică apelul ‘PATH.basename(«a/.»)’ va returna acum «.» în loc de «a», iar ‘PATH.basename(«a/b/..»)’ va returna «..» în loc de «a».
  • Când se utilizează opțiunea «-sMODULARIZE», funcțiile factory care creează și returnează instanțe ale modulelor și obiectelor WebAssembly pentru JavaScript sunt acum marcate cu eticheta «async» atunci când sunt compilate în modul WASM_ASYNC_COMPILATION, aplicat în mod implicit.
  • A fost adăugată posibilitatea specificării bibliotecilor JavaScript folosind opțiunea «-lfoo.js». Spre deosebire de opțiunea «—js-library», căutarea bibliotecii se face în toate căile specificate prin opțiunea «-L».
  • Atunci când se leagă în modul de depanare (-O0 sau -sASSERTIONS), versiunea de depanare a funcției malloc este activată în mod implicit cu verificări de tip assert pentru a identifica erori precum apeluri multiple ale funcției free().

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster