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

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

க்ளாங் 16.0 இல் முக்கிய மேம்பாடுகள்:

  • இயல்புநிலை C++/ObjC++ தரநிலை gnu++17 (முன்பு gnu++14) ஆகும், அதாவது GNU நீட்டிப்புகளுடன் கூடிய C++17 அம்சங்கள் இயல்பாகவே ஆதரிக்கப்படுகின்றன. முந்தைய நடத்தையை திரும்பப் பெற, "-std=gnu++14" விருப்பத்தைப் பயன்படுத்தலாம்.
  • C++20 தரநிலையுடன் தொடர்புடைய மேம்பட்ட அம்சங்கள் செயல்படுத்தப்பட்டன:
    • நிபந்தனைக்குட்பட்ட அற்பமான சிறப்பு உறுப்பினர் செயல்பாடுகள்,
    • லாம்ப்டா செயல்பாடுகளில் கட்டமைக்கப்பட்ட பிணைப்புகளைக் கைப்பற்றுதல்,
    • வெளிப்பாடுகளுக்குள் சமத்துவ ஆபரேட்டர்,
    • சில சூழல்களில் தட்டச்சுப்பெயர் முக்கிய சொல்லைத் தவிர்ப்பதற்கான விருப்பம்,
    • அடைப்புக்குறிக்குள் சரியான மொத்த துவக்கம் (“Aggr(val1, val2)”).
  • எதிர்கால C++2b தரநிலையில் வரையறுக்கப்பட்ட அம்சங்கள் செயல்படுத்தப்பட்டுள்ளன:
    • கூட்டு வெளிப்பாடுகளின் முடிவில் லேபிள்களை வைக்க அனுமதிக்கப்படுகிறது,
    • நிலையான இயக்கி(),
    • நிலையான இயக்கி[],
    • char8_t வகையுடன் இணக்கத்தன்மை உறுதி செய்யப்படுகிறது,
    • "\N{...}" இல் பயன்படுத்த அனுமதிக்கப்பட்ட எழுத்துகளின் வரம்பு விரிவாக்கப்பட்டுள்ளது
    • constexpr என அறிவிக்கப்பட்ட செயல்பாடுகளில் "நிலையான constexpr" என அறிவிக்கப்பட்ட மாறிகளைப் பயன்படுத்தும் திறன் சேர்க்கப்பட்டது.
  • எதிர்கால C-தரநிலை C2x இல் வரையறுக்கப்பட்ட அம்சங்கள் செயல்படுத்தப்பட்டுள்ளன:
    • "-Wunused-label" எச்சரிக்கையை முடக்க, "[[maybe_unused]]" பண்புக்கூறு லேபிள்களில் பயன்படுத்த அனுமதிக்கப்படுகிறது.
    • கூட்டு வெளிப்பாடுகளுக்குள் எங்கும் லேபிள்களை வைக்க அனுமதிக்கப்படுகிறது,
    • சேர்க்கப்பட்டது வகை மற்றும் typeof_unqual ஆபரேட்டர்கள்,
    • ஒரு புதிய வகை nullptr_t மற்றும் nullptr மாறிலி ஆகியவை பூஜ்ய சுட்டிகளை வரையறுக்கும், அவை எந்த சுட்டி வகைக்கும் மாற்றலாம் மற்றும் முழு எண் மற்றும் வெற்றிட* வகைகளுக்கு கட்டுப்படாத NULL இன் மாறுபாட்டைக் குறிக்கும்.
    • C2x பயன்முறையில், va_start மேக்ரோவை மாறி எண்ணிக்கையிலான வாதங்களுடன் (variadic) அழைப்பது அனுமதிக்கப்படுகிறது.
  • C99, C11 மற்றும் C17 இணக்க முறைகளில், இயல்புநிலை விருப்பங்கள் "-Wimplicit-function-declaration" மற்றும் "-Wimplicit-int" இப்போது எச்சரிக்கைக்கு பதிலாக பிழையை உருவாக்குகின்றன.
  • C++ பயன்முறையில் "void *" (எ.கா. "void func(void *p) { *p; }") இன் மறைமுகப் பயன்பாடு இப்போது ISO C++, GCC, ICC மற்றும் MSVC போன்ற பிழையை உருவாக்குகிறது.
  • மைக்ரோசாஃப்ட்-ஸ்டைல் ​​இன்லைன் அசெம்பிளி பிளாக்குகளில் பிட்ஃபீல்டுகளை அறிவுறுத்தல் செயல்பாடுகளாகக் குறிப்பிடுவது (எ.கா. "__asm ​​{mov eax, s.bf }") இப்போது பிழையை உருவாக்குகிறது.
  • வெவ்வேறு தொகுதிகளில் ஒரே பெயர்களைக் கொண்ட வெவ்வேறு கட்டமைப்புகள் மற்றும் தொழிற்சங்கங்களின் இருப்புக்கான கண்டறியும் சேர்க்கப்பட்டது.
  • OpenCL மற்றும் OpenMP ஆதரவுடன் தொடர்புடைய திறன்கள் விரிவாக்கப்பட்டுள்ளன. OpenCL கர்னல் மதிப்புருக்களில் பயன்படுத்தப்படும் C++ வார்ப்புருக்களுக்கான மேம்படுத்தப்பட்ட கண்டறிதல். AMDGPU க்கான மேம்படுத்தப்பட்ட வரிசை தொகுதி ஆதரவு. nounwind பண்பு அனைத்து செயல்பாடுகளிலும் மறைமுகமாக சேர்க்கப்பட்டுள்ளது. உள்ளமைக்கப்பட்ட செயல்பாடுகளுக்கு மேம்படுத்தப்பட்ட ஆதரவு.
  • செயலிழப்பு கண்டறியும் தரவு சேமிக்கப்படும் கோப்பகத்தை வரையறுக்க CLANG_CRASH_DIAGNOSTICS_DIR சூழல் மாறியைப் பயன்படுத்தும் திறன் சேர்க்கப்பட்டது.
  • யூனிகோட் ஆதரவு யூனிகோட் 15.0 விவரக்குறிப்புக்கு புதுப்பிக்கப்பட்டது. "₊" (எ.கா. "இரட்டை xₖ₊₁") போன்ற அடையாளங்காட்டிகளில் சில கணிதக் குறியீடுகள் அனுமதிக்கப்படுகின்றன.
  • பல உள்ளமைவு கோப்புகளை ஏற்றுவதற்கான ஆதரவு சேர்க்கப்பட்டது (இயல்புநிலை உள்ளமைவு கோப்புகள் முதலில் ஏற்றப்படும், பின்னர் “--config=” கொடியின் மூலம் குறிப்பிடப்பட்டவை, இப்போது பல முறை குறிப்பிடப்படலாம்). உள்ளமைவு கோப்புகளின் இயல்புநிலை ஏற்றுதல் வரிசையை மாற்றியது: க்ளாங் முதலில் கோப்பை ஏற்ற முயற்சிக்கிறது - .cfg, மற்றும் அது கிடைக்கவில்லை என்றால், அது இரண்டு கோப்புகளை ஏற்ற முயற்சிக்கிறது .cfg மற்றும் .cfg. இயல்புநிலையாக உள்ளமைவு கோப்புகளை ஏற்றுவதை முடக்க, "--no-default-config" கொடி சேர்க்கப்பட்டது.
  • மீண்டும் மீண்டும் உருவாக்கப்படுவதை உறுதிசெய்ய, __DATE__, __TIME__ மற்றும் __TIMESTAMP__ மேக்ரோக்களில் தற்போதைய தேதி மற்றும் நேர மதிப்புகளை SOURCE_DATE_EPOCH சூழல் மாறியில் குறிப்பிடப்பட்டுள்ள நேரத்துடன் மாற்றுவது சாத்தியமாகும்.
  • மாறிலிகளின் சூழலில் பயன்படுத்தக்கூடிய உள்ளமைக்கப்பட்ட செயல்பாடுகள் (பில்டின்) இருப்பதைச் சரிபார்க்க, மேக்ரோ “__has_constexpr_builtin” சேர்க்கப்பட்டது.
  • சீரமைக்கப்பட்ட coroutine சட்ட ஒதுக்கீட்டிற்காக "-fcoro-aligned-allocation" என்ற புதிய தொகுப்புக் கொடி சேர்க்கப்பட்டது.
  • “-fstrict-flex-arrays=” கொடியானது கட்டமைப்புகளில் உள்ள நெகிழ்வான வரிசை உறுப்புகளின் மூன்றாம் நிலை சரிபார்ப்புக்கான ஆதரவை செயல்படுத்துகிறது (Flexible Array Members, கட்டமைப்பின் முடிவில் காலவரையற்ற அளவிலான ஒரு வரிசை). மூன்றாவது நிலையில், அளவு "[]" (உதாரணமாக, "int b[]") மட்டுமே நெகிழ்வான வரிசையாகக் கருதப்படுகிறது, ஆனால் அளவு "[0]" (எடுத்துக்காட்டாக, "int b[0]") இல்லை.
  • நிலையான C++ தொகுதிகளுக்கு ஒற்றை-கட்ட தொகுப்பு மாதிரியை செயல்படுத்த "-fmodule-output" கொடி சேர்க்கப்பட்டது.
  • ஸ்டாக் பிரேம் அமைப்பில் உள்ள சிக்கல்களைக் கண்டறிய உதவும் "-Rpass-analysis=stack-frame-layout" பயன்முறை சேர்க்கப்பட்டது.
  • புதிய பண்புக்கூறு __attribute__((target_version("cpu_features"))) சேர்க்கப்பட்டது மற்றும் AArch1 வழங்கிய அம்சங்களின் குறிப்பிட்ட பதிப்புகளைத் தேர்ந்தெடுக்க __attribute__((target_clones("cpu_features2","cpu_features64",...)) பண்புக்கூறின் செயல்பாட்டை நீட்டித்தது. CPUகள்.
  • கண்டறியும் கருவிகள் விரிவாக்கப்பட்டன:
    • ஒற்றை-பிட் கையொப்பமிடப்பட்ட பிட்ஃபீல்டிற்கு ஒன்றை ஒதுக்கும்போது மறைமுகமான துண்டிக்கப்படுவதைக் கண்டறிய "-Wsingle-bit-bitfield-constant-conversion" என்ற எச்சரிக்கை சேர்க்கப்பட்டது.
    • துவக்கப்படாத constexpr மாறிகளின் கண்டறிதல் விரிவாக்கப்பட்டுள்ளது.
    • செயல்பாட்டு வகை வார்ப்பில் சாத்தியமான சிக்கல்களைக் கண்டறிய "-Wcast-function-type-strict" மற்றும் "-Wincompatible-function-pointer-types-strict" எச்சரிக்கைகள் சேர்க்கப்பட்டது.
    • ஏற்றுமதித் தொகுதிகளில் தவறான அல்லது ஒதுக்கப்பட்ட தொகுதிப் பெயர்களைப் பயன்படுத்துவதற்கான கண்டறிதல்கள் சேர்க்கப்பட்டன.
    • வரையறைகளில் காணாமல் போன "தானியங்கு" முக்கிய வார்த்தைகளை மேம்படுத்தப்பட்ட கண்டறிதல்.
    • "-Winteger-overflow" எச்சரிக்கையை செயல்படுத்துவது, நிரம்பி வழியும் கூடுதல் சூழ்நிலைகளுக்கான சோதனைகளைச் சேர்த்துள்ளது.
  • லூங்சன் 64 464 செயலிகளில் பயன்படுத்தப்படும் LoongArch இன்ஸ்ட்ரக்ஷன் செட் ஆர்கிடெக்சருக்கான (-march=loongarch3 அல்லது -march=la5000) ஆதரவு மற்றும் MIPS மற்றும் RISC-V போன்ற புதிய RISC ISA செயல்படுத்தப்பட்டது.

LLVM 16.0 இல் முக்கிய கண்டுபிடிப்புகள்:

  • LLVM குறியீடு C++17 தரநிலையில் வரையறுக்கப்பட்ட கூறுகளைப் பயன்படுத்த அனுமதிக்கப்படுகிறது.
  • எல்.எல்.வி.எம்-ஐ உருவாக்குவதற்கான சுற்றுச்சூழல் தேவைகள் அதிகரிக்கப்பட்டுள்ளன. உருவாக்க கருவிகள் இப்போது C++17 தரநிலையை ஆதரிக்க வேண்டும், அதாவது. உருவாக்க, உங்களுக்கு குறைந்தபட்சம் GCC 7.1, Clang 5.0, Apple clang 10.0 அல்லது Visual Studio 2019 16.7 தேவை.
  • AArch64 கட்டமைப்பிற்கான பின்தளமானது, கார்டெக்ஸ்-A715, கார்டெக்ஸ்-X3 மற்றும் நியோவர்ஸ் V2 CPUகள், RME MEC க்கான அசெம்ப்ளர் (மெமரி என்க்ரிப்ஷன் சூழல்கள்), Armv8.3 நீட்டிப்புகள் (சிக்கலான எண்) மற்றும் செயல்பாடு மல்டி வெர்ஷனிங் ஆகியவற்றிற்கான ஆதரவைச் சேர்க்கிறது.
  • ARM கட்டமைப்பிற்கான பின்தளத்தில், Armv2, Armv2A, Armv3 மற்றும் Armv3M இலக்கு இயங்குதளங்களுக்கான ஆதரவு நிறுத்தப்பட்டது, அதற்கான சரியான குறியீட்டின் உருவாக்கத்திற்கு உத்தரவாதம் இல்லை. சிக்கலான எண்களுடன் பணிபுரியும் வழிமுறைகளுக்கான குறியீட்டை உருவாக்கும் திறன் சேர்க்கப்பட்டது.
  • В бэкенд для архитектуры X86 добавлена поддержка архитектур набора команд (ISA) 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 கட்டமைப்பிற்கான 64-பிட் இயங்கக்கூடிய பிழைத்திருத்தத்திற்கான ஆதரவு சேர்க்கப்பட்டது. COFF பிழைத்திருத்த குறியீடுகளின் மேம்படுத்தப்பட்ட கையாளுதல். ஏற்றப்பட்ட விண்டோஸ் தொகுதிகளின் பட்டியலில் நகல் DLL களின் வடிகட்டுதல் வழங்கப்படுகிறது.
  • Libc++ நூலகத்தில், C++20 மற்றும் C++23 தரநிலைகளின் புதிய அம்சங்களுக்கான ஆதரவை செயல்படுத்துவதில் முக்கிய பணி கவனம் செலுத்தப்பட்டது.
  • LDD இணைப்பான், முகவரி இடமாற்றம் ஸ்கேனிங் மற்றும் பிரிவு துவக்க செயல்பாடுகளை இணையாக இணைப்பதன் மூலம் இணைக்கும் நேரத்தை கணிசமாகக் குறைக்கிறது. ZSTD அல்காரிதத்தைப் பயன்படுத்தி பிரிவு சுருக்கத்திற்கான ஆதரவு சேர்க்கப்பட்டது.

ஆதாரம்: opennet.ru

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