ĂshtĂ« publikuar versioni i mjetit Emscripten 4.0, qĂ« lejon kompilimin e kodit nĂ« C/C++ dhe gjuhĂ« tĂ« tjera pĂ«r tĂ« cilat ka frontend-e tĂ« bazuara nĂ« LLVM, nĂ« njĂ« kod ndĂ«rmjetĂ«s universal tĂ« nivelit tĂ« ulĂ«t WebAssembly. Rezultati i marrĂ« mund tĂ« pĂ«rdoret pĂ«r integrimin me projekte JavaScript, ekzekutimin nĂ« shfletuesin web, pĂ«rdorimin nĂ« Node.js ose krijimin e aplikacioneve tĂ« ndara multilegjerish, tĂ« cilat ekzekutohen me ndihmĂ«n e wasm runtime. Kodi i projektit shpĂ«rndahet nĂ«n licencĂ«n MIT. Compiler-i pĂ«rdor zhvillimet nga projekti LLVM dhe pĂ«r krijimin e WebAssembly dhe optimizimin angazhohet biblioteka Binaryen.
Qëllimi kryesor i Emscripten është krijimi i një mjeti që lejon ekzekutimin e kodit në Web pavarësisht nga gjuha e programimit në të cilën ky kod është shkruar fillimisht. Në aplikacionet e komiluara mund të përdoren thirrje të bibliotekave standarde C dhe C++ (libc, libcxx), zgjerime C++, multithreading të bazuar në pthreads, API POSIX dhe shumë biblioteka multimediale. Ekspertizë ad hoc ofrohet për integrimin me API-të e Web dhe kodin në JavaScript.
Emscripten mbështet përkthimin e daljes së bibliotekës SDL2 përmes Canvas-it, si dhe implementon mbështetje për OpenGL dhe EGL përmes API-së WebGL, duke lejuar transformimin në WebAssembly të aplikacioneve grafike dhe lojërave (për shembull, ekziston një port i toolkit-it Qt, dhe mbështeten motorët e lojërave Unreal Engine dhe Unity, si dhe motoori i simulimit të proceseve fizike Bullet).
Përveç kompilimit të kodit në C/C++, projekti për të ekzekutuar interpretuese për shfletues po zhvillohet gjithashtu për gjuhët Lua, C#, Python, Ruby dhe Perl. Për më tepër, është e mundur të përdoren frontend të LLVM, të ndryshme nga Clang, për shembuj, frontend për gjuhët si Swift, Rust, D dhe Fortran. makinave virtuale për gjuhët Lua, C#, Python, Ruby dhe Perl. Për më tepër, është e mundur të aplikohen frontend-e në LLVM, përveç Clang, si frontend-et për gjuhë si Swift, Rust, D dhe Fortran.
Caktimi i numrit të versionit 4.0 lidhet me ndryshime që ndikojnë në kompatibilitetin në nivelin ABI (kur ndërtohet përsëri projekti në Emscripten 4.0, do të kërkohet rindërtimi i skedave objekt dhe bibliotekave të ndërtuara me versionet e kaluara të Emscripten). Ndryshimet kryesore në Emscripten 4.0 janë:
- ĂshtĂ« shtuar opsioni «-sWASM_LEAGCY_EXCEPTIONS» pĂ«r tĂ« zgjedhur midis mekanizmave tĂ« vjetĂ«r dhe tĂ« rinj tĂ« trajtimit tĂ« pĂ«rjashtimeve. Si standart vazhdon tĂ« pĂ«rdoret mekanizmi i vjetĂ«r, pasi jo tĂ« gjithĂ« shfletuesit e kanĂ« implementuar funksionalitetet e WebAssembly pĂ«r tĂ« punuar me trajtuesit e rinj tĂ« pĂ«rjashtimeve.
- Komponentët compiler-rt, libcxx, libcxxabi dhe libunwind janë përditësuar në degën LLVM 19.
- Versioni minimal i mbështetur në ndërtimet e shfletuesit Safari (konfigurimi MIN_SAFARI_VERSION) është rritur nga 14.1 në 15.0, e cila ka lejuar në mënyrë standart përdorimin e disa mundësive të përparuara të WebAssembly:
- ĂshtĂ« pĂ«rfshirĂ« pĂ«rdorimi i instrukcioneve tĂ« reja pĂ«r konvertimin e tipit float nĂ« int (nontrapping-fptoint), qĂ« nĂ« vend tĂ« gjenerimit tĂ« njĂ« pĂ«rjashtimi nĂ« rast tĂ« mbingarkesĂ«s sĂ« rezultatit kthen vlerĂ«n minimale ose maksimale tĂ« mundshme (e nevojshme pĂ«r SIMD).
- ĂshtĂ« pĂ«rfshirĂ« opsioni WASM_BIGINT, ku pĂ«r shkĂ«mbimin e vlerave tĂ« plota 64-bit midis WebAssembly dhe kodit JavaScript pĂ«rdoret tipi BigInt.
- ĂshtĂ« pĂ«rfshirĂ« opsioni BULK_MEMORY, ku pĂ«r realizimin e funksioneve C memcpy dhe memset pĂ«rdoren instruksionet WebAssembly memory.copy dhe memory.fill.
- 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», funksionet fabrikë, të cilat krijojnë dhe kthejnë instanca të moduleve WebAssembly dhe objekteve për JavaScript, tani janë të shënuara me shenjën «async» kur kompilohen në mënyrë të WASM_ASYNC_COMPILATION, e cila përdoret si standart.
- ĂshtĂ« shtuar mundĂ«sia pĂ«r tĂ« cilĂ«suar biblioteka JavaScript, duke pĂ«rdorur opsionin «-lfoo.js». Ndryshe nga opsioni «âjs-library», kĂ«rkimi i bibliotekĂ«s kryhet nĂ« tĂ« gjitha rrugĂ«t e caktuara pĂ«rmes opsionit «-L».
- Kur komponohet në modalitetin gjurmues (-O0 ose -sASSERTIONS), ndihma e përdefaultuar nuk shpërngulet në variantin e gjurmimit të funksionit malloc me kujdes të shtuar, duke zbuluar gabime të tilla si thirrja e dyfishtë e funksionit free().
Burimi: opennet.ru
