është publikuar versioni i 4.0 të mjetit Emscripten, që lejon kompilimin e kodit në C/C++ dhe gjuhëve të tjera që kanë frondë për LLVM, në kodin e ulët të nivelit universale WebAssembly. Rezultati i marrë mund të përdoret për integrim me projektet JavaScript, ekzekutimin në shfletuesin web, përdorimin në Node.js ose për të krijuar aplikacione shumëplatformat që ekzekutohen përmes wasm runtime. Kodi i projektit shpërndahet nën licencën MIT. Në kompilator përfshihen zhvillimet e projektit LLVM, ndërsa për gjenerimin e WebAssembly dhe optimizimin përdoret biblioteka Binaryen.
Qëllimi kryesor i Emscripten është krijimi i një mjeti që lejon ekzekutimin e kodit në Web, pavarësisht nga gjuha programimi në të cilën ky kod është shkruar fillimisht. Në aplikacionet e kompuar mund të përdoren thirrjet e bibliotekave standarde C dhe C++ (libc, libcxx), zgjerimet C++, shumëfije në bazë të pthreads, API POSIX dhe shumë biblioteka multimedia. Po ashtu, ofrohen API të veçanta për integrimin me Web API dhe kodin në JavaScript.
Emscripten mbështet përkthimin e daljes nga biblioteka SDL2 përmes Canvas, si dhe realizon mbështetje për OpenGL dhe EGL përmes API WebGL, që lejon të transformohen në WebAssembly aplikacione grafike dhe lojëra (p.sh., ka portin e toolkit Qt, mbështeten motorët e lojrave Unreal Engine dhe Unit, si dhe motori i simuluar i proceseve fizike Bullet).
Përveç kompilimit të kodit në C/C++, zhvillohen projekte të veçanta për ekzekutimin e interpretueseve në shfletues për makinat virtuale gjuhët Lua, C#, Python, Ruby dhe Perl. Për më tepër, është e mundur të aplikohet frondë të tjera për LLVM, përveç Clang, si p.sh., frondët për gjuhë si Swift, Rust, D dhe Fortran.
Përshkrimi i numrit të versionit 4.0 është i lidhur me ndryshimet që prishin kompatibilitetin në nivelin ABI (në rikonstruksionin e projektit në Emscripten 4.0 do të kërkohet rikonstruksioni i skedhave objekt dhe biblioteka të ndërtuara me versionet e kaluara të Emscripten). Ndryshimet kryesore në Emscripten 4.0:
- është shtuar opsioni "-sWASM_LEAGCY_EXCEPTIONS" për të zgjedhur midis mekanizmave të vjetër dhe atyre të reja të trajtimit të përjashtimeve. Sipas parazgjedhjes vazhdon të përdoret mekanizmi i vjetër, pasi jo të gjithë shfletuesit e kanë implementuar mundësitë e WebAssembly për të punuar me trajtuesit e rinj të përjashtimeve.
- Komponentët compiler-rt, libcxx, libcxxabi dhe libunwind janë azhurnuar në degën LLVM 19.
- Versioni minime të mbështetura për ndërtimin e shfletuesit Safari (caktimi MIN_SAFARI_VERSION) është rritur nga 14.1 në 15.0, duke mundësuar aktivizimin e disa veçorive të avancuara të WebAssembly si të parazgjedhura:
- ĂshtĂ« e bĂ«rĂ« e mundur pĂ«rdorimi i instrukcioneve tĂ« reja pĂ«r konvertimin e tipit float nĂ« int (nontrapping-fptoint), tĂ« cilat nĂ« vend qĂ« tĂ« gjenerojnĂ« njĂ« pĂ«rjashtim nĂ« rast teprice, kthejnĂ« vlerĂ«n minimale ose maksimale tĂ« mundshme (e nevojshme pĂ«r SIMD).
- ĂshtĂ« mundĂ«suar opsioni WASM_BIGINT, i cili pĂ«rdor tipin BigInt pĂ«r shkĂ«mbimin e vlerave tĂ« numrave tĂ« plotĂ« 64-bit midis WebAssembly dhe kodit JavaScript.
- ĂshtĂ« mundĂ«suar opsioni BULK_MEMORY, i cili aplikon instrukcionet WebAssembly memory.copy dhe memory.fill pĂ«r realizimin e funksioneve C memcpy dhe memset.
- Në funksionin PATH.basename() është çaktivizuar normalizimi i rrugëve (PATH.normalize()), dmth. thirrja 'PATH.basename("a/.")' tani do të kthejë "." në vend të "a", dhe 'PATH.basename("a/b/..")' do të kthejë ".." në vend të "a".
- Kur përdoret opsioni "-sMODULARIZE", fabrikat e funksioneve që krijojnë dhe kthejnë instanca të moduleve WebAssembly dhe objekte për JavaScript tani janë të markuara si "async" gjatë kompilimit me mënyrën WASM_ASYNC_COMPILATION, e cila aplikohet si e parazgjedhur.
- ĂshtĂ« shtuar mundĂ«sia e pĂ«rcaktimit tĂ« bibliotekave JavaScript duke pĂ«rdorur opsionin "-lfoo.js". Ndryshe nga opsioni "âjs-library", kĂ«rkimi i bibliotekĂ«s bĂ«het nĂ« tĂ« gjitha rrugĂ«t e caktuara pĂ«rmes opsionit "-L".
- Kur komponohet në modalitetin e rindërtimit për debugging (-O0 ose -sASSERTIONS) versioni i debugging i funksionit malloc është aktivizuar si e parazgjedhur me kontrolle assert, të cilat zbulojnë gabime të tilla si thirrja e dyfishtë e funksionit free().
Burimi: opennet.ru
