Emscripten 4.0 ကိရိယာအစုံအလင်ကို ထုတ်ဝေလိုက်ပါပြီ၊ LLVM-based frontends များကို universal low-level intermediate code WebAssembly တွင်ရရှိနိုင်သည့် C/C++ နှင့် အခြားဘာသာစကားများဖြင့် ကုဒ်များစုစည်းနိုင်စေမည်ဖြစ်သည်။ ရလဒ်အား JavaScript ပရောဂျက်များနှင့် ပေါင်းစည်းရန်၊ ဝဘ်ဘရောက်ဆာတစ်ခုတွင် လုပ်ဆောင်ခြင်း၊ Node.js တွင် အသုံးပြုခြင်း သို့မဟုတ် wasm runtime ကို အသုံးပြု၍ စတင်သည့် သီးခြားပလပ်ဖောင်းအစုံအလင်ကို ဖန်တီးခြင်းအတွက် အသုံးပြုနိုင်သည်။ ပရောဂျက်ကုဒ်ကို MIT လိုင်စင်အောက်တွင် ဖြန့်ဝေထားသည်။ compiler သည် LLVM ပရောဂျက်မှ တိုးတက်မှုများကို အသုံးပြုပြီး Binaryen စာကြည့်တိုက်ကို WebAssembly နှင့် ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ရန် အသုံးပြုပါသည်။
Emscripten ၏ အဓိကပန်းတိုင်မှာ ဤကုဒ်ကို မူလရေးသားခဲ့သည့် ပရိုဂရမ်ဘာသာစကားကို မည်သို့ပင်ဖြစ်စေ ဝဘ်ပေါ်ရှိ ကုဒ်ကို လုပ်ဆောင်နိုင်စေမည့် ကိရိယာတစ်ခု ဖန်တီးရန်ဖြစ်သည်။ စုစည်းထားသော အပလီကေးရှင်းများသည် ပုံမှန် C နှင့် C++ libraries (libc၊ libcxx)၊ C++ extensions၊ pthreads-based multithreading၊ POSIX APIs နှင့် multimedia libraries အများအပြားသို့ ခေါ်ဆိုမှုများကို အသုံးပြုနိုင်သည်။ Web API နှင့် JavaScript ကုဒ်တို့နှင့် ပေါင်းစည်းရန်အတွက် API များကို သီးခြားစီ ပေးထားသည်။
Emscripten သည် Canvas မှတဆင့် SDL2 စာကြည့်တိုက်၏ output ကို ထုတ်လွှင့်ခြင်းအား ပံ့ပိုးပေးပြီး WebGL API မှတဆင့် OpenGL နှင့် EGL အတွက် ပံ့ပိုးမှုကိုလည်း လုပ်ဆောင်ပေးသည်၊၊ ၎င်းသည် သင့်အား graphical applications များနှင့် games များကို WebAssembly သို့ ပြောင်းနိုင်သည် (ဥပမာ၊ Qt toolkit ၏ port တစ်ခုရှိသည်၊ ဂိမ်းအင်ဂျင်များ Unreal Engine နှင့် Unit တို့ကို ပံ့ပိုးထားပြီး၊ ရုပ်ပိုင်းဆိုင်ရာ သရုပ်ဖော်အင်ဂျင် Bullet လုပ်ငန်းစဉ်များကို ပံ့ပိုးထားသည်။)
C/C++ ကုဒ်ကို စုစည်းခြင်းအပြင်၊ browser များတွင် interpreters များကို run ရန်အတွက် project များကို သီးခြားစီ တီထွင်နေပါသည်။ virtual စက်များ Lua၊ C#၊ Python၊ Ruby နှင့် Perl အတွက်။ Swift၊ Rust၊ D နှင့် Fortran အတွက် frontend များကဲ့သို့ Clang မဟုတ်သော အခြား LLVM frontend များကိုလည်း အသုံးပြုနိုင်သေးသည်။
ဗားရှင်းနံပါတ် 4.0 ၏ တာဝန်မှာ ABI အဆင့်တွင် လိုက်ဖက်ညီမှုကို ချိုးဖျက်သည့် ပြောင်းလဲမှုများ၏ နိဒါန်းကြောင့်ဖြစ်သည် (Emscripten 4.0 တွင် ပရောဂျက်ကို ပြန်လည်တည်ဆောက်သောအခါ၊ Emscripten ၏ ယခင်ဗားရှင်းများဖြင့် စုစည်းထားသော အရာဝတ္ထုဖိုင်များနှင့် စာကြည့်တိုက်များကို ပြန်လည်တည်ဆောက်ရန် လိုအပ်လိမ့်မည်)။ Emscripten 4.0 တွင် အဓိကပြောင်းလဲမှုများ-
- အဟောင်းနှင့် အသစ် ခြွင်းချက် ကိုင်တွယ်မှု ယန္တရားများကြားတွင် ရွေးချယ်ရန် ရွေးစရာ "-sWASM_LEAGCY_EXCEPTIONS" ကို ထည့်ထားသည်။ ပုံမှန်အားဖြင့်၊ ခြွင်းချက် ကိုင်တွယ်သူအသစ်များကို ကိုင်တွယ်ရန် ဘရောက်ဆာများအားလုံးသည် WebAssembly စွမ်းရည်များကို အကောင်အထည်မဖော်သောကြောင့် ယန္တရားဟောင်းကို ဆက်လက်အသုံးပြုနေပါသည်။
- Compiler-rt၊ libcxx၊ libcxxabi နှင့် libunwind အစိတ်အပိုင်းများကို LLVM 19 ဌာနခွဲသို့ အပ်ဒိတ်လုပ်ထားသည်။
- စည်းဝေးပွဲများတွင် ပံ့ပိုးထားသော Safari ဘရောက်ဆာ၏ အနည်းဆုံးဗားရှင်း (MIN_SAFARI_VERSION ဆက်တင်) ကို 14.1 မှ 15.0 သို့ တိုးမြှင့်ထားပြီး၊ ၎င်းသည် ပုံမှန်အားဖြင့် အဆင့်မြင့် WebAssembly အင်္ဂါရပ်များစွာကို အသုံးပြုရန် ဖြစ်နိုင်စေသည်-
- ရလဒ်ပိုလျှံနေချိန်တွင် ခြွင်းချက်တစ်ခုအား ပစ်ချမည့်အစား အနည်းဆုံး သို့မဟုတ် အများဆုံးဖြစ်နိုင်ချေတန်ဖိုး ( SIMD အတွက် လိုအပ်သည်) ကို ပြန်ပေးမည့် float အသစ်၏ int ပြောင်းလဲခြင်းညွှန်ကြားချက်များ (nontraping-fptoint) ကို ဖွင့်ထားသည်။
- WebAssembly နှင့် JavaScript ကုဒ်အကြား 64-bit integer တန်ဖိုးများကို လဲလှယ်ရန် BigInt အမျိုးအစားကို အသုံးပြုသည့် WASM_BIGINT ရွေးချယ်ခွင့်ကို ဖွင့်ထားသည်။
- C လုပ်ဆောင်ချက်များကို memcpy နှင့် memset ကိုအကောင်အထည်ဖော်ရန် WebAssembly ညွှန်ကြားချက် memory.copy နှင့် memory.fill ကိုအသုံးပြုသည့် BULK_MEMORY ရွေးချယ်ခွင့်ကို ဖွင့်ထားသည်။
- လမ်းကြောင်းပုံမှန်ပြုလုပ်ခြင်းကို PATH.basename() လုပ်ဆောင်ချက် (PATH.normalize()) တွင် ပိတ်ထားသည်။ 'PATH.basename("a/.")' ဟုခေါ်ဆိုခြင်းသည် ယခု "." "a" အစား 'PATH.basename("a/b/..")' သည် "a" အစား ".." သို့ ပြန်သွားပါမည်။
- -sMODULARIZE ရွေးချယ်မှုကို အသုံးပြုသည့်အခါ၊ JavaScript အတွက် WebAssembly module များနှင့် အရာဝတ္ထုများကို ဖန်တီးပြီး ပြန်ပေးသည့် စက်ရုံလုပ်ဆောင်ချက်များကို မူရင်း WASM_ASYNC_COMPILATION မုဒ်တွင် စုစည်းသောအခါ "async" အဖြစ် အလံပြထားသည်။
- "-lfoo.js" ရွေးချယ်မှုကို အသုံးပြု၍ JavaScript စာကြည့်တိုက်များကို သတ်မှတ်ရန် စွမ်းရည်ကို ထည့်သွင်းခဲ့သည်။ "--js-library" option နှင့်မတူဘဲ၊ "-L" ရွေးချယ်မှုမှတဆင့် သတ်မှတ်ထားသော လမ်းကြောင်းအားလုံးတွင် စာကြည့်တိုက်ကို ရှာဖွေသည်။
- အမှားရှာပြင်မုဒ် (-O0 သို့မဟုတ် -sASSERTIONS) တွင် လင့်ခ်ချိတ်သည့်အခါ၊ free() ခေါ်ဆိုမှုကဲ့သို့သော အမှားအယွင်းများကို နှစ်ကြိမ်တိုင်တိုင် သိရှိနိုင်စေရန် အာမခံချက်စစ်ဆေးမှုများကို ဖွင့်ထားခြင်းဖြင့် malloc လုပ်ဆောင်ချက်၏ မူရင်းအမှားအယွင်းဗားရှင်းကို ဖွင့်ထားသည်။
source: opennet.ru
