ஆறு மாத வளர்ச்சிக்குப் பிறகு, LLVM 22.1.0 வெளியிடப்பட்டது. இது RISC போன்ற மெய்நிகர் வழிமுறைகளின் இடைநிலை பிட்குறியீடாக நிரல்களை தொகுக்கும் கருவிகளை (தொகுப்பாளர்கள், உகப்பாக்கிகள் மற்றும் குறியீடு ஜெனரேட்டர்கள்) உருவாக்குகிறது (பல-நிலை உகப்பாக்க அமைப்பு கொண்ட குறைந்த-நிலை மெய்நிகர் இயந்திரம்). உருவாக்கப்பட்ட சூடோகுறியீட்டை கொடுக்கப்பட்ட இலக்கு தளத்திற்கான இயந்திரக் குறியீடாக மாற்றலாம் அல்லது நிரல் செயல்பாட்டின் போது நேரடியாக இயந்திர வழிமுறைகளை உருவாக்க ஜஸ்ட்-இன்-டைம் (JIT) தொகுப்பாளரால் பயன்படுத்தப்படலாம். LLVM தொழில்நுட்பங்களின் அடிப்படையில், திட்டம் C, C++ மற்றும் Objective-C நிரலாக்க மொழிகளை ஆதரிக்கும் கிளாங் தொகுப்பியை உருவாக்கி வருகிறது. 18.x கிளையிலிருந்து தொடங்கி, திட்டம் ஒரு புதிய பதிப்பு எண் திட்டத்திற்கு மாறியது, அதன்படி வெளியீடு 0 ("N.0") வளர்ச்சியின் போது பயன்படுத்தப்படுகிறது, மேலும் முதல் நிலையான பதிப்பு "N.1" என எண்ணப்படுகிறது.
கிளாங் 22 இல் உள்ள மேம்பாடுகள் பின்வருமாறு:
- malloc போன்ற செயல்பாடுகளைப் பயன்படுத்தி செய்யப்படும் நினைவக ஒதுக்கீட்டு செயல்பாடுகளை ஒரு தனித்துவமான அடையாளங்காட்டியுடன் குறிப்பதற்கான நினைவக ஒதுக்கீட்டு டோக்கன்களுக்கான (Allocation Tokens) ஆதரவு சேர்க்கப்பட்டுள்ளது. ஒதுக்கீட்டு டோக்கன்கள் குவியல் தகவல்களை கட்டமைத்தல், நினைவக கசிவு கண்டறிதலை எளிதாக்குதல் மற்றும் அவற்றின் நோக்கம் அல்லது மாற்றியமைக்கும் முறைகளின் அடிப்படையில் பொருட்களை தொகுத்தல் (எ.கா., "சூடான" தரவை "குளிர்" தரவிலிருந்து பிரித்தல்) ஆகியவற்றை அனுமதிக்கின்றன. இயக்க, "-fsanitize=alloc-token" கொடியைப் பயன்படுத்தவும்.
- C மொழி தொடர்பான அம்சங்கள்:
- "defer" ஒத்திவைக்கப்பட்ட செயல்படுத்தல் பொறிமுறையை வரையறுக்கும் வரைவு விவரக்குறிப்பு செயல்படுத்தப்பட்டுள்ளது, இது தற்போதைய ஸ்கோப் வெளியேறும்போது செயல்களைச் செயல்படுத்த அனுமதிக்கிறது. "defer" ஆதரவை இயக்க "-fdefer-ts" கொடி சேர்க்கப்பட்டுள்ளது.
- உள்ளமைக்கப்பட்ட செயல்பாடு __builtin_stack_address() சேர்க்கப்பட்டுள்ளது, இது GCC இல் உள்ள ஒத்த செயல்பாட்டை பிரதிபலிக்கிறது. இந்த செயல்பாடு __builtin_stack_address() எனப்படும் தற்போதைய செயல்பாட்டின் அடுக்கு பகுதியையும் அது அழைக்கும் அடுத்தடுத்த செயல்பாடுகளையும் பிரிக்கும் அடுக்கு முகவரியை வழங்குகிறது.
- எதிர்கால C2y தரநிலைக்காக உருவாக்கப்படும் திறன்கள்:
- பெயரிடப்பட்ட லூப்களுக்கான ஆதரவு சேர்க்கப்பட்டது, இது லூப்களுக்கு பெயர்களை ஒதுக்கவும், ஸ்டேட்மென்ட்களை மாற்றவும் உங்களை அனுமதிக்கிறது, இது பிரேக் மற்றும் தொடர் அறிக்கைகளில் குறிப்பிடப்பட்டு, லூப்பிலிருந்து வெளியேறுவதை வெளிப்படையாக வரையறுக்கலாம். outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // CONT1 க்குச் செல்லவும் continue outer; // go to CONT2 // CONT1 } // CONT2 }
- தனித்துவமான அடையாளங்காட்டி பெயர்களை உருவாக்க வடிவமைக்கப்பட்ட உள்ளமைக்கப்பட்ட "__COUNTER__" மேக்ரோவின் செயல்படுத்தல் விரிவுபடுத்தப்பட்டு தரநிலையில் சேர்க்கப்பட்டுள்ளது. இந்த மேக்ரோவிற்கு 2147483647 அழைப்புகள் வரம்பு அமைக்கப்பட்டுள்ளது; இந்த வரம்பை மீறுவது பிழையை உருவாக்கும்.
- "வெளிப்புற இன்லைன்" என அறிவிக்கப்பட்ட செயல்பாடுகளுக்குள் நிலையான செயல்பாடுகள் அல்லது மாறிகளைப் பயன்படுத்தும் போது எச்சரிக்கை (-Wstatic-in-inline) நீக்கப்பட்டது.
- C23 C தரநிலையில் வரையறுக்கப்பட்ட திறன்கள்:
- float.h தலைப்புக் கோப்பு இப்போது FLT_SNAN, DBL_SNAN மற்றும் LDBL_SNAN மேக்ரோக்களை ஆதரிக்கிறது, அவை float, double மற்றும் long double வகைகளுக்கான signaled (எண்கணித செயல்பாடுகளில் பயன்படுத்தப்படும்போது விதிவிலக்கை ஏற்படுத்தும்) NaN மதிப்புகளை செயல்படுத்துகின்றன.
- ஒரே புலங்களைக் கொண்டிருந்தால், வெவ்வேறு பெயரிடப்படாத வகைகள் ஒரே மொழிபெயர்ப்பு அலகிற்குள் இணக்கமானதாகக் கருதப்படும் ஒரு பிழை சரி செய்யப்பட்டது.
- சார்பு ஸ்கேனிங்கின் போது காணாமல் போன தலைப்பு கோப்புகளைப் புறக்கணிக்கப் பயன்படுத்தப்படும் "-MG" கொடி, "#embed" கட்டளைகளுக்கு நீட்டிக்கப்பட்டுள்ளது, மேலும் இப்போது "#embed" கட்டளையில் குறிப்பிடப்பட்டுள்ள கோப்பு காணாமல் போகும்போது "கோப்பு கிடைக்கவில்லை" பிழையை அடக்குகிறது.
- C++ தொடர்பான அம்சங்கள்:
- C++2c (C++26) விவரக்குறிப்பில் உருவாக்கப்பட்ட "constexpr" சூழலில் கட்டமைக்கப்பட்ட பிணைப்புகளைப் பயன்படுத்தும் திறன் சேர்க்கப்பட்டுள்ளது. இதன் பொருள் நிலையான வெளிப்பாடுகளுக்கான குறிப்புகள் இப்போது நிலையான வெளிப்பாடுகளாக இருக்கலாம். வரிசைகள் மற்றும் எளிய கட்டமைப்புகளுக்கு ஆதரவு செயல்படுத்தப்படுகிறது (tuples இன்னும் ஆதரிக்கப்படவில்லை). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- C++20 தரநிலையின்படி, கட்டுப்பாடுகள் இப்போது சரிபார்க்கப்படுவதற்கு முன்பு நிலையான வடிவத்திற்கு மாற்றப்படுகின்றன, இது கருத்து-ஐடிகளில் மட்டுமே பயன்படுத்தப்படும் டெம்ப்ளேட் வாதங்களில் மிகவும் துல்லியமான கண்டறியும் செய்திகளையும் மாற்றுப் பிழைகளை முறையாகக் கையாளவும் அனுமதிக்கிறது.
- ஒப்பீட்டு ஆபரேட்டர்கள் "<", ">", "<=", மற்றும் ">=" ஆகியவை "<=>" ஆபரேட்டரிலிருந்து ஒருங்கிணைக்கப்பட்டதா என்பதைக் கண்டறிய, உள்ளமைக்கப்பட்ட செயல்பாடுகளின் குடும்பத்தைச் "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" சேர்த்தது.
- "-Wincompatible-pointer-types" அளவுரு எச்சரிக்கைக்குப் பதிலாக பிழையை வெளியிடும் வகையில் மாற்றப்பட்டுள்ளது. முந்தைய நடத்தைக்குத் திரும்ப, "-Wno-error=incompatible-pointer-types" விருப்பத்தைப் பயன்படுத்தவும்.
- உள்ளமைக்கப்பட்ட செயல்பாடுகளைச் சேர்த்தது __builtin_bswapg, __builtin_elementwise_ldexp, __builtin_elementwise_fshl, __builtin_elementwise_fshr, __builtin_elementwise_minnumn, __builtin_elementwise_maxnumn, __builtin_masked_load, __builtin_masked_expand_load, __builtin_masked_store, __builtin_masked_compress_store, __builtin_masked_gather, __builtin_masked_scatter, மற்றும் __builtin_dedup_pack. எடுத்துக்காட்டாக, builtin_dedup_pack வகைகளின் பட்டியலிலிருந்து நகல்களை அகற்ற உங்களை அனுமதிக்கிறது: MyTypeList = TypeList<__builtin_dedup_pack ஐப் பயன்படுத்தி …>; // இதன் விளைவாக வரும் வகை TypeList ஆக இருக்கும்
- UBSan (-fsanitize=undefined -fsanitize-trap=undefined) உடன் வரையறுக்கப்படாத நடத்தையை பிழைத்திருத்தும்போது, பிழைக்கான காரணம் இப்போது உருவாக்கப்பட்ட பிழைத்திருத்த தகவலில் சேர்க்கப்பட்டுள்ளது. பிழைத் தகவலில் விவரத்தின் அளவைக் குறிப்பிட "-fsanitize-debug-trap-reasons" கொடி சேர்க்கப்பட்டுள்ளது. பொதுவான விளக்கங்களுக்கு "அடிப்படை" (எ.கா., "முழு எண் கூட்டல் நிரம்பி வழிந்தது") மற்றும் விரிவான தகவல்களைச் சேர்க்க "விவரமான" (எ.கா., "'a + b' இல் கையொப்பமிடப்பட்ட முழு எண் கூட்டல் நிரம்பி வழிகிறது") என அமைக்கலாம்.
- புதிய கம்பைலர் கொடிகள் சேர்க்கப்பட்டன:
- "-fsanitize-trap" பயன்முறையுடன் தொகுக்கும்போது பிழைத்திருத்தத் தகவலில் விதிவிலக்கு பொறி காரணங்கள் உட்பொதிக்கப்பட்டுள்ளதா என்பதைக் கட்டுப்படுத்த "-f[no-]sanitize-debug-trap-reasons".
- நினைவக ஒதுக்கீட்டு டோக்கன்களை நிர்வகிக்க "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", மற்றும் "-fsanitize-alloc-token-extended".
- "-fmatrix-memory-layout" என்பது மேட்ரிக்ஸ் வகைகளின் நினைவக அமைப்பைக் கட்டுப்படுத்தும் (எ.கா. நெடுவரிசை-மேஜருக்கு நெடுவரிசை-மேஜர், வரிசை-மேஜருக்கு வரிசை-மேஜர்).
- செயல்பாடுகள் இப்போது "malloc_span" பண்புக்கூறைக் கொண்டுள்ளன, இது malloc பண்புக்கூறைப் போன்றது, ஆனால் தொகுதியின் இறுதிக்கு ஒரு சுட்டிக்காட்டி மற்றும் புலத்தைக் கொண்ட span-போன்ற கட்டமைப்புகளைத் திருப்பித் தரும் செயல்பாடுகளுக்குப் பொருந்தும்.
- இணைப்பு நேரத்தில் printf செயல்பாட்டின் தேவையான நிலையான இணைக்கப்பட்ட செயல்படுத்தலை மாறும் வகையில் தேர்ந்தெடுக்க "modular_format" பண்புக்கூறு சேர்க்கப்பட்டது.
- நோயறிதல் மற்றும் நிலையான பகுப்பாய்வு கருவிகள் விரிவாக்கப்பட்டுள்ளன, புதிய சரிபார்ப்புகள் சேர்க்கப்பட்டுள்ளன (பல டஜன் நோயறிதல் தொடர்பான மேம்பாடுகள்).
- SSE, AVX மற்றும் AVX512 நீட்டிப்புகளுக்கான கூடுதல் உள்ளார்ந்த அம்சங்கள் X86 பின்தளத்தில் சேர்க்கப்பட்டுள்ளன. வைல்ட்கேட் லேக் (-march=wildcatlake) மற்றும் நோவா லேக் (-march=novalake) மைக்ரோஆர்கிடெக்சர்களை அடிப்படையாகக் கொண்ட இன்டெல் CPUகளுக்கான கட்டமைப்பு முறைகள் சேர்க்கப்பட்டுள்ளன.
- AArch64 பின்தளம் இப்போது ஆம்பியர் கம்ப்யூட்டிங் ஆம்பியர்1C (ampere1c), ஆர்ம் C1-நானோ (c1-நானோ), ஆர்ம் C1-ப்ரோ (c1-ப்ரோ), ஆர்ம் C1-பிரீமியம் (c1-பிரீமியம்) மற்றும் ஆர்ம் C1-அல்ட்ரா (c1-அல்ட்ரா) செயலிகளை ஆதரிக்கிறது. FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US] மற்றும் FCVTA[US] வழிமுறைகளுக்கு கூடுதல் உள்ளமைக்கப்பட்ட செயல்பாடுகள் சேர்க்கப்பட்டுள்ளன. செயல்பாட்டு பல-பதிப்பு (FMV) ஆதரவு நிலைப்படுத்தப்பட்டுள்ளது. பயனர்கள் இப்போது வெவ்வேறு செயல்பாட்டு பதிப்புகளின் முன்னுரிமையை மீறலாம்.
- LoongArch32 (LA32R, LA32S) கட்டமைப்பிற்கான ஆதரவு சேர்க்கப்பட்டது.
- ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly மற்றும் PowerPC கட்டமைப்புகளுக்கான மேம்படுத்தப்பட்ட பின்தளங்கள்.
ஆதாரம்: opennet.ru
