Mold 3.0 linker ကို ထွက်ရှိထားပြီးဖြစ်ပြီး GNU linker အတွက် ပိုမိုမြန်ဆန်ပြီး ပွင့်လင်းမြင်သာသော အစားထိုးအဖြစ် အသုံးပြုနိုင်ပါသည်။ Linux-စနစ်များ။ ဤပရောဂျက်ကို LLVM lld linker ၏ရေးသားသူ Rui Ueyama မှ တီထွင်နေပါသည်။ Mold ၏ အဓိကအင်္ဂါရပ်မှာ ၎င်း၏ အလွန်မြင့်မားသော ချိတ်ဆက်မှုအမြန်နှုန်းဖြစ်ပြီး GNU gold နှင့် LLVM lld linkers များထက် သိသိသာသာ သာလွန်ကောင်းမွန်ပါသည် (Mold တွင် ချိတ်ဆက်ခြင်းသည် cp utility ဖြင့် ဖိုင်များကူးယူခြင်း၏ ထက်ဝက်သာမြန်သည်)။ ကုဒ်ကို Rust ဖြင့်ရေးသားထားပြီး MIT လိုင်စင်အောက်တွင် ဖြန့်ဝေထားသည်။
ချိတ်ဆက်ချိန်လျှော့ချခြင်းသည် debugging နှင့် ပြောင်းလဲမှုများကို စမ်းသပ်နေစဉ် executable file generation လုပ်စဉ် စောင့်ဆိုင်းချိန်ကို လျှော့ချခြင်းဖြင့် ကြီးမားသော ပရောဂျက်များ၏ အသုံးပြုနိုင်စွမ်းကို သိသိသာသာ တိုးတက်စေသည်။ Mold ဖန်တီးရန် လှုံ့ဆော်မှုသည် ကုဒ်ပြောင်းလဲမှုတစ်ခုစီပြီးနောက် ချိတ်ဆက်မှုပြီးစီးရန် စောင့်ဆိုင်းရခြင်း၏ စိတ်ပျက်မှု၊ multi-core စနစ်များပေါ်ရှိ ရှိပြီးသား linker များ၏ စွမ်းဆောင်ရည်ညံ့ဖျင်းမှုနှင့် incremental linking ကဲ့သို့သော အလွန်အမင်းရှုပ်ထွေးသော မော်ဒယ်များကို အားမကိုးဘဲ အခြေခံအားဖြင့် ကွဲပြားသော linking architecture ကို စမ်းကြည့်လိုခြင်းတို့မှ ဆင်းသက်လာသည်။
Mold သည် compiler ပြင်ဆင်ထားသော object ဖိုင်အများအပြားမှ executable ဖိုင်များကို compile လုပ်ရာတွင် မြင့်မားသောစွမ်းဆောင်ရည်ကို ရရှိစေပြီး၊ ပိုမိုမြန်ဆန်သော algorithms များကို အသုံးပြုခြင်း၊ ရရှိနိုင်သော CPU cores များတစ်လျှောက် operations များကို တက်ကြွစွာ parallelize လုပ်ခြင်းနှင့် ပိုမိုထိရောက်သော data structure များကို အသုံးပြုခြင်းတို့ဖြင့် ရရှိသည်။ ဥပမာအားဖြင့်၊ Mold သည် ဖိုင်ကူးယူခြင်းနှင့်အတူ တစ်ပြိုင်နက်တည်း intensive calculations များကို လုပ်ဆောင်ခြင်း၊ object ဖိုင်များကို memory ထဲသို့ ကြိုတင် load လုပ်ခြင်း၊ symbol resolution အတွက် fast hash table များကို အသုံးပြုခြင်း၊ သီးခြား thread တွင် relocation table များကို scan ဖတ်ခြင်းနှင့် မတူညီသောဖိုင်များတစ်လျှောက် duplicate merged section များကို deduplicate လုပ်ခြင်းအတွက် နည်းပညာတစ်ခုကို အကောင်အထည်ဖော်သည်။
Mold 3.0 branch သည် C++ (C++20) မှ Rust သို့ codebase ကို ပြန်လည်ရေးသားခြင်းအတွက် ထင်ရှားသည်။ Mold 3.0 ကို နောက်ဆုံး C++ ထုတ်ဝေမှုဖြစ်သော Mold 2.42.1 အတွက် transparent အစားထိုးအဖြစ် အသုံးပြုနိုင်ပြီး ယခင်က ရရှိနိုင်သော option များနှင့် target architectures အားလုံးကို ပံ့ပိုးပေးသည်။ Rust သို့ ကူးပြောင်းခြင်းသည် corrupt object files များကို ကိုင်တွယ်သည့်အခါတွင် ဖြစ်နိုင်ချေရှိသော ပြဿနာများမှ project ကို ကာကွယ်နိုင်စေသည် - C++ version သည် out-of-bounds access ကြောင့် crash ဖြစ်သည့်အခါတွင် Rust implementation သည် bounds check stage တွင် ရပ်တန့်သွားသည်။ Rust implementation ၏ စွမ်းဆောင်ရည်သည် C++ version နှင့် တန်းတူဖြစ်သည်။
Rust သို့ ပြောင်းရွှေ့ခြင်းအပြင်၊ 3.0 branch ကို တီထွင်ရာတွင် အဓိကရည်မှန်းချက်မှာ GNU ld နှင့် လိုက်ဖက်ညီမှုကို မြှင့်တင်ရန်နှင့် distributions များတွင် default linker အဖြစ်အသုံးပြုရန် project ကို ပြင်ဆင်ရန်ဖြစ်သည်။ Linuxတည်ဆောက်စနစ်ကို Cargo ဖြင့် အစားထိုးခဲ့ပြီး၊ စမ်းသပ်မှုစနစ်ကို ctest နေရာတွင် cargo test ဖြင့် အစားထိုးခဲ့သည်။ oneTBB library ကို dependencies မှ ဖယ်ရှားလိုက်ပါပြီ။
source: opennet.ru
