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

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

LLVM 9.0 இன் புதிய அம்சங்களில் இலக்கு RISC-V இயங்குதளத்தில் இருந்து சோதனை வடிவமைப்பு குறியை அகற்றுதல், OpenCL க்கான C++ ஆதரவு, LLD இல் ஒரு நிரலை மாறும் ஏற்றப்பட்ட பகுதிகளாகப் பிரிக்கும் திறன் மற்றும் செயல்படுத்தல் ஆகியவை அடங்கும்.asm goto", லினக்ஸ் கர்னல் குறியீட்டில் பயன்படுத்தப்படுகிறது. libc++ WASI (WebAssembly System Interface)க்கான ஆதரவைச் சேர்த்தது, மேலும் LLD ஆனது WebAssembly டைனமிக் இணைப்பிற்கான ஆரம்ப ஆதரவைச் சேர்த்தது.

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

  • சேர்க்கப்பட்டது GCC-குறிப்பிட்ட வெளிப்பாட்டின் செயல்படுத்தல் "asm goto“, இது ஒரு அசெம்ப்ளர் இன்லைன் பிளாக்கில் இருந்து சி குறியீட்டில் உள்ள லேபிளுக்கு செல்ல உங்களை அனுமதிக்கிறது. x86_64 கட்டமைப்பைக் கொண்ட கணினிகளில் Clang ஐப் பயன்படுத்தி “CONFIG_JUMP_LABEL=y” பயன்முறையில் லினக்ஸ் கர்னலை உருவாக்க இந்த அம்சம் தேவை. முந்தைய வெளியீடுகளில் சேர்க்கப்பட்ட மாற்றங்களை கணக்கில் எடுத்துக்கொண்டால், Linux கர்னல் இப்போது x86_64 கட்டமைப்பிற்காக Clang இல் உருவாக்கப்படலாம் (முன்பு கை, aarch64, ppc32, ppc64le மற்றும் mips கட்டமைப்புகள் மட்டுமே ஆதரிக்கப்பட்டது). மேலும், ஆண்ட்ராய்டு மற்றும் ChromeOS திட்டப்பணிகள் ஏற்கனவே கர்னல் கட்டமைப்பிற்கு Clang ஐப் பயன்படுத்துவதற்கு மாற்றப்பட்டுள்ளன, மேலும் Google அதன் உற்பத்தி Linux அமைப்புகளுக்கான கர்னல்களை உருவாக்குவதற்கான முக்கிய தளமாக Clang ஐ சோதிக்கிறது. எதிர்காலத்தில், எல்எல்டி, llvm-objcopy, llvm-ar, llvm-nm மற்றும் llvm-objdump உள்ளிட்ட கர்னல் உருவாக்க செயல்முறையில் மற்ற LLVM கூறுகள் பயன்படுத்தப்படலாம்;
  • OpenCL இல் C++17 ஐப் பயன்படுத்துவதற்கான சோதனை ஆதரவு சேர்க்கப்பட்டது. குறிப்பிட்ட அம்சங்களில் முகவரி இட பண்புகளுக்கான ஆதரவு, டைப் காஸ்டிங் ஆபரேட்டர்கள் மூலம் முகவரி இட மாற்றத்தைத் தடுப்பது, சிக்கான OpenCL இல் உள்ள வெக்டார் வகைகளை வழங்குதல், படங்கள், நிகழ்வுகள், சேனல்கள் போன்றவற்றுக்கான குறிப்பிட்ட OpenCL வகைகளின் இருப்பு ஆகியவை அடங்கும்.
  • புதிய கம்பைலர் கொடிகள் “-ftime-trace” மற்றும் “-ftime-trace-granularity=N” ஆகியவை முன்பக்கத்தின் பல்வேறு நிலைகள் (பாகுபடுத்துதல், துவக்குதல்) மற்றும் பின்தளத்தில் (உகப்பாக்கம் நிலைகள்) செயல்படுத்தும் நேரம் குறித்த அறிக்கையை உருவாக்க சேர்க்கப்பட்டது. அறிக்கை json வடிவத்தில் சேமிக்கப்பட்டது, chrome://tracing மற்றும் speedscope.app உடன் இணக்கமானது;
  • விஷுவல் ஸ்டுடியோ சூழலில் நினைவக நுகர்வைக் கண்காணிக்க உங்களை அனுமதிக்கும் “__declspec(allocator)” விவரக்குறிப்பு மற்றும் அதனுடன் இணைந்த பிழைத்திருத்தத் தகவல்களின் செயலாக்கம் சேர்க்கப்பட்டது;
  • C மொழிக்கு, "__FILE_NAME__" மேக்ரோவிற்கு ஆதரவு சேர்க்கப்பட்டுள்ளது, இது "__FILE__" மேக்ரோவை ஒத்திருக்கிறது, ஆனால் முழு பாதை இல்லாமல் கோப்பு பெயரை மட்டுமே கொண்டுள்ளது;
  • அளவுரு மற்றும் வாத வடிவங்கள், குறிப்பு வகைகள், திரும்பும் வகை அனுமானம், பொருள்கள், தானாக உருவாக்கப்பட்ட செயல்பாடுகள், உள்ளமைக்கப்பட்ட ஆபரேட்டர்கள் மற்றும் பலவற்றை உள்ளடக்கிய பல்வேறு C++ அம்சங்களை உள்ளடக்கும் வகையில் முகவரி இட பண்புகளுக்கான ஆதரவை C++ விரிவுபடுத்தியுள்ளது.
  • OpenCL, OpenMP மற்றும் CUDA ஆகியவற்றிற்கான ஆதரவுடன் தொடர்புடைய திறன்கள் விரிவாக்கப்பட்டுள்ளன. உள்ளமைக்கப்பட்ட OpenCL செயல்பாடுகளை மறைமுகமாகச் சேர்ப்பதற்கான ஆரம்ப ஆதரவும் இதில் அடங்கும் ("-fdeclare-opencl-builtins" கொடி சேர்க்கப்பட்டுள்ளது), cl_arm_integer_dot_product நீட்டிப்பு செயல்படுத்தப்பட்டது மற்றும் கண்டறியும் கருவிகள் விரிவாக்கப்பட்டுள்ளன;
  • நிலையான பகுப்பாய்வியின் பணி மேம்படுத்தப்பட்டுள்ளது மற்றும் நிலையான பகுப்பாய்வு செய்வதற்கான ஆவணங்கள் சேர்க்கப்பட்டுள்ளன. கிடைக்கக்கூடிய செக்கர் தொகுதிகள் மற்றும் ஆதரிக்கப்படும் விருப்பங்களைக் காட்ட கொடிகள் சேர்க்கப்பட்டன (“-பகுப்பாய்வு-செக்கர்[-விருப்பம்]-உதவி”, “-பகுப்பாய்வு-செக்கர்[-விருப்பம்]-உதவி-ஆல்பா” மற்றும் “-பகுப்பாய்வு-செக்கர்[-விருப்பம்]-உதவி ”-டெவலப்பர்”). எச்சரிக்கைகளை பிழையாகக் கருத "-analyzer-werror" கொடி சேர்க்கப்பட்டது.
    புதிய சரிபார்ப்பு முறைகள் சேர்க்கப்பட்டன:

    • பாதுகாப்பு.inecureAPI.DeprecatedOrUnsafeBufferHandling இடையகங்களுடன் பணிபுரிவதற்கான பாதுகாப்பற்ற நடைமுறைகளை அடையாளம் காண;
    • osx.MIGChecker MIG (Mach Interface Generator) அழைப்பு விதிகளின் மீறல்களைத் தேட;
    • optin.osx.OSObjectCStyleCast தவறான XNU libkern பொருள் மாற்றங்களைக் கண்டறிய;
    • apiModeling.llvm, LLVM கோட்பேஸில் உள்ள பிழைகளைக் கண்டறிவதற்கான மாடலிங் சோதனை செயல்பாடுகளின் தொகுப்புடன்;
    • துவக்கப்படாத C++ பொருட்களைச் சரிபார்ப்பதற்கான நிலைப்படுத்தப்பட்ட குறியீடு (optin.cplusplus தொகுப்பில் உள்ள UnininitializedObject);
  • clang-format utility ஆனது C# மொழியில் குறியீட்டை வடிவமைப்பதற்கான ஆதரவைச் சேர்த்தது மற்றும் Microsoft பயன்படுத்தும் குறியீடு வடிவமைப்பு பாணிக்கான ஆதரவை வழங்குகிறது;
  • clang-cl, விஷுவல் ஸ்டுடியோவில் சேர்க்கப்பட்டுள்ள cl.exe கம்பைலருடன் விருப்ப-நிலை இணக்கத்தன்மையை வழங்கும் ஒரு மாற்று கட்டளை-வரி இடைமுகம், இல்லாத கோப்புகளை கட்டளை-வரி விருப்பங்களாகக் கருதுவதற்கும் அதற்கான எச்சரிக்கையைக் காட்டுவதற்கும் ஹியூரிஸ்டிக்ஸைச் சேர்த்தது (எடுத்துக்காட்டாக, "clang-cl /diagnostic :caret /c test.cc" இயங்கும் போது);
  • ஓபன்எம்பி ஏபிஐக்கு குறிப்பிட்ட கூடுதல் காசோலைகள் உட்பட, புதிய காசோலைகளின் பெரும்பகுதி லிண்டர் கிளாங்-டிடியில் சேர்க்கப்பட்டுள்ளது;
  • விரிவாக்கப்பட்டது சேவையக திறன்கள் முழங்காலில் (கிளாங் சர்வர்), இதில் பின்னணி குறியீட்டு உருவாக்க முறை இயல்பாகவே செயல்படுத்தப்படுகிறது, குறியீட்டுடன் கூடிய சூழல் சார்ந்த செயல்களுக்கான ஆதரவு சேர்க்கப்பட்டுள்ளது (மாறி மீட்டெடுப்பு, தானியங்கு மற்றும் மேக்ரோ வரையறைகளின் விரிவாக்கம், தப்பிக்காத சரங்களை மாற்றியமைத்தல்), காண்பிக்கும் திறன் Clang-tidy இலிருந்து எச்சரிக்கைகள், தலைப்பு கோப்புகளில் உள்ள பிழைகளை விரிவுபடுத்திய கண்டறிதல் மற்றும் வகை படிநிலை பற்றிய தகவலைக் காண்பிக்கும் திறனைச் சேர்த்தது;

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

  • LLD இணைப்பியில் ஒரு சோதனைப் பகிர்வு அம்சம் சேர்க்கப்பட்டுள்ளது, இது ஒரு நிரலை பல பகுதிகளாகப் பிரிக்க உங்களை அனுமதிக்கிறது, ஒவ்வொன்றும் தனித்தனி ELF கோப்பில் அமைந்துள்ளது. இந்த அம்சம் நிரலின் முக்கிய பகுதியைத் தொடங்க உங்களை அனுமதிக்கிறது, இது செயல்பாட்டின் போது தேவைப்படும் பிற கூறுகளை ஏற்றும் (உதாரணமாக, நீங்கள் உள்ளமைக்கப்பட்ட PDF பார்வையாளரை ஒரு தனி கோப்பாக பிரிக்கலாம், இது பயனர் PDF ஐ திறக்கும் போது மட்டுமே ஏற்றப்படும். கோப்பு).

    எல்எல்டி இணைப்பான் முன்னுக்கு கொண்டு வரப்பட்டது arm32_7, arm64, ppc64le மற்றும் x86_64 கட்டமைப்புகளுக்கு லினக்ஸ் கர்னலை இணைக்க ஏற்ற நிலைக்கு.
    புதிய விருப்பங்கள் "-" (stdout க்கு வெளியீடு), "-[no-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" மற்றும் "-z common-page-size". AArch64 கட்டமைப்பிற்கு, BTI (கிளை இலக்கு காட்டி) மற்றும் PAC (சுட்டி அங்கீகரிப்பு குறியீடு) வழிமுறைகளுக்கான ஆதரவு சேர்க்கப்பட்டுள்ளது. MIPS, RISC-V மற்றும் PowerPC இயங்குதளங்களுக்கான ஆதரவு கணிசமாக மேம்படுத்தப்பட்டுள்ளது. WebAssemblyக்கான டைனமிக் இணைப்பிற்கான ஆரம்ப ஆதரவு சேர்க்கப்பட்டது;

  • libc++ இல் செயல்படுத்தப்பட்டது செயல்பாடுகள் ssize, std::is_constant_evaluated, std::midpoint மற்றும் std::lerp, முறைகள் "front" மற்றும் "back" ஆகியவை std::span இல் சேர்க்கப்பட்டுள்ளன, std::is_unbounded_array மற்றும் std::is_bounded_array வகைகளின் பண்புக்கூறுகள் சேர்க்கப்பட்டுள்ளன , std திறன்கள் விரிவாக்கப்பட்டுள்ளன: : அணு. GCC 4.9க்கான ஆதரவு நிறுத்தப்பட்டது (GCC 5.1 மற்றும் புதிய வெளியீடுகளுடன் பயன்படுத்தலாம்). ஆதரவு சேர்க்கப்பட்டது நானா (WebAssembly சிஸ்டம் இடைமுகம், உலாவிக்கு வெளியே WebAssembly ஐப் பயன்படுத்துவதற்கான இடைமுகம்);
  • புதிய மேம்படுத்தல்கள் சேர்க்கப்பட்டுள்ளன. சில சூழ்நிலைகளில் memcmp அழைப்புகளை bcmp ஆக மாற்றுவது இயக்கப்பட்டது. ஜம்ப் டேபிள்களுக்கான வரம்பைச் சரிபார்ப்பதைத் தவிர்க்கவும், அதில் குறைந்த சுவிட்ச் பிளாக்குகள் அணுக முடியாதவை அல்லது அறிவுறுத்தல்கள் பயன்படுத்தப்படாதபோது, ​​எடுத்துக்காட்டாக, வகை வெற்றிடத்துடன் செயல்பாடுகளை அழைக்கும்போது;
  • RISC-V கட்டமைப்பிற்கான பின்தளம் நிலைப்படுத்தப்பட்டுள்ளது, இது இனி பரிசோதனையாக நிலைநிறுத்தப்படாது மற்றும் இயல்பாகவே கட்டமைக்கப்படுகிறது. MAFDC நீட்டிப்புகளுடன் RV32I மற்றும் RV64I அறிவுறுத்தல் தொகுப்பு வகைகளுக்கு முழு குறியீடு உருவாக்க ஆதரவை வழங்குகிறது;
  • X86, AArch64, ARM, SystemZ, MIPS, AMDGPU மற்றும் PowerPC கட்டமைப்புகளுக்கான பின்தளங்களில் பல மேம்பாடுகள் செய்யப்பட்டுள்ளன. உதாரணமாக, கட்டிடக்கலைக்கு
    AArch64 ஆனது SVE2 (அளவிடக்கூடிய திசையன் நீட்டிப்பு 2) மற்றும் MTE (மெமரி டேக்கிங் நீட்டிப்புகள்) வழிமுறைகளுக்கான ஆதரவைச் சேர்த்தது; ARM பின்தளத்தில் Armv8.1-M கட்டமைப்பு மற்றும் MVE (M-Profile Vector Extension) நீட்டிப்புக்கான ஆதரவு சேர்க்கப்பட்டது. GFX10 (Navi) கட்டமைப்பிற்கான ஆதரவு AMDGPU பின்தளத்தில் சேர்க்கப்பட்டுள்ளது, செயல்பாடு அழைப்பு திறன்கள் இயல்பாகவே செயல்படுத்தப்படும், மேலும் ஒருங்கிணைந்த பாஸ் செயல்படுத்தப்படுகிறது. ஜனநாயக முற்போக்குக் (தரவு-பேரலல் ப்ரிமிட்டிவ்ஸ்).

  • LLDB பிழைத்திருத்தம் இப்போது பேக்ட்ரேஸ்களுக்கான வண்ணத் தனிப்படுத்தலைக் கொண்டுள்ளது மற்றும் DWARF4 debug_types மற்றும் DWARF5 debug_info பிளாக்குகளுக்கான ஆதரவைச் சேர்த்தது;
  • COFF வடிவத்தில் ஆப்ஜெக்ட் மற்றும் இயங்கக்கூடிய கோப்புகளுக்கான ஆதரவு llvm-objcopy மற்றும் llvm-strip பயன்பாடுகளில் சேர்க்கப்பட்டுள்ளது.

ஆதாரம்: opennet.ru

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