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

ஒரு வருட வளர்ச்சிக்குப் பிறகு, இலவச கம்பைலர் தொகுப்பு GCC 12.1 வெளியிடப்பட்டது, இது புதிய GCC 12.x கிளையில் முதல் குறிப்பிடத்தக்க வெளியீடு. புதிய வெளியீட்டு எண் திட்டத்திற்கு இணங்க, பதிப்பு 12.0 வளர்ச்சி செயல்பாட்டில் பயன்படுத்தப்பட்டது, மேலும் GCC 12.1 வெளியீட்டிற்கு சற்று முன்பு, GCC 13.0 கிளை ஏற்கனவே கிளைத்துவிட்டது, அதன் அடிப்படையில் அடுத்த பெரிய வெளியீடு, GCC 13.1, உருவாக்கப்படும். மே 23 அன்று, இந்த திட்டம் GCC இன் முதல் பதிப்பு உருவாக்கப்பட்டு 35 ஆண்டுகள் நிறைவடைகிறது.

முக்கிய மாற்றங்கள்:

  • CTF (காம்பாக்ட் டைப் ஃபார்மேட்) பிழைத்திருத்த வடிவமைப்பிற்கான ஆதரவு சேர்க்கப்பட்டது, இது சி வகைகள், செயல்பாடுகளுக்கு இடையிலான இணைப்புகள் மற்றும் பிழைத்திருத்த குறியீடுகள் பற்றிய தகவல்களின் சிறிய சேமிப்பை வழங்குகிறது. ELF பொருள்களில் உட்பொதிக்கப்படும் போது, ​​தரவு நகல்களைத் தவிர்க்க EFL எழுத்து அட்டவணைகளைப் பயன்படுத்த வடிவமைப்பு அனுமதிக்கிறது.
  • 1980களில் உருவாக்கப்பட்ட "STABS" பிழைத்திருத்த தகவல் சேமிப்பக வடிவமைப்பிற்கான ஆதரவு நிராகரிக்கப்பட்டது.
  • C மற்றும் C++ மொழிகளுக்கான எதிர்கால C2X மற்றும் C++23 தரநிலைகளுக்கான ஆதரவை விரிவுபடுத்தும் பணி தொடர்கிறது. எடுத்துக்காட்டாக, "If consteval" வெளிப்பாடுக்கான ஆதரவு சேர்க்கப்பட்டுள்ளது; செயல்பாட்டு வாதங்களில் தானியங்கு பயன்படுத்த அனுமதிக்கப்படுகிறது ("f(auto(g()))"); constexpr என அறிவிக்கப்பட்ட செயல்பாடுகளில் எழுத்து அல்லாத மாறிகள், கோட்டோ மற்றும் லேபிள்களின் பயன்பாடு அனுமதிக்கப்படுகிறது; பல பரிமாண குறியீட்டு ஆபரேட்டர்கள் ஆபரேட்டருக்கான ஆதரவு சேர்க்கப்பட்டது[]; if, for and switch, initialization blocks இன் திறன்கள் விரிவுபடுத்தப்பட்டுள்ளன ("(T = int; T e: v) பயன்படுத்துதல்").
  • C++ ஸ்டாண்டர்ட் லைப்ரரியானது C++20 மற்றும் C++23 தரநிலைகளின் சோதனைப் பிரிவுகளுக்கான ஆதரவை மேம்படுத்தியுள்ளது. stdக்கான ஆதரவு சேர்க்கப்பட்டது::move_only_function, , std::basic_string::resize_and_overwrite, , மற்றும் std::invoke_r. constexpr செயல்பாடுகளில் std::unique_ptr, std::vector, std::basic_string, std::optional மற்றும் std::variant ஐப் பயன்படுத்த அனுமதிக்கப்படுகிறது.
  • Fortran முன்பக்கம் TS 29113 விவரக்குறிப்புக்கு முழு ஆதரவை வழங்குகிறது, இது Fortran மற்றும் C குறியீட்டிற்கு இடையே பெயர்வுத்திறனை உறுதி செய்வதற்கான திறன்களை விவரிக்கிறது.
  • __builtin_shufflevector(vec1, vec2, index1, index2, ...) நீட்டிப்புக்கான ஆதரவு சேர்க்கப்பட்டது, இது Clangல் முன்பு சேர்க்கப்பட்டது, இது பொதுவான வெக்டர் ஷஃபிள் மற்றும் ஷஃபிள் செயல்பாடுகளைச் செய்ய ஒற்றை அழைப்பை வழங்குகிறது.
  • "-O2" தேர்வுமுறை நிலையைப் பயன்படுத்தும் போது, ​​வெக்டரைசேஷன் முன்னிருப்பாக இயக்கப்படும் (தி -ftree-vectorize மற்றும் -fvect-cost-model=மிகவும் மலிவான முறைகள் செயல்படுத்தப்படும்). வெக்டார் குறியீடு முற்றிலும் வெக்டரைஸ் செய்யப்பட்ட ஸ்கேலர் குறியீட்டை மாற்றினால் மட்டுமே மிகவும் மலிவான மாதிரி வெக்டரைசேஷனை அனுமதிக்கிறது.
  • சிக்கலைக் கண்காணிக்கவும், துவக்கப்படாத மாறிகளின் பயன்பாட்டுடன் தொடர்புடைய பாதிப்புகளைத் தடுக்கவும் அடுக்கில் உள்ள மாறிகளின் வெளிப்படையான துவக்கத்தை செயல்படுத்த "-ftrivial-auto-var-init" பயன்முறை சேர்க்கப்பட்டது.
  • C மற்றும் C++ மொழிகளுக்கு, ஒரு பொருளின் அளவைக் கண்டறிய __builtin_dynamic_object_size உள்ளமைக்கப்பட்ட செயல்பாடு சேர்க்கப்பட்டுள்ளது, இது Clang இலிருந்து ஒத்த செயல்பாட்டிற்கு இணங்குகிறது.
  • C மற்றும் C++ மொழிகளுக்கு, "கிடைக்கவில்லை" பண்புக்கூறுக்கான ஆதரவு சேர்க்கப்பட்டுள்ளது (எடுத்துக்காட்டாக, நீங்கள் அவற்றைப் பயன்படுத்த முயற்சித்தால் பிழையை உருவாக்கும் செயல்பாடுகளைக் குறிக்கலாம்).
  • C மற்றும் C++ மொழிகளுக்கு, "#elifdef" மற்றும் "#elifndef" ஆகிய முன்னெச்சரிக்கை உத்தரவுகளுக்கான ஆதரவு சேர்க்கப்பட்டுள்ளது.
  • UTF-8 எழுத்துகள் தவறாகப் பயன்படுத்தப்பட்டால் எச்சரிக்கையைக் காட்ட "-Wbidi-chars" கொடி சேர்க்கப்பட்டது, இருதரப்பு உரை காட்டப்படும் வரிசையை மாற்றுகிறது.
  • வரிசைகளைக் குறிக்கும் இரண்டு செயலிகளை ஒப்பிட முயற்சிக்கும்போது எச்சரிக்கையைக் காட்ட "-வார்ரே-ஒப்பிடு" கொடி சேர்க்கப்பட்டது.
  • OpenMP 5.0 மற்றும் 5.1 (Open Multi-Processing) தரநிலைகளை செயல்படுத்துதல், இது API மற்றும் மல்டி-கோர் மற்றும் ஹைப்ரிட் (CPU+GPU/DSP) சிஸ்டங்களில் பகிர்ந்த நினைவகம் மற்றும் வெக்டரைசேஷன் யூனிட்களுடன் (SIMD) இணையான நிரலாக்க முறைகளைப் பயன்படுத்துவதற்கான முறைகளை வரையறுக்கிறது. , தொடர்ந்தது.
  • OpenACC 2.6 இணை நிரலாக்க விவரக்குறிப்பின் மேம்படுத்தப்பட்ட செயல்படுத்தல், இது GPUகள் மற்றும் NVIDIA PTX போன்ற சிறப்பு செயலிகளில் ஆஃப்லோடிங் செயல்பாடுகளுக்கான கருவிகளை வரையறுக்கிறது.
  • நீட்டிக்கப்பட்ட வழிமுறைகளுக்கான ஆதரவு Intel AVX86-FP512 மற்றும் _Float16 வகை x16 கட்டமைப்பிற்கான குறியீடு உருவாக்க பின்தளத்தில் சேர்க்கப்பட்டுள்ளது.
  • x86 கட்டமைப்பிற்கு, நிபந்தனையற்ற முன்னோக்கி ஜம்ப் செயல்பாடுகளுக்குப் பிறகு அறிவுறுத்தல்களை ஊகமாக செயல்படுத்துவதால் செயலிகளில் ஏற்படும் பாதிப்புகளுக்கு எதிராக பாதுகாப்பு சேர்க்கப்பட்டுள்ளது. நினைவகத்தில் (SLS, ஸ்ட்ரெய்ட் லைன் ஸ்பெகுலேஷன்) கிளை அறிவுறுத்தலைப் பின்பற்றி உடனடியாக அறிவுறுத்தல்களை முன்கூட்டியே செயலாக்குவதால் சிக்கல் ஏற்படுகிறது. பாதுகாப்பை செயல்படுத்த, "-mharden-sls" விருப்பம் முன்மொழியப்பட்டது.
  • சோதனை நிலையான பகுப்பாய்விக்கு துவக்கப்படாத மாறிகளின் பயன்பாட்டைக் கண்டறிதல் சேர்க்கப்பட்டது. இன்லைன் செருகல்களில் அசெம்பிளி குறியீட்டை பகுப்பாய்வு செய்வதற்கான ஆரம்ப ஆதரவு சேர்க்கப்பட்டது. மேம்படுத்தப்பட்ட நினைவக கண்காணிப்பு. சுவிட்ச் வெளிப்பாடுகளை செயலாக்குவதற்கான குறியீடு மீண்டும் எழுதப்பட்டது.
  • libgccjit க்கு 30 புதிய அழைப்புகள் சேர்க்கப்பட்டது, இது மற்ற செயல்முறைகளில் குறியீடு ஜெனரேட்டரை உட்பொதித்து, JIT பைட்கோடை இயந்திரக் குறியீட்டில் தொகுக்கப் பயன்படுத்துவதற்கான பகிரப்பட்ட நூலகமாகும்.
  • CO-RE (ஒருமுறை தொகுக்கவும் - எல்லா இடங்களிலும் இயக்கவும்) பொறிமுறைக்கான ஆதரவு BPF பைட்கோடை உருவாக்குவதற்கான பின்தளத்தில் சேர்க்கப்பட்டுள்ளது, இது லினக்ஸ் கர்னலுக்கான eBPF நிரல்களின் குறியீட்டை ஒருமுறை மட்டுமே தொகுக்க உங்களை அனுமதிக்கிறது மற்றும் ஒரு சிறப்பு உலகளாவிய ஏற்றியைப் பயன்படுத்துகிறது. தற்போதைய கர்னல் மற்றும் BPF வகை வடிவத்திற்கு நிரல் ஏற்றப்பட்டது). CO-RE ஆனது தொகுக்கப்பட்ட eBPF நிரல்களின் பெயர்வுத்திறன் சிக்கலை தீர்க்கிறது, இது முன்னர் அவை தொகுக்கப்பட்ட கர்னலின் பதிப்பில் மட்டுமே பயன்படுத்தப்படலாம், ஏனெனில் தரவு கட்டமைப்புகளில் உள்ள உறுப்புகளின் நிலை பதிப்புக்கு பதிப்பு மாறுகிறது.
  • RISC-V பின்தளத்தில் புதிய அறிவுறுத்தல் தொகுப்பு கட்டிடக்கலை நீட்டிப்புகளான zba, zbb, zbc மற்றும் zbs, அத்துடன் திசையன் மற்றும் ஸ்கேலார் கிரிப்டோகிராஃபிக் செயல்பாடுகளுக்கான ISA நீட்டிப்புகளுக்கான ஆதரவைச் சேர்க்கிறது. இயல்பாக, RISC-V ISA 20191213 விவரக்குறிப்புக்கான ஆதரவு வழங்கப்படுகிறது. T-HEAD c906 கோர்களுக்கான மேம்படுத்தல்களை இயக்க -mtune=thead-c906 கொடி சேர்க்கப்பட்டுள்ளது.
  • __int128_t/integer(kind=16) வகைக்கான ஆதரவு GCN மைக்ரோஆர்கிடெக்சரின் அடிப்படையில் AMD GPUகளுக்கான குறியீடு உருவாக்க பின்தளத்தில் சேர்க்கப்பட்டுள்ளது. ஒரு குழுவிற்கு ஒரு கம்ப்யூட்டிங் யூனிட்டுக்கு (CU) 40 பணிக்குழுக்கள் மற்றும் 16 அறிவுறுத்தல் முனைகள் (அலைமுகம், SIMD இன்ஜின் மூலம் இணையாக செயல்படுத்தப்படும் நூல்களின் தொகுப்பு) வரை பயன்படுத்த முடியும். முன்பு, ஒரு CUக்கு ஒரு அறிவுறுத்தல் விளிம்பு மட்டுமே அனுமதிக்கப்பட்டது.
  • NVIDIA PTX (Parallel Thread Execution) இன்ஸ்ட்ரக்ஷன் செட் ஆர்க்கிடெக்சரைப் பயன்படுத்தி குறியீட்டை உருவாக்க வடிவமைக்கப்பட்ட NVPTX பின்தளம், "-march", "-mptx" மற்றும் "-march-map" கொடிகளைப் பயன்படுத்தும் திறனைச் சேர்த்துள்ளது. PTX ISA sm_53, sm_70, sm_75 மற்றும் sm_80 க்கு செயல்படுத்தப்பட்ட ஆதரவு. இயல்புநிலை கட்டமைப்பு sm_30 ஆகும்.
  • PowerPC / PowerPC64 / RS6000 செயலிகளுக்கான பின்தளத்தில், உள்ளமைக்கப்பட்ட செயல்பாடுகளின் செயலாக்கங்கள் மீண்டும் எழுதப்பட்டுள்ளன. உள்ளமைக்கப்பட்ட செயல்பாடுகள் __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar மற்றும் ஆவணப்படுத்தப்பட்டவை.
  • Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) மற்றும் Arm Cortex-X710 (cortex- x2) ஆகியவற்றுக்கான ஆதரவு. "-மார்ச்" விருப்பத்துடன் பயன்படுத்த புதிய ARMv2 கட்டமைப்பு விருப்பங்களுக்கான ஆதரவு சேர்க்கப்பட்டது: armv8-a, armv8.7-a, armv8.8-a. நீட்டிக்கப்பட்ட ARM வழிமுறைகளின் (ls9) பயன்பாட்டின் அடிப்படையில், அணு ஏற்றுதல் மற்றும் நினைவகத்தில் தரவைச் சேமிப்பதற்காக கம்பைலரில் (இன்ட்ரின்சிக்ஸ்) கட்டமைக்கப்பட்ட C செயல்பாடுகளைச் செயல்படுத்துதல் சேர்க்கப்பட்டது. mopsoption ARM நீட்டிப்பைப் பயன்படுத்தி memcpy, memmove மற்றும் memset செயல்பாடுகளை துரிதப்படுத்துவதற்கான ஆதரவு சேர்க்கப்பட்டது.
  • புதிய சோதனை முறை “-fsanitize=shadow-call-stack” (ShadowCallStack) சேர்க்கப்பட்டது, இது தற்போது AArch64 கட்டமைப்பிற்கு மட்டுமே கிடைக்கிறது மற்றும் “-ffixed-r18” விருப்பத்துடன் குறியீட்டை உருவாக்கும்போது வேலை செய்கிறது. ஸ்டேக்கில் இடையக வழிதல் ஏற்பட்டால், செயல்பாட்டிலிருந்து திரும்பும் முகவரியை மேலெழுதுவதற்குப் பயன்முறை பாதுகாப்பை வழங்குகிறது. ஒரு செயல்பாட்டிற்கு கட்டுப்பாட்டை மாற்றிய பின், செயல்பாட்டிலிருந்து வெளியேறும் முன் இந்த முகவரியை மீட்டெடுத்த பிறகு, திரும்பும் முகவரியை ஒரு தனி "நிழல்" அடுக்கில் சேமிப்பதே பாதுகாப்பின் சாராம்சம்.

ஆதாரம்: opennet.ru

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