ఎమ్స్క్రిప్టెన్ 4.0 టూల్కిట్ విడుదల ప్రచురించబడింది, ఇది C/C++ మరియు ఇతర భాషలలో కోడ్ను కంపైల్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది, దీని కోసం LLVM-ఆధారిత ఫ్రంటెండ్లు సార్వత్రిక తక్కువ-స్థాయి ఇంటర్మీడియట్ కోడ్ వెబ్అసెంబ్లీలో అందుబాటులో ఉన్నాయి. ఫలిత ఫలితం JavaScript ప్రాజెక్ట్లతో ఏకీకరణ, వెబ్ బ్రౌజర్లో అమలు చేయడం, Node.jsలో ఉపయోగించడం లేదా వాస్మ్ రన్టైమ్ ఉపయోగించి ప్రారంభించబడిన స్టాండ్-అలోన్ బహుళ-ప్లాట్ఫారమ్ అప్లికేషన్లను సృష్టించడం కోసం ఉపయోగించబడుతుంది. ప్రాజెక్ట్ కోడ్ MIT లైసెన్స్ క్రింద పంపిణీ చేయబడింది. కంపైలర్ LLVM ప్రాజెక్ట్ నుండి డెవలప్మెంట్లను ఉపయోగిస్తుంది మరియు WebAssembly మరియు ఆప్టిమైజేషన్ని రూపొందించడానికి Binaryen లైబ్రరీ ఉపయోగించబడుతుంది.
ఎమ్స్క్రిప్టెన్ యొక్క ప్రధాన లక్ష్యం ఏమిటంటే, ఈ కోడ్ అసలు వ్రాయబడిన ప్రోగ్రామింగ్ భాషతో సంబంధం లేకుండా వెబ్లో కోడ్ని అమలు చేయడానికి మిమ్మల్ని అనుమతించే సాధనాన్ని సృష్టించడం. కంపైల్డ్ అప్లికేషన్లు ప్రామాణిక C మరియు C++ లైబ్రరీలకు (libc, libcxx), C++ పొడిగింపులు, pthreads-ఆధారిత మల్టీథ్రెడింగ్, POSIX APIలు మరియు అనేక మల్టీమీడియా లైబ్రరీలకు కాల్లను ఉపయోగించవచ్చు. వెబ్ API మరియు జావాస్క్రిప్ట్ కోడ్తో అనుసంధానం కోసం APIలు విడిగా అందించబడ్డాయి.
కాన్వాస్ ద్వారా SDL2 లైబ్రరీ అవుట్పుట్ను ప్రసారం చేయడానికి Emscripten మద్దతు ఇస్తుంది మరియు WebGL API ద్వారా OpenGL మరియు EGL కోసం మద్దతును అమలు చేస్తుంది, ఇది గ్రాఫికల్ అప్లికేషన్లు మరియు గేమ్లను WebAssemblyకి మార్చడానికి మిమ్మల్ని అనుమతిస్తుంది (ఉదాహరణకు, Qt టూల్కిట్ యొక్క పోర్ట్ ఉంది, గేమ్ ఇంజన్లు అన్రియల్ ఇంజిన్ మరియు యూనిట్కు మద్దతివ్వబడతాయి, అలాగే ఫిజికల్ సిమ్యులేషన్ ఇంజిన్ బుల్లెట్ ప్రాసెస్లు).
C/C++ కోడ్ను కంపైల్ చేయడంతో పాటు, బ్రౌజర్లలో ఇంటర్ప్రెటర్లను అమలు చేయడానికి ప్రాజెక్టులు విడిగా అభివృద్ధి చేయబడుతున్నాయి మరియు వర్చువల్ మాషిన్ Lua, C#, Python, Ruby, మరియు Perl కోసం. Swift, Rust, D, మరియు Fortran కోసం frontends వంటి క్లాంగ్ కాకుండా ఇతర LLVM frontendsను ఉపయోగించడం కూడా సాధ్యమే.
సంస్కరణ సంఖ్య 4.0 యొక్క అసైన్మెంట్ ABI స్థాయిలో అనుకూలతను విచ్ఛిన్నం చేసే మార్పుల పరిచయం కారణంగా ఉంది (ఎమ్స్క్రిప్టెన్ 4.0లో ప్రాజెక్ట్ను పునర్నిర్మించేటప్పుడు, ఎమ్స్క్రిప్టెన్ యొక్క మునుపటి సంస్కరణల ద్వారా సంకలనం చేయబడిన ఆబ్జెక్ట్ ఫైల్లు మరియు లైబ్రరీలను పునర్నిర్మించడం అవసరం). ఎమ్స్క్రిప్టెన్ 4.0లో ప్రధాన మార్పులు:
- పాత మరియు కొత్త మినహాయింపు నిర్వహణ విధానాల మధ్య ఎంచుకోవడానికి "-sWASM_LEAGCY_EXCEPTIONS" ఎంపిక జోడించబడింది. అన్ని బ్రౌజర్లు కొత్త మినహాయింపు హ్యాండ్లర్లను నిర్వహించడానికి WebAssembly సామర్థ్యాలను అమలు చేయనందున, డిఫాల్ట్గా, పాత మెకానిజం ఉపయోగించడం కొనసాగుతుంది.
- Compiler-rt, libcxx, libcxxabi మరియు libunwind భాగాలు LLVM 19 శాఖకు నవీకరించబడ్డాయి.
- అసెంబ్లీలలో (MIN_SAFARI_VERSION సెట్టింగ్) మద్దతు ఉన్న Safari బ్రౌజర్ యొక్క కనిష్ట సంస్కరణ 14.1 నుండి 15.0కి పెంచబడింది, ఇది డిఫాల్ట్గా అనేక అధునాతన WebAssembly లక్షణాలను ఉపయోగించడం సాధ్యం చేసింది:
- కొత్త ఫ్లోట్ టు ఇన్ట్ కన్వర్షన్ సూచనల (నాన్ట్రాపింగ్-ఎఫ్పిటోయింట్) వినియోగాన్ని ప్రారంభించింది, ఇది ఫలితం పొంగిపొర్లుతున్నప్పుడు మినహాయింపును ఇవ్వడానికి బదులుగా, కనిష్ట లేదా గరిష్ట సాధ్యమైన విలువను (SIMDకి అవసరమైనది) తిరిగి ఇస్తుంది.
- WASM_BIGINT ఎంపిక ప్రారంభించబడింది, ఇది WebAssembly మరియు JavaScript కోడ్ల మధ్య 64-బిట్ పూర్ణాంక విలువలను మార్పిడి చేయడానికి BigInt రకాన్ని ఉపయోగిస్తుంది.
- BULK_MEMORY ఎంపిక ప్రారంభించబడింది, ఇది C ఫంక్షన్లను memcpy మరియు memsetని అమలు చేయడానికి WebAssembly సూచనలను memory.copy మరియు memory.fillని ఉపయోగిస్తుంది.
- PATH.basename() ఫంక్షన్ (PATH.normalize())లో మార్గం సాధారణీకరణ నిలిపివేయబడింది, అనగా. 'PATH.basename("a/.")'కి కాల్ చేయడం ఇప్పుడు "." తిరిగి వస్తుంది. "a"కి బదులుగా, మరియు 'PATH.basename("a/b/..")' "a"కి బదులుగా ".."ని అందిస్తుంది.
- -sMODULARIZE ఎంపికను ఉపయోగిస్తున్నప్పుడు, JavaScript కోసం WebAssembly మాడ్యూల్స్ మరియు ఆబ్జెక్ట్లను సృష్టించే మరియు తిరిగి ఇచ్చే ఫ్యాక్టరీ ఫంక్షన్లు ఇప్పుడు డిఫాల్ట్ WASM_ASYNC_COMPILATION మోడ్లో కంపైల్ చేసినప్పుడు "async"గా ఫ్లాగ్ చేయబడతాయి.
- "-lfoo.js" ఎంపికను ఉపయోగించి జావాస్క్రిప్ట్ లైబ్రరీలను పేర్కొనే సామర్థ్యం జోడించబడింది. "--js-library" ఎంపిక వలె కాకుండా, లైబ్రరీ "-L" ఎంపిక ద్వారా పేర్కొన్న అన్ని మార్గాలలో శోధించబడుతుంది.
- డీబగ్ మోడ్లో (-O0 లేదా -sASSERTIONS) లింక్ చేస్తున్నప్పుడు, malloc ఫంక్షన్ యొక్క డిఫాల్ట్ డీబగ్ వెర్షన్ ప్రారంభించబడుతుంది, ఉచిత()కి రెండుసార్లు కాల్ చేయడం వంటి లోపాలను గుర్తించడానికి నిశ్చయ తనిఖీలు ప్రారంభించబడతాయి.
మూలం: opennet.ru
