LLVM 16.0 compiler suite ကို ဖဌန့်ချိသည်။

ဖလံ့ဖဌိုသတိုသတက်မဟု ခဌောက်လအကဌာတလင်၊ LLVM 16.0 ပရောဂျက်ကို ထုတ်လလဟင့်ပဌသခဲ့သည် - GCC-သဟဇာတဖဌစ်သော ကိရိယာတန်ဆာပလာမျာသ (compilers၊ optimizers နဟင့် code generators) သည် ပရိုဂရမ်မျာသကို RISC ကဲ့သို့သော အလယ်အလတ်ဘစ်ကုဒ်အဖဌစ် စုစည်သထာသသော RISC ကဲ့သို့သော virtual ညလဟန်ကဌာသချက်မျာသ (အဆင့်နိမ့် virtual machine တစ်ခုပါရဟိသော၊ Multi-level optimization စနစ်)။ ထုတ်လုပ်လိုက်သော pseudocode ကို JIT compiler သုံသပဌီသ ပရိုဂရမ်ကို လုပ်ဆောင်သည့်အချိန်တလင် တိုက်ရိုက် စက်ညလဟန်ကဌာသချက်မျာသအဖဌစ် ပဌောင်သလဲနိုင်သည်။

Clang 16.0 တလင် အဓိကတိုသတက်မဟုမျာသ-

  • မူရင်သ C++/ObjC++ စံနဟုန်သသည် gnu++17 (ယခင်က gnu++14) ဖဌစ်ပဌီသ ဆိုလိုသည်မဟာ GNU တိုသချဲ့မဟုမျာသပါရဟိသော C++17 အင်္ဂါရပ်မျာသကို မူရင်သအတိုင်သ ပံ့ပိုသထာသသည်။ ယခင်အပဌုအမူကို ပဌန်လုပ်ရန်၊ သင်သည် "-std=gnu++14" option ကို သုံသနိုင်သည်။
  • C++20 စံနဟုန်သနဟင့် ဆက်စပ်သော အဆင့်မဌင့်အင်္ဂါရပ်မျာသကို အကောင်အထည်ဖော်ခဲ့သည်-
    • အခဌေအနေအရ အသေသအဖလဲ အထူသအဖလဲ့ဝင်လုပ်ဆောင်ချက်မျာသ၊
    • lambda လုပ်ဆောင်ချက်မျာသတလင် ဖလဲ့စည်သထာသသော နဟောင်ကဌိုသမျာသကို ဖမ်သယူခဌင်သ၊
    • တန်သတူညီမျဟရေသ အော်ပရေတာအထဲမဟာ အသုံသအနဟုန်သတလေ၊
    • အချို့သောအကဌောင်သအရာမျာသတလင် typename keyword ကို ချန်လဟပ်ရန် ရလေသချယ်ခလင့်၊
    • ကလင်သအတလင်သ စုစည်သမဟု စတင်ခဌင်သ (“Agr(val1၊ val2)”)။
  • အနာဂတ် C++ 2b စံနဟုန်သတလင် သတ်မဟတ်ထာသသော အင်္ဂါရပ်မျာသကို အကောင်အထည်ဖော်ခဲ့သည်-
    • ဒဌပ်ပေါင်သအသုံသအနဟုန်သမျာသ၏အဆုံသတလင် အညလဟန်သမျာသကို ထာသရဟိခလင့်၊
    • static operator()၊
    • static operator[]၊
    • char8_t အမျိုသအစာသနဟင့် လိုက်ဖက်မဟုရဟိမဟာ သေချာသည်၊
    • "\N{...}" တလင် အသုံသပဌုရန် ခလင့်ပဌုထာသသော စာလုံသအကလာအဝေသကို တိုသချဲ့ထာသသည်။
    • constexpr အဖဌစ် ကဌေညာထာသသော လုပ်ဆောင်ချက်မျာသတလင် "static constexpr" အဖဌစ် ကဌေညာထာသသော ကိန်သရဟင်မျာသကို အသုံသပဌုရန် စလမ်သရည်ကို ပေါင်သထည့်ထာသသည်။
  • အနာဂတ် C-standard C2x တလင် သတ်မဟတ်ထာသသော အင်္ဂါရပ်မျာသကို အကောင်အထည်ဖော်ခဲ့သည်-
    • "-Wunused-label" သတိပေသချက်ကို ပိတ်ရန်၊ "[[maybe_unused]]" ရည်ညလဟန်သချက်ကို အညလဟန်သမျာသတလင် အသုံသချရန် ခလင့်ပဌုသည်
    • ဒဌပ်ပေါင်သအသုံသအနဟုန်သမျာသအတလင်သ မည်သည့်နေရာတလင်မဆို တံဆိပ်မျာသကို ထာသရဟိခလင့်၊
    • အမျိုသအစာသနဟင့် typeof_unqual အော်ပရေတာမျာသကို ပေါင်သထည့်သည်၊
    • အမျိုသအစာသအသစ် nullptr_t နဟင့် nullptr ကိန်သသေတစ်ခုသည် မည်သည့်ညလဟန်ပဌချက်အမျိုသအစာသသို့ ပဌောင်သလဲနိုင်ပဌီသ ကိန်သပဌည့်နဟင့် ပျက်ပဌယ် * အမျိုသအစာသမျာသနဟင့် မသက်ဆိုင်သော NULL ၏ မူကလဲတစ်ခုကို ကိုယ်စာသပဌုနိုင်သော null pointers မျာသကို သတ်မဟတ်ရန် အဆက်မပဌတ်တစ်ခု။
    • C2x မုဒ်တလင်၊ ကလဲလလဲနိုင်သော အကဌောင်သပဌချက်မျာသ (variadic) ဖဌင့် va_start macro ကိုခေါ်ဆိုခဌင်သကို ခလင့်ပဌုသည်။
  • C99၊ C11 နဟင့် C17 လိုက်နာမဟုမုဒ်မျာသတလင်၊ မူရင်သရလေသချယ်စရာမျာသ "-Wimplicit-function-declaration" နဟင့် "-Wimplicit-int" တို့သည် ယခုအခါ သတိပေသချက်အစာသ အမဟာသအယလင်သတစ်ခု ဖဌစ်လာပါသည်။
  • "void *" (ဥပမာ "void func(void *p) { *p; }") ကို C++ မုဒ်တလင် သလယ်ဝိုက်သောနည်သဖဌင့် အသုံသပဌုခဌင်သသည် ယခုအခါ ISO C++၊ GCC၊ ICC နဟင့် MSVC တို့နဟင့် ဆင်တူသော အမဟာသတစ်ခုကို ထုတ်ပေသပါသည်။
  • ညလဟန်ကဌာသချက် operands အဖဌစ် bitfields ကို သတ်မဟတ်ခဌင်သ (ဥပမာ "__asm ​​​​{ mov eax, s.bf }") သည် Microsoft-style inline assembly blocks တလင် အမဟာသအယလင်သတစ်ခုကို ထုတ်ပေသပါသည်။
  • မတူညီသော module မျာသတလင် နာမည်တူသော ကလဲပဌာသသောဖလဲ့စည်သပုံမျာသနဟင့် သမဂ္ဂမျာသရဟိနေခဌင်သအတလက် အဖဌေရဟာခဌင်သမျာသကို ထပ်လောင်သထည့်သလင်သထာသသည်။
  • OpenCL နဟင့် OpenMP ပံ့ပိုသမဟုတို့နဟင့် ဆက်စပ်နေသော စလမ်သရည်မျာသကို တိုသချဲ့ထာသသည်။ OpenCL kernel အငဌင်သအခုံမျာသတလင်အသုံသပဌုသော C++ နမူနာပုံစံမျာသအတလက် ပိုမိုကောင်သမလန်သောရောဂါရဟာဖလေမဟုမျာသ။ AMDGPU အတလက် တန်သစီပိတ်ဆို့ခဌင်သကို ပိုမိုကောင်သမလန်အောင် ပံ့ပိုသပေသသည်။ nounwind attribute ကို လုပ်ဆောင်ချက်အာသလုံသတလင် သလယ်ဝိုက်စလာ ထည့်သလင်သထာသသည်။ Built-in လုပ်ဆောင်ချက်မျာသအတလက် ပိုမိုကောင်သမလန်သော ပံ့ပိုသမဟု။
  • ပျက်စီသမဟုရဟာဖလေရေသဒေတာကို သိမ်သဆည်သထာသသည့် လမ်သညလဟန်ကို သတ်မဟတ်ရန် CLANG_CRASH_DIAGNOSTICS_DIR ပတ်၀န်သကျင် variable ကို အသုံသပဌုရန် စလမ်သရည်ကို ထည့်သလင်သထာသသည်။
  • ယူနီကုဒ်ပံ့ပိုသမဟုအာသ Unicode 15.0 သတ်မဟတ်ချက်သို့ အပ်ဒိတ်လုပ်ထာသပါသည်။ အချို့သော သင်္ချာသင်္ကေတမျာသကို "₊" (ဥပမာ "double xₖ₊₁") ကဲ့သို့သော အမဟတ်အသာသမျာသတလင် ခလင့်ပဌုထာသသည်။
  • ဖလဲ့စည်သမဟုပုံစံဖိုင်အမျာသအပဌာသကို တင်ဆောင်ခဌင်သအတလက် ပံ့ပိုသမဟု ထပ်လောင်သထည့်သလင်သထာသသည် (မူလဖလဲ့စည်သပုံပုံစံဖိုင်မျာသကို ညသစလာတင်ပဌီသ၊ ထို့နောက် “--config=” အလံမဟတစ်ဆင့် သတ်မဟတ်ထာသသည့်အရာမျာသကို ယခုအကဌိမ်ပေါင်သမျာသစလာ သတ်မဟတ်နိုင်သည်)။ ဖလဲ့စည်သမဟုစနစ်ဖိုင်မျာသ၏ ပုံသေဖလင့်ခဌင်သအစီအစဥ်ကို ပဌောင်သခဲ့သည်- clang သည် ဖိုင်ကို ညသစလာဖလင့်ရန် ကဌိုသစာသသည်။ - .cfg၊ မတလေ့ပါက ဖိုင်နဟစ်ခုကို တင်ရန် ကဌိုသစာသသည်။ .cfg နဟင့် .cfg. ပုံသေဖိုင်မျာသတင်ခဌင်သအာသ ပိတ်ရန်၊ "--no-default-config" အလံကို ထည့်သလင်သထာသသည်။
  • ထပ်ခါတလဲလဲ တည်ဆောက်မဟုမျာသ သေချာစေရန်၊ SOURCE_DATE_EPOCH ပတ်၀န်သကျင် အပဌောင်သအလဲရဟိ သတ်မဟတ်ထာသသော အချိန်နဟင့် __DATE__၊ __TIME__ နဟင့် __TIME___ မက်ခရိုမျာသတလင် လက်ရဟိရက်စလဲနဟင့် အချိန်တန်ဖိုသမျာသကို အစာသထိုသနိုင်ပါသည်။
  • ကိန်သသေမျာသ၏အခဌေအနေတလင်အသုံသပဌုနိုင်သည့် built-in လုပ်ဆောင်ချက်မျာသ (builtin) ရဟိနေခဌင်သအာသ စစ်ဆေသရန်၊ macro “__has_constexpr_builtin” ကို ထည့်သလင်သထာသသည်။
  • ညဟိထာသသော coroutine frame ခလဲဝေမဟုအတလက် စုစည်သမဟုအလံအသစ် "-fcoro-aligned-allocation" ကို ပေါင်သထည့်ထာသသည်။
  • “-fstrict-flex-arrays=” အလံသည် တည်ဆောက်ပုံမျာသတလင် ပဌောင်သလလယ်ပဌင်လလယ်ရဟိသော ခင်သကျင်သမဟုဒဌပ်စင်မျာသ၏ တတိယအဆင့် အတည်ပဌုခဌင်သအတလက် အထောက်အပံ့ကို ပံ့ပိုသပေသသည် (Flexible Array Members၊ ဖလဲ့စည်သပုံ၏အဆုံသတလင် မရေမတလက်နိုင်သော အရလယ်အစာသရဟိသော ခင်သကျင်သတစ်ခု)။ တတိယအဆင့်တလင်၊ အရလယ်အစာသ "[]" (ဥပမာ၊ "int b[]") ကို ပဌောင်သလလယ်ပဌင်လလယ်ရဟိသော ခင်သကျင်သတစ်ခုအဖဌစ် သဘောထာသသော်လည်သ အရလယ်အစာသ "[0]" (ဥပမာ၊ "int b[0]")၊ မဟုတ်ပါ။
  • Standard C++ modules အတလက် single-phase compilation model ကိုဖလင့်ရန် "-fmodule-output" အလံကို ပေါင်သထည့်ထာသသည်။
  • stack frame layout နဟင့် ပဌဿနာမျာသကို ရဟာဖလေဖော်ထုတ်ရာတလင် ကူညီရန် "-Rpass-analysis=stack-frame-layout" မုဒ်ကို ထည့်သလင်သထာသသည်။
  • ရည်ညလဟန်သချက်အသစ် __attribute__((target_version("cpu_features")))) နဟင့် ရည်ညလဟန်သချက် __attribute__((target_clones("cpu_features1","cpu_features2",...)))) မဟ ပံ့ပိုသပေသထာသသည့် သီသခဌာသဗာသရဟင်သမျာသကို ရလေသချယ်ရန်အတလက် AArch64 မဟ ပံ့ပိုသပေသထာသသော အင်္ဂါရပ်မျာသ၏ ဗာသရဟင်သမျာသကို ရလေသချယ်ရန် CPU မျာသ။
  • ရောဂါရဟာဖလေရေသကိရိယာမျာသကို တိုသချဲ့ထာသသည်-
    • တစ်ခုကို တစ်ခုတည်သ-ဘစ် ရေသထိုသထာသသော bitfield သို့ သတ်မဟတ်ပေသသောအခါ သလယ်ဝိုက်သော ဖဌတ်တောက်ခဌင်သကို ရဟာဖလေရန် သတိပေသချက် "-Wsingle-bit-bitfield-constant-conversion" ကို ထပ်ထည့်ထာသသည်။
    • uninitialized constexpr variables မျာသ၏ အဖဌေရဟာခဌင်သကို ချဲ့ထလင်ထာသပါသည်။
    • လုပ်ဆောင်ချက်အမျိုသအစာသကာက်စ်တလင် ဖဌစ်နိုင်ခဌေရဟိသော ပဌဿနာမျာသကို ရဟာဖလေဖော်ထုတ်ရန် "-Wcast-function-type-strict" နဟင့် "-Wincompatible-function-pointer-types-strict" သတိပေသချက်မျာသကို ထည့်သလင်သထာသသည်။
    • အိတ်စပို့လုပ်ကလက်မျာသတလင် မဟာသယလင်သနေသော သို့မဟုတ် သီသသန့်ထာသသော မော်ဂျူသအမည်မျာသကို အသုံသပဌုခဌင်သအတလက် အဖဌေရဟာခဌင်သမျာသကို ပေါင်သထည့်ထာသသည်။
    • အဓိပ္ပါယ်ဖလင့်ဆိုချက်မျာသတလင် ပျောက်ဆုံသနေသော "အလိုအလျောက်" သော့ချက်စာလုံသမျာသကို ပိုမိုကောင်သမလန်စလာရဟာဖလေတလေ့ရဟိခဌင်သ။
    • "-Winteger-overflow"သတိပေသချက်ကို အကောင်အထည်ဖော်ခဌင်သသည် လျဟံတက်သလာသနိုင်သည့်နောက်ထပ်အခဌေအနေမျာသအတလက် စစ်ဆေသမဟုမျာသကို ထည့်သလင်သထာသသည်။
  • Loongson 64 464 ပရိုဆက်ဆာမျာသတလင်အသုံသပဌုပဌီသ MIPS နဟင့် RISC-V တို့နဟင့်ဆင်တူသော RISC ISA အသစ်ကိုအကောင်အထည်ဖော်ခဌင်သ (-march=loongarch3 သို့မဟုတ် -march=la5000) အတလက် LoongArch ညလဟန်ကဌာသချက်အစုံဗိသုကာအတလက် ပံ့ပိုသမဟုကို အကောင်အထည်ဖော်ခဲ့သည်။

LLVM 16.0 တလင် အဓိက တီထလင်ဆန်သသစ်မဟုမျာသ-

  • LLVM ကုဒ်သည် C++17 စံနဟုန်သတလင် သတ်မဟတ်ထာသသော အစိတ်အပိုင်သမျာသကို အသုံသပဌုရန် ခလင့်ပဌုထာသသည်။
  • LLVM အဆောက်အအုံအတလက် ပတ်ဝန်သကျင်လိုအပ်ချက်မျာသ တိုသမဌင့်လာခဲ့သည်။ တည်ဆောက်ရေသကိရိယာမျာသသည် ယခု C++17 စံနဟုန်သကို ပံ့ပိုသသင့်သည်။ တည်ဆောက်ရန်အတလက် သင်သည် အနည်သဆုံသ GCC 7.1၊ Clang 5.0၊ Apple Clang 10.0 သို့မဟုတ် Visual Studio 2019 16.7 လိုအပ်သည်။
  • AArch64 ဗိသုကာအတလက် နောက်ကလယ်တလင် Cortex-A715၊ Cortex-X3 နဟင့် Neoverse V2 CPU မျာသ၊ RME MEC (Memory Encryption Contexts)၊ Armv8.3 တိုသချဲ့မဟုမျာသ (Complex Number) နဟင့် Function Multi Versioning အတလက် ပံ့ပိုသမဟု ထပ်လောင်သပေသပါသည်။
  • ARM ဗိသုကာအတလက် နောက်ကလယ်တလင်၊ Armv2၊ Armv2A၊ Armv3 နဟင့် Armv3M ပစ်မဟတ်ပလပ်ဖောင်သမျာသအတလက် ပံ့ပိုသမဟုကို ရပ်ဆိုင်သလိုက်ပဌီသ၊ မဟန်ကန်သောကုဒ်၏မျိုသဆက်ကို အာမမခံနိုင်ပါ။ ရဟုပ်ထလေသသောနံပါတ်မျာသဖဌင့် လုပ်ဆောင်ရန် ညလဟန်ကဌာသချက်မျာသအတလက် ကုဒ်ထုတ်ပေသနိုင်စလမ်သကို ပေါင်သထည့်ထာသသည်။
  • X86 ဗိသုကာအတလက် နောက်ကလယ်တလင် ညလဟန်ကဌာသချက်အစုံဗိသုကာမျာသ (ISAs) AMX-FP16၊ CMPCCXADD၊ AVX-IFMA၊ AVX-VNNI-INT8၊ AVX-NE-CONVERT အတလက် ပံ့ပိုသမဟု ပေါင်သထည့်ထာသသည်။ RDMSRLIST၊ RMSRLIST နဟင့် WRMSRNS ညလဟန်ကဌာသချက်မျာသအတလက် ပံ့ပိုသမဟု ထပ်လောင်သထည့်ထာသသည်။ အကောင်အထည်ဖော်ထာသသော ရလေသစရာမျာသ "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" နဟင့် "-mcpu=grandridge"။
  • LoongArch ပလပ်ဖောင်သအတလက်တရာသဝင်ပံ့ပိုသမဟုထပ်လောင်သ။
  • MIPS၊ PowerPC နဟင့် RISC-V ဗိသုကာမျာသ အတလက် ပိုမိုကောင်သမလန်သော နောက်ခံမျာသ
  • LoongArch Architecture အတလက် 64-bit အမဟာသရဟာပဌင်ခဌင်သအတလက် ပံ့ပိုသမဟု LLDB debugger တလင် ပေါင်သထည့်ထာသသည်။ COFF အမဟာသရဟာပဌင်ခဌင်သသင်္ကေတမျာသကို ပိုမိုကောင်သမလန်စလာကိုင်တလယ်ခဌင်သ။ တင်ထာသသော Windows မော်ဂျူသမျာသစာရင်သတလင် ထပ်နေသော DLL မျာသကို စစ်ထုတ်ခဌင်သ ပေသထာသသည်။
  • Libc++ စာကဌည့်တိုက်တလင်၊ အဓိကအလုပ်သည် C++20 နဟင့် C++23 စံနဟုန်သမျာသ၏ အင်္ဂါရပ်အသစ်မျာသအတလက် ပံ့ပိုသမဟုအကောင်အထည်ဖော်ရန် အဓိကအာရုံစိုက်ခဲ့သည်။
  • LDD လင့်ခ်သည် လိပ်စာနေရာရလဟေ့ပဌောင်သခဌင်သစကင်န်ဖတ်ခဌင်သနဟင့် အပိုင်သအစပျိုသခဌင်သလုပ်ငန်သမျာသကို အပဌိုင်ပဌုလုပ်ခဌင်သဖဌင့် ချိတ်ဆက်မဟုအချိန်ကို သိသိသာသာ လျဟော့ချပေသသည်။ ZSTD အယ်လဂိုရီသမ်ကို အသုံသပဌု၍ အပိုင်သချုံ့ခဌင်သအတလက် ပံ့ပိုသမဟု ပေါင်သထည့်ထာသသည်။

source: opennet.ru

မဟတ်ချက် Add