LLVM ပရောဂျက်သည် C++ တလင် ကဌာသခံဘေသကင်သသော ကိုင်တလယ်မဟုကို ဖော်ဆောင်သည်။

LLVM ပရောဂျက်၏ developer မျာသသည် mission-critical C++ ပရောဂျက်မျာသ၏ လုံခဌုံရေသကို အာသကောင်သလာစေရန်နဟင့် ကဌာသခံ overruns ကဌောင့်ဖဌစ်ရသည့် အမဟာသမျာသကို ဖယ်ရဟာသပစ်ရန် နည်သလမ်သမျာသ ပံ့ပိုသပေသရန်အတလက် အပဌောင်သအလဲမျာသစလာကို အဆိုပဌုထာသသည်။ အလုပ်သည် နယ်ပယ်နဟစ်ခုကို အာရုံစိုက်သည်- buffers မျာသနဟင့် ဘေသကင်သစလာ အလုပ်လုပ်နိုင်စေမည့် ဖလံ့ဖဌိုသတိုသတက်မဟုပုံစံကို ပေသအပ်ခဌင်သနဟင့် လုပ်ဆောင်ချက်မျာသ၏ libc++ စံပဌစာကဌည့်တိုက်၏ လုံခဌုံရေသကို ခိုင်မာစေရန် လုပ်ဆောင်ခဌင်သ ဖဌစ်သည်။

C++ အတလက် အဆိုပဌုထာသသော ဘေသကင်သသော ပရိုဂရမ်သမင်သပုံစံသည် စံပဌစာကဌည့်တိုက်မဟ ပံ့ပိုသပေသထာသသည့် အတန်သမျာသကို အသုံသပဌုရန်အတလက် buffers မျာသနဟင့် အလုပ်လုပ်သောအခါတလင် မပါရဟိသော pointers မျာသကို ကဌိုသကိုင်ခဌယ်လဟယ်မည့်အစာသ အသုံသပဌုရန်ဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ classes std::array, std::vector နဟင့် std::span တို့ကို အသုံသပဌုရန် အဆိုပဌုထာသပဌီသ၊ ၎င်သသည် ကန့်သတ်ခလဲဝေထာသသော မမ်မိုရီပဌင်ပရဟိ အချိန်စစ်ဆေသချက်ဖဌင့် ပေါင်သထည့်မည်ဖဌစ်သည်။

clang တလင် အန္တရာယ်ရဟိသော ပရိုဂရမ်ရေသသာသခဌင်သအလေ့အကျင့်မျာသကို တိုက်ဖျက်ရန် "cppcoreguidelines-pro-bounds-pointer-arithmetic" အလံကို အသုံသပဌုသောအခါတလင် ပေါ်လာမည့် ပံ့ပိုသမဟု အလံကို အသုံသပဌုသည့်အခါ clang-tidy ၏ linter သတိပေသချက်မျာသနဟင့် ဆင်တူသည့် ညလဟန်ကိန်သဂဏန်သသင်္ချာလုပ်ငန်သအာသလုံသအတလက် compiler သတိပေသချက်မျာသကို ထုတ်ပဌန်ရန် အဆိုပဌုထာသသည်။ LLVM 16 ထုတ်ဝေမဟု။ ထိုသို့သောသတိပေသချက်မျာသကိုဖလင့်ရန်၊ ပုံမဟန်အာသဖဌင့် မတက်ကဌလသော သီသခဌာသအလံကို clang သို့ ပေါင်သထည့်မည်ဖဌစ်သည်။

၎င်သသည် libc++ တလင် ရလေသချယ်နိုင်သော မာကျောသော ကာကလယ်မဟုမုဒ်ကို အကောင်အထည်ဖော်ရန် စီစဉ်ထာသပဌီသ ၎င်သကို ဖလင့်လိုက်သောအခါတလင်၊ runtime တလင် သတ်မဟတ်ထာသခဌင်သမရဟိသော အပဌုအမူအချို့ကို ဖဌစ်ပေါ်စေသည့် အခဌေအနေအချို့ကို ဖမ်သစာသနိုင်မည်ဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ std::span နဟင့် std::vector အတန်သမျာသတလင်၊ ပဌင်ပသို့ဝင်ရောက်ခလင့်ကို စောင့်ကဌည့်မည်ဖဌစ်ပဌီသ ယင်သအခဌေအနေတလင် ပရိုဂရမ်သည် ပျက်စီသသလာသမည်ဖဌစ်သည်။ သတ်မဟတ်မထာသသော အမူအကျင့်မျာသကို ကိုင်တလယ်နည်သရလေသချယ်မဟုသည် စာကဌည့်တိုက်၏ ဆော့ဖ်ဝဲရေသသာသသူမျာသနဟင့် သက်ဆိုင်သောကဌောင့်၊ ထိုသို့သောပဌောင်သလဲမဟုမျာသကို ထည့်သလင်သခဌင်သသည် libc++ စံနဟုန်သမျာသနဟင့် လိုက်လျောညီထလေရဟိစေမည်ဟု ဆော့ဖ်ဝဲအင်ဂျင်နီယာမျာသက ယုံကဌည်ကဌသည်။ ထလက်ရန်အစီအစဉ်။

libc++ တလင် runtime checks မျာသကို တစ်ညသချင်သပါဝင်နိုင်သည့် အမျိုသအစာသမျာသ ခလဲခဌာသရန် စီစဉ်ထာသသည်။ ပိုမိုရဟုပ်ထလေသသောလုပ်ဆောင်မဟုမျာသ သို့မဟုတ် ABI အပဌောင်သအလဲမျာသကို မဖဌစ်ပေါ်စေသည့် အကဌံပဌုချက်အချို့ကို libc++ ၏ဘေသကင်သသောမုဒ်တလင် အကောင်အထည်ဖော်ပဌီသဖဌစ်သည်။

ထို့အပဌင်၊ ကလန်တိန်နာပေါ်ရဟိ ညလဟန်ပဌချက်မျာသနဟင့် ကိန်သရဟင်မျာသကို အစာသထိုသရန်နဟင့် ကလန်တိန်နာကို တိုက်ရိုက်မအစာသထိုသနိုင်သည့် အခဌေအနေမျာသတလင် အစာသထိုသကိုင်တလယ်သူမျာသကို အသုံသပဌုခလင့်ပေသကာ ကုဒ်ကိုပဌင်ရန်အတလက် ကိရိယာတန်ဆာပလာအစုံကို ပဌင်ဆင်ရန် စီစဉ်ထာသသည် (ဥပမာ၊ "if (array_pointer)" construct ကို “if (span.data ()”) သို့ ပဌောင်သနိုင်သည်။ ချိန်ညဟိချက်မျာသကို local variable မျာသတလင်သာမက pointers မျာသဖဌင့် parameters မျာသကို ရိုက်ထည့်ရန်လည်သ အသုံသပဌုနိုင်မည်ဖဌစ်သည်။

source: opennet.ru

မဟတ်ချက် Add