Publicēts Emscripten 4.0 rīku komplekts, kas ļauj kompilēt C/C++ kodu un citus valodas kodus, kuriem ir LLVM bāzes frontendi, uz universālu zemos līmeņa starpkodu WebAssembly. Iegūto rezultātu var izmantot integrācijai ar JavaScript projektiem, palaišanai tīmekļa pārlūkā, izmantošanai Node.js vai izolētu daudzplatformu aplikāciju izveidei, kas tiek palaistas, izmantojot wasm runtime. Projekta kods tiek izplatīts saskaņā ar MIT licenci. Kompilatorā tiek izmantoti LLVM projekta sasniegumi, un WebAssembly ģenerēšanai un optimizācijai tiek izmantota bibliotēka Binaryen.
Emscripten galvenais mērķis ir izveidot rīku, kas ļauj izpildīt tīmeklī kodu neatkarīgi no programmēšanas valodas, kurā šis kods sākotnēji uzrakstīts. Kompilētajās aplikācijās var izmantot standarta C un C++ bibliotēku (libc, libcxx) izsaukumus, C++ paplašinājumus, vairāku pavedienu atbalstu, kas balstīts uz pthreads, API POSIX un daudzām multivides bibliotēkām. Atsevišķi tiek nodrošināti API, lai integrētu ar Web API un kodu JavaScript.
Emscripten atbalsta SDL2 bibliotēkas izejas translāciju caur Canvas un īsteno OpenGL un EGL atbalstu caur WebGL API, kas ļauj pārveidot grafiskās aplikācijas un spēles uz WebAssembly (piemēram, ir pieejams Qt rīku komplekta ports, tiek atbalstīti spēļu dzinēji Unreal Engine un Unity, kā arī fizisko procesa simulācijas dzinējs Bullet).
Papildus C/C++ koda kompilācijai atsevišķi tiek attīstīti projekti, kas paredzēti interpretatoru palaišanai pārlūkprogrammās un virtuālo mašīnu valodām Lua, C#, Python, Ruby un Perl. Turklāt ir iespējama citu LLVM frontendu, kuri nav Clang, piemēram, frontendi valodām Swift, Rust, D un Fortran, izmantošana.
Versijas numura 4.0 piešķiršana ir saistīta ar izmaiņu ieviešanu, kas pārkāpj ABI saderību (projektu pārbūvei Emscripten 4.0 ir nepieciešama objektu failu un bibliotēku pārbūve, kas bija būvētas ar iepriekšējām Emscripten versijām). Galvenās izmaiņas Emscripten 4.0:
- Tiek pievienota opcija „-sWASM_LEAGCY_EXCEPTIONS”, lai izvēlētos starp veco un jauno izņēmumu apstrādes mehānismu. Noklusējumā joprojām tiek izmantots vecais mehānisms, jo ne visi pārlūki ir īstenojuši WebAssembly iespējas, kas nepieciešamas jauno izņēmumu apstrādātāju darbībai.
- Sastāvdaļas compiler-rt, libcxx, libcxxabi un libunwind ir atjauninātas uz LLVM 19 zaru.
- Minimāli atbalstītā Safari pārlūkprogrammas versija (iestatījums MIN_SAFARI_VERSION) ir paaugstināta no 14.1 līdz 15.0, kas ļāvis pēc noklusējuma aktivizēt vairākas paplašinātās WebAssembly iespējas:
- Iespējota jaunu instrukciju izmantošana, lai pārveidotu float uz int (nontrapping-fptoint), kas, pārpildot rezultātu, atgriež minimālo vai maksimālo iespējamo vērtību, nevis ģenerē izņēmumu (vajadzīgs SIMD).
- Iespējota opcija WASM_BIGINT, kurai dēļ 64 bitu veselo skaitļu apmaiņai starp WebAssembly un JavaScript kodu tiek izmantots BigInt tips.
- Iespējota opcija BULK_MEMORY, kurā C funkciju memcpy un memset realizēšanai tiek izmantotas WebAssembly instrukcijas memory.copy un memory.fill.
- Funkcijā PATH.basename() tiek atslēgta ceļu normalizācija (PATH.normalize()), t.i., izsaucot ‘PATH.basename(«a/.»)’ tagad tiks atgriezts «.» vietā «a», bet ‘PATH.basename(«a/b/..»)’ atgriezīs «..» vietā «a».
- Izmantojot opciju «-sMODULARIZE» rūpnīcas funkcijas, kas izveido un atgriež WebAssembly moduļu un objektu instancēm JavaScript, tagad ir apzīmētas ar «async» piezīmi, kad tās tiek kompilētas režīmā WASM_ASYNC_COMPILATION, kas tiek izmantots pēc noklusējuma.
- Pievienota iespēja norādīt JavaScript bibliotēkas, izmantojot opciju «-lfoo.js». Atšķirībā no opcijas «—js-library» bibliotēkas meklēšana tiek veikta visās ceļos, kas norādīti ar opciju «-L».
- Sastādīšanā atkļūdošanas režīmā (-O0 vai -sASSERTIONS) pēc noklusējuma tiek izmantota atkļūdošanas malloc funkcija ar ieslēgtām assert pārbaudēm, kas atklāj tādas kļūdas kā divreiz ielūgšana funkcijā free().
Avots: opennet.lv
