LLVM 10.0 கம்பைலர் தொகுப்பின் வெளியீடு

ஆறு மாத வளர்ச்சிக்குப் பிறகு வழங்கப்பட்டது திட்ட வெளியீடு LLVM 10.0 — GCC-இணக்கமான கருவிகள் (தொகுப்பாளர்கள், மேம்படுத்திகள் மற்றும் குறியீடு ஜெனரேட்டர்கள்), நிரல்களை RISC போன்ற மெய்நிகர் வழிமுறைகளின் இடைநிலை பிட்கோடில் தொகுத்தல் (பல-நிலை தேர்வுமுறை அமைப்புடன் குறைந்த-நிலை மெய்நிகர் இயந்திரம்). உருவாக்கப்பட்ட சூடோகோட் ஒரு JIT கம்பைலரைப் பயன்படுத்தி நிரல் செயல்படுத்தும் நேரத்தில் நேரடியாக இயந்திர வழிமுறைகளாக மாற்றப்படலாம்.

LLVM 10.0 இல் உள்ள புதிய அம்சங்களில் C++ கான்செப்ட்களுக்கான ஆதரவு, இனி Clang ஐ ஒரு தனி செயல்முறையாக இயக்காது, Windows க்கான CFG (கண்ட்ரோல் ஃப்ளோ கார்டு) காசோலைகளுக்கான ஆதரவு மற்றும் புதிய CPU திறன்களுக்கான ஆதரவு ஆகியவை அடங்கும்.

மேம்பாடுகள் கணகண வென்ற சப்தம் 10.0 இல்:

  • "க்கான ஆதரவு சேர்க்கப்பட்டதுகருத்துக்கள்", C++ டெம்ப்ளேட் நீட்டிப்பு, அடுத்த தரநிலையில் சேர்க்கப்படும், C++2a (-std=c++2a கொடியால் இயக்கப்பட்டது) குறியீட்டுப் பெயர்.
    வார்ப்புரு அளவுரு தேவைகளின் தொகுப்பை வரையறுக்க கருத்துக்கள் உங்களை அனுமதிக்கின்றன, அவை தொகுக்கும் நேரத்தில், டெம்ப்ளேட் அளவுருக்களாக ஏற்றுக்கொள்ளக்கூடிய வாதங்களின் தொகுப்பைக் கட்டுப்படுத்துகின்றன. டெம்ப்ளேட்டிற்குள் பயன்படுத்தப்படும் தரவு வகைகளின் பண்புகள் மற்றும் உள்ளீட்டு அளவுருக்களின் தரவு வகை பண்புகளுக்கு இடையே உள்ள தர்க்கரீதியான முரண்பாடுகளைத் தவிர்க்க கருத்துகள் பயன்படுத்தப்படலாம்.

    டெம்ப்ளேட்
    கருத்து சமத்துவம் ஒப்பிடக்கூடியது = தேவை(T a, T b) {
    { a == b } -> std:: boolean;
    { a != b } -> std:: boolean;
    };

  • இயல்பாக, ஒரு தனி செயல்முறையின் துவக்கம் (“clang -cc1”) அதில் தொகுத்தல் செய்யப்படுகிறது. தொகுத்தல் இப்போது முக்கிய செயல்பாட்டில் செய்யப்படுகிறது, மேலும் பழைய நடத்தையை மீட்டெடுக்க "-fno-integrated-cc1" விருப்பத்தைப் பயன்படுத்தலாம்.
  • புதிய கண்டறியும் முறைகள்:
    • "-Wc99-designator" மற்றும் "-Wreorder-init-list" ஆகியவை C99 இல் சரியாக இருந்தாலும் C++99 இல் இல்லாத சந்தர்ப்பங்களில் C20 துவக்கிகளை C++ பயன்முறையில் பயன்படுத்துவதற்கு எதிராக எச்சரிக்கின்றன.
    • "-Wsizeof-array-div" - "int arr[10] போன்ற சூழ்நிலைகளைப் பிடிக்கிறது; …sizeof(arr) / sizeof(short)…” (“sizeof(arr) / sizeof(int)” ஆக இருக்க வேண்டும்).
    • "-Wxor-used-as-po" - செயல்பாட்டில் "^" (xor) ஆபரேட்டரைப் பயன்படுத்துவது போன்ற கட்டுமானங்களைப் பயன்படுத்துவதற்கு எதிராக எச்சரிக்கிறது, இது அதிவேகத்துடன் குழப்பமடையலாம் (2^16).
    • "-Wfinal-dtor-non-final-class" - "இறுதி" குறிப்பால் குறிக்கப்படாத வகுப்புகள் பற்றி எச்சரிக்கிறது, ஆனால் "இறுதி" பண்புடன் ஒரு அழிப்பான் உள்ளது.
    • "-Wtautological-bitwise-compare" என்பது ஒரு பிட்வைஸ் செயல்பாடு மற்றும் மாறிலி ஆகியவற்றுக்கு இடையேயான டாட்டாலாஜிக்கல் ஒப்பீடுகளைக் கண்டறிவதற்கான எச்சரிக்கைகளின் குழுவாகும், மேலும் பிட்வைஸ் அல்லது செயல்பாடு எதிர்மறை எண்ணுக்குப் பயன்படுத்தப்படும் எப்போதும் உண்மையான ஒப்பீடுகளைக் கண்டறிவதற்கான ஒரு குழுவாகும்.
    • "-Wbitwise-conditional-parentheses" லாஜிக்கல் ஆபரேட்டர்கள் AND (&) மற்றும் OR (|) ஆகியவற்றை நிபந்தனை ஆபரேட்டருடன் (?:) கலக்கும்போது ஏற்படும் சிக்கல்களை எச்சரிக்கிறது.
    • “-Wmisleading-indentation” என்பது GCC இலிருந்து அதே பெயரின் காசோலையின் அனலாக் ஆகும், இது உள்தள்ளப்பட்ட வெளிப்பாடுகள் if/else/for/while பிளாக்கின் ஒரு பகுதியாக இருந்தால் எச்சரிக்கிறது, ஆனால் உண்மையில் அவை இந்தத் தொகுதியில் சேர்க்கப்படவில்லை. .
    • “-வெக்ஸ்ட்ரா” என்பதைக் குறிப்பிடும்போது, ​​“-Wdeprecated-copy” காசோலை இயக்கப்பட்டு, கன்ஸ்ட்ரக்டர்களின் பயன்பாடு குறித்து எச்சரிக்கிறது.
      வெளிப்படையான அழிப்பான் வரையறையுடன் வகுப்புகளில் "நகர்த்து" மற்றும் "நகல்".

    • "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-analysis" காசோலைகள் விரிவாக்கப்பட்டுள்ளன.
    • "-Wbitwise-op-parentheses" மற்றும் "-Wlogical-op-parentheses" காசோலைகள் முன்னிருப்பாக முடக்கப்பட்டுள்ளன.
  • C மற்றும் C++ குறியீட்டில், சுட்டி எண்கணித செயல்பாடுகள் அணிவரிசைகளில் மட்டுமே அனுமதிக்கப்படும். "-fsanitize=pointer-overflow" பயன்முறையில் உள்ள வரையறுக்கப்படாத நடத்தை சானிடைசர் இப்போது பூஜ்ஜியமற்ற ஆஃப்செட்டை பூஜ்ய சுட்டியில் சேர்ப்பது அல்லது பூஜ்யமற்ற சுட்டியிலிருந்து முழு எண்ணைக் கழிக்கும்போது பூஜ்ய சுட்டியை உருவாக்குவது போன்ற நிகழ்வுகளைப் பிடிக்கிறது.
  • "-fsanitize=immplicit-conversion" (மறைமுகமான மாற்று சுத்திகரிப்பான்) பயன்முறையானது "int" வகையை விட சற்று சிறிய அளவு கொண்ட வகைகளுக்கு அதிகரிப்பு மற்றும் குறைப்பு செயல்பாடுகளில் உள்ள சிக்கல்களை அடையாளம் காண மாற்றியமைக்கப்படுகிறது.
  • x86 இலக்கு கட்டமைப்புகளை தேர்ந்தெடுக்கும் போது "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" மற்றும் "-march=cooperlake" முன்னிருப்பாக வெக்டரைஸ் செய்யப்பட்ட தி குறியீடு 512-பிட் zmm பதிவேடுகளைப் பயன்படுத்துவதை நிறுத்திவிட்டது, மூலக் குறியீட்டில் அவற்றின் நேரடிக் குறிப்பைத் தவிர. காரணம், 512-பிட் செயல்பாடுகளைச் செய்யும்போது CPU அதிர்வெண் குறைகிறது, இது ஒட்டுமொத்த செயல்திறனை எதிர்மறையாக பாதிக்கும். புதிய நடத்தையை மாற்ற, "-mprefer-vector-width=512" விருப்பம் வழங்கப்படுகிறது.
  • "-flax-vector-conversions" கொடியின் நடத்தை GCC போன்றது: முழு எண் மற்றும் மிதக்கும்-புள்ளி திசையன்களுக்கு இடையே உள்ள மறைமுக திசையன் பிட் மாற்றங்கள் தடைசெய்யப்பட்டுள்ளன. இந்த வரம்பை அகற்ற, கொடியைப் பயன்படுத்த பரிந்துரைக்கப்படுகிறது
    "-flax-vector-conversions=all" இது இயல்புநிலை.

  • Octeon குடும்பத்தின் MIPS CPUகளுக்கான மேம்படுத்தப்பட்ட ஆதரவு. செல்லுபடியாகும் CPU வகைகளின் பட்டியலில் "octeon+" சேர்க்கப்பட்டது.
  • WebAssembly இடைநிலைக் குறியீட்டில் அசெம்பிள் செய்யும் போது, ​​கணினியில் இருந்தால், வாஸ்ம்-ஆப்ட் ஆப்டிமைசர் தானாகவே அழைக்கப்படுகிறது.
  • RISC-V கட்டமைப்பை அடிப்படையாகக் கொண்ட அமைப்புகளுக்கு, அசெம்பிளர் இன்லைன் செருகல்களின் நிபந்தனைத் தொகுதிகளில் மிதக்கும் புள்ளி மதிப்புகளைச் சேமிக்கும் பதிவேடுகளின் பயன்பாடு அனுமதிக்கப்படுகிறது.
  • புதிய கம்பைலர் கொடிகள் சேர்க்கப்பட்டது: "__GNUC__" மற்றும் ஒத்த மேக்ரோக்களுக்கான பதிப்பு மதிப்பை அமைக்க "-fgnuc-version"; "-fmacro-prefix-map=OLD=NEW", "__FILE__" போன்ற மேக்ரோக்களில் OLD என்ற கோப்பக முன்னொட்டிற்குப் பதிலாக புதியது; "-fpatchable-function-entry=N[,M]" செயல்பாடு நுழைவு புள்ளிக்கு முன்னும் பின்னும் குறிப்பிட்ட எண்ணிக்கையிலான NOP வழிமுறைகளை உருவாக்க. RISC-Vக்கு
    "-ffixed-xX", "-mcmodel=medany" மற்றும் "-mcmodel=medlow" கொடிகளுக்கான ஆதரவைச் சேர்த்தது.

  • '__attribute__((இலக்கு(“கிளை-பாதுகாப்பு=..."))) பண்புக்கூறுக்கான ஆதரவு சேர்க்கப்பட்டது, இதன் விளைவு விருப்பத்தைப் போன்றது கிளை-பாதுகாப்பு.
  • விண்டோஸ் இயங்குதளத்தில், "-cfguard" கொடியைக் குறிப்பிடும்போது, ​​மறைமுக செயல்பாட்டு அழைப்புகளுக்கான செயலாக்க ஓட்ட ஒருமைப்பாடு காசோலைகளை (கட்டுப்பாட்டு ஓட்டம் காவலர்) மாற்றியமைக்கப்படுகிறது. காசோலை மாற்றீட்டை முடக்க, நீங்கள் “-cfguard-nochecks” கொடி அல்லது “__declspec(guard(nocf))” மாற்றியைப் பயன்படுத்தலாம்.
  • gnu_inline பண்புக்கூறு "வெளிப்புற" முக்கிய வார்த்தை இல்லாமல் பயன்படுத்தப்படும் சந்தர்ப்பங்களில் GCC போன்றது.
  • OpenCL மற்றும் CUDA ஆதரவுடன் தொடர்புடைய திறன்கள் விரிவாக்கப்பட்டுள்ளன. புதிய OpenMP 5.0 அம்சங்களுக்கான ஆதரவு சேர்க்கப்பட்டது.
  • க்ளாங்-வடிவ பயன்பாட்டில் ஒரு நிலையான விருப்பம் சேர்க்கப்பட்டுள்ளது, இது குறியீட்டை பாகுபடுத்தும் மற்றும் வடிவமைக்கும் போது பயன்படுத்தப்படும் C++ தரநிலையின் பதிப்பைத் தீர்மானிக்க உங்களை அனுமதிக்கிறது (சமீபத்திய, ஆட்டோ, c++03, c++11, c++14, c++17, c++20 ).
  • நிலையான பகுப்பாய்வியில் புதிய காசோலைகள் சேர்க்கப்பட்டுள்ளன: alpha.cplusplus.PlacementNew, போதுமான சேமிப்பிடம் உள்ளதா என்பதைத் தீர்மானிக்க, Fuchsia.HandleChecker, Fuchsia கையாளுபவர்கள் தொடர்பான கசிவுகளைக் கண்டறிய, security.insecureAPI.decodeValueOfObjCType ஐப் பயன்படுத்தும் போது சாத்தியமான இடையக நிரம்பி வழிகிறது. :at:] .
  • Undefined Behavior Sanitizer (UBSan) ஆனது பூஜ்ஜியமற்ற ஆஃப்செட்களை NULL சுட்டிகளுக்குப் பயன்படுத்துவதையோ அல்லது NULL பாயிண்டர் ஆஃப்செட்டைச் சேர்ப்பதையோ பிடிக்க அதன் சுட்டி வழிதல் காசோலைகளை விரிவுபடுத்தியுள்ளது.
  • லிண்டர் கணகண வென்ற சப்தம் நேர்த்தியாக சேர்க்கப்பட்டது புதிய காசோலைகளின் பெரும் பகுதி.

முக்கிய புதுமைகள் LLVM 10.0:

  • கட்டமைப்பிற்கு கற்பிப்பவர் புதிய இடைச்செயல்முறை மேம்படுத்தல்கள் மற்றும் பகுப்பாய்விகள் சேர்க்கப்பட்டுள்ளன. 19 பண்புக்கூறுகள் 12 LLVM IR மற்றும் உயிரோட்டம் போன்ற 12 சுருக்கமான பண்புக்கூறுகள் உட்பட 7 வெவ்வேறு பண்புகளின் நிலை கணிக்கப்பட்டுள்ளது.
  • கம்பைலரில் கட்டமைக்கப்பட்ட புதிய மேட்ரிக்ஸ் கணித செயல்பாடுகளைச் சேர்த்தது (உள்ளார்ந்தவை), அவை தொகுப்பின் போது திறமையான திசையன் வழிமுறைகளால் மாற்றப்படுகின்றன.
  • X86, AArch64, ARM, SystemZ, MIPS, AMDGPU மற்றும் PowerPC கட்டமைப்புகளுக்கான பின்தளங்களில் பல மேம்பாடுகள் செய்யப்பட்டுள்ளன. CPU ஆதரவு சேர்க்கப்பட்டது
    கார்டெக்ஸ்-ஏ65, கார்டெக்ஸ்-ஏ65ஏஇ, நியோவர்ஸ் இ1 மற்றும் நியோவர்ஸ் என்1. ARMv8.1-M க்கு, குறியீடு உருவாக்க செயல்முறை உகந்ததாக உள்ளது (எடுத்துக்காட்டாக, குறைந்தபட்ச மேல்நிலை கொண்ட சுழல்களுக்கான ஆதரவு தோன்றியது) மற்றும் MVE நீட்டிப்பைப் பயன்படுத்தி ஆட்டோவெக்டரைசேஷனுக்கான ஆதரவு சேர்க்கப்பட்டுள்ளது. மேம்படுத்தப்பட்ட CPU MIPS Octeon ஆதரவு. PowerPC க்கு, MASSV (கணித முடுக்கம் துணை அமைப்பு) நூலகத்தைப் பயன்படுத்தி கணித துணை நிரல்களின் வெக்டரைசேஷன் இயக்கப்பட்டது, குறியீடு உருவாக்கம் மேம்படுத்தப்பட்டுள்ளது, மேலும் லூப்களில் இருந்து நினைவக அணுகல் உகந்ததாக உள்ளது. x86க்கு, v2i32, v4i16, v2i16, v8i8, v4i8 மற்றும் v2i8 ஆகிய திசையன் வகைகளின் கையாளுதல் மாற்றப்பட்டுள்ளது.

  • WebAssemblyக்கான மேம்படுத்தப்பட்ட குறியீடு ஜெனரேட்டர். TLS (த்ரெட்-லோக்கல் ஸ்டோரேஜ்) மற்றும் atomic.fence வழிமுறைகளுக்கான ஆதரவு சேர்க்கப்பட்டது. SIMD ஆதரவு கணிசமாக விரிவாக்கப்பட்டுள்ளது. WebAssembly ஆப்ஜெக்ட் கோப்புகள் இப்போது பல மதிப்புள்ள செயல்பாட்டு கையொப்பங்களைப் பயன்படுத்தும் திறனைக் கொண்டுள்ளன.
  • சுழல்களைச் செயலாக்கும்போது பகுப்பாய்வி பயன்படுத்தப்படுகிறது நினைவகம் எஸ்எஸ்ஏ, இது வெவ்வேறு நினைவக செயல்பாடுகளுக்கு இடையிலான சார்புகளை வரையறுக்க உங்களை அனுமதிக்கிறது. MemorySSA ஆனது தொகுத்தல் மற்றும் செயல்படுத்தும் நேரத்தை குறைக்கலாம் அல்லது AliasSetTracker க்கு பதிலாக செயல்திறன் குறையாமல் பயன்படுத்தலாம்.
  • LLDB பிழைத்திருத்தி DWARF v5 வடிவமைப்பிற்கான ஆதரவை கணிசமாக மேம்படுத்தியுள்ளது. MinGW உடன் கட்டிடத்திற்கான மேம்படுத்தப்பட்ட ஆதரவு
    மற்றும் ARM மற்றும் ARM64 கட்டமைப்புகளுக்கான விண்டோஸ் எக்ஸிகியூட்டபிள்களை பிழைத்திருத்துவதற்கான ஆரம்ப திறனைச் சேர்த்தது. தாவலை அழுத்துவதன் மூலம் உள்ளீட்டைத் தானாக நிறைவு செய்யும் போது வழங்கப்படும் விருப்பங்களின் விளக்கங்கள் சேர்க்கப்பட்டன.

  • விரிவாக்கப்பட்டது எல்எல்டி இணைப்பான் திறன்கள். ELF வடிவமைப்பிற்கான மேம்படுத்தப்பட்ட ஆதரவு, GNU இணைப்பாளருடன் குளோப் டெம்ப்ளேட்டுகளின் முழு இணக்கத்தன்மையை உறுதி செய்தல், சுருக்கப்பட்ட பிழைத்திருத்த பிரிவுகள் ".zdebug"க்கான ஆதரவைச் சேர்ப்பது, .note.gnu.property பிரிவை வரையறுக்க PT_GNU_PROPERTY சொத்தை சேர்த்தல் (எதிர்காலத்தில் பயன்படுத்தலாம் லினக்ஸ் கர்னல்கள்),
    "-z noseparate-code", "-z தனி-குறியீடு" மற்றும் "-z தனி-ஏற்றக்கூடிய-பிரிவுகள்" முறைகள் செயல்படுத்தப்பட்டுள்ளன. MinGW மற்றும் WebAssembly க்கான மேம்படுத்தப்பட்ட ஆதரவு.

ஆதாரம்: opennet.ru

கருத்தைச் சேர்