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

ஒரு வருட வளர்ச்சிக்குப் பிறகு வெளியிடப்பட்டது தொகுப்பிகளின் இலவச தொகுப்பு வெளியீடு GCC 10.1, புதிய GCC 10.x கிளையில் முதல் பெரிய வெளியீடு. அதற்கு ஏற்ப புதிய திட்டம் வெளியீட்டு எண்கள், பதிப்பு 10.0 வளர்ச்சி செயல்பாட்டின் போது பயன்படுத்தப்பட்டது, மேலும் GCC 10.1 வெளியீட்டிற்கு சற்று முன்பு, GCC 11.0 கிளை ஏற்கனவே கிளைத்துவிட்டது, அதன் அடிப்படையில் அடுத்த குறிப்பிடத்தக்க வெளியீடு, GCC 11.1 உருவாக்கப்படும்.

GCC 10.1 ஆனது C++20 தரநிலைக்காக உருவாக்கப்பட்ட C++ மொழியில் பல புதுமைகளைச் செயல்படுத்துதல், எதிர்கால C மொழி தரநிலை (C2x) தொடர்பான மேம்பாடுகள், கம்பைலர் பின்தளங்களில் புதிய மேம்படுத்தல்கள் மற்றும் சோதனை ஆதரவு ஆகியவற்றில் குறிப்பிடத்தக்கது. நிலையான பகுப்பாய்வு முறை. கூடுதலாக, ஒரு புதிய கிளை தயாரிப்பின் போது, ​​திட்டம் களஞ்சியத்தை SVN இலிருந்து Git க்கு மாற்றியது.

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

  • சேர்க்கப்பட்டது நிலையான பகுப்பாய்வு சோதனை முறை "- ஃபேனாலைசர்“, இது ஒரு நிரலில் குறியீடு செயல்படுத்தும் பாதைகள் மற்றும் தரவு ஓட்டங்களின் வள-தீவிர இடைச்செயல்முறை பகுப்பாய்வு செய்கிறது. ஒரு நினைவகப் பகுதிக்கான இலவச() செயல்பாட்டிற்கான இரட்டை அழைப்புகள், கோப்பு விளக்கக் கசிவுகள், பூஜ்ய சுட்டிகளை மறுபரிசீலனை செய்தல் மற்றும் அனுப்புதல், விடுவிக்கப்பட்ட நினைவக தொகுதிகளை அணுகுதல், தொடங்கப்படாத மதிப்புகளைப் பயன்படுத்துதல் போன்ற சிக்கல்களைக் கண்டறியும் திறன் இந்த பயன்முறையில் உள்ளது. OpenSSL குறியீட்டிற்கான புதிய பயன்முறையின் பயன்பாடு ஏற்கனவே அடையாளம் காண்பதை சாத்தியமாக்கியுள்ளது ஆபத்தான பாதிப்பு.
  • மேம்படுத்தப்பட்ட இடைச்செயல்முறை மேம்படுத்தல்கள். IPA-SRA (Interprocedural Scalar Shared Replacement) பாஸ் பைண்ட் நேரத்தில் வேலை செய்ய மறுவடிவமைப்பு செய்யப்பட்டுள்ளது, மற்றவற்றுடன், இப்போது கணக்கிடப்பட்டு பயன்படுத்தப்படாத மதிப்புகளை நீக்குகிறது. "-O2" தேர்வுமுறை பயன்முறையில், "-finline-functions" விருப்பம் இயக்கப்பட்டது, இது செயல்படுத்தும் செயல்திறனுடன் ஒப்பிடும்போது மிகவும் சிறிய குறியீட்டிற்குச் சாதகமாக மாற்றப்பட்டது. இன்லைன் செயல்பாடு வரிசைப்படுத்தலுக்கான ஹூரிஸ்டிக் பணி துரிதப்படுத்தப்பட்டுள்ளது. இன்லைன் விரிவாக்கம் மற்றும் செயல்பாடு குளோனிங் ஹூரிஸ்டிக்ஸ் இப்போது தனிப்பட்ட மாற்றங்களின் செயல்திறனைக் கணிக்க மதிப்பு வரம்புகள் பற்றிய தகவலைப் பயன்படுத்தலாம். C++ க்கு, வகை அடிப்படையிலான மாற்றுப் பாகுபடுத்தலின் துல்லியம் மேம்படுத்தப்பட்டுள்ளது.
  • மேம்படுத்தப்பட்ட இணைப்பு நேர மேம்படுத்தல்கள் (LTO). புதிய இயங்கக்கூடியது சேர்க்கப்பட்டது டம்ப் LTO பைட்கோடு மூலம் பொருள் கோப்புகள் பற்றிய தகவலை மீட்டமைக்க. இணையான LTO பாஸ்கள் தானாக ஒரே நேரத்தில் இயங்கும் பணிகளின் எண்ணிக்கையைத் தீர்மானிக்கின்றன, மேலும் அவற்றைத் தீர்மானிக்க முடியாவிட்டால், CPU கோர்களின் எண்ணிக்கையைப் பற்றிய தகவலை இணையாக்கும் காரணியாகப் பயன்படுத்துகின்றன. zstd அல்காரிதம் பயன்படுத்தி LTO பைட்கோடை சுருக்கும் திறன் சேர்க்கப்பட்டது.
  • குறியீட்டு விவரக்குறிப்பின் (PGO - Profile-guided optimization) முடிவுகளின் அடிப்படையிலான தேர்வுமுறை பொறிமுறை மேம்படுத்தப்பட்டுள்ளது, இது குறியீடு செயலாக்கத்தின் பண்புகளின் பகுப்பாய்வின் அடிப்படையில் மிகவும் உகந்த குறியீட்டை உருவாக்குகிறது. தொகுத்தல் மற்றும் சூடான/குளிர் குறியீடு பிரிப்பின் போது மேம்படுத்தப்பட்ட சுயவிவர பராமரிப்பு. விருப்பத்தின் மூலம் "-fprofile-மதிப்புகள்» இப்போது 4 சுயவிவர மதிப்புகள் வரை கண்காணிக்க முடியும், உதாரணமாக மறைமுக அழைப்புகள் மற்றும் மிகவும் துல்லியமான சுயவிவரத் தகவலை வழங்குதல்.
  • C, C++ மற்றும் Fortran மொழிகளுக்கு இணையான நிரலாக்க விவரக்குறிப்பு செயல்படுத்தப்பட்டது OpenACC 2.6, இது GPUகள் மற்றும் NVIDIA PTX போன்ற சிறப்பு செயலிகளில் ஆஃப்லோடிங் செயல்பாடுகளுக்கான கருவிகளை வரையறுக்கிறது. தரநிலையை நடைமுறைப்படுத்துவது கிட்டத்தட்ட முடிந்தது MP 5.0ஐத் திறக்கவும் (திறந்த பல-செயலாக்குதல்), இது API மற்றும் பகிர்ந்த நினைவகம் மற்றும் வெக்டரைசேஷன் யூனிட்களுடன் (SIMD) மல்டி-கோர் மற்றும் ஹைப்ரிட் (CPU+GPU/DSP) அமைப்புகளில் இணையான நிரலாக்க முறைகளைப் பயன்படுத்துவதற்கான முறைகளை வரையறுக்கிறது. கடைசி தனியார் நிபந்தனைகள், ஸ்கேன் மற்றும் லூப் வழிமுறைகள், ஆர்டர் மற்றும் use_device_addr வெளிப்பாடுகள் போன்ற அம்சங்கள் சேர்க்கப்பட்டன. ஓபன்எம்பி மற்றும் ஓபன்ஏசிசிக்கு, நான்காவது தலைமுறை (பிஜி) மற்றும் ஐந்தாம் தலைமுறை ஏஎம்டி ரேடியான் (ஜிசிஎன்) ஜிபியுக்கள் (வேகா 10/வேகா 20) ஆகியவற்றில் ஆஃப்லோடிங் செயல்பாடுகளுக்கு ஆதரவு சேர்க்கப்பட்டுள்ளது.
  • C குடும்பத்தின் மொழிகளுக்கு, "அணுகல்" செயல்பாடு குறிப்பு அல்லது சுட்டிக்காட்டி மூலம் அனுப்பப்பட்ட பொருள்களுக்கான செயல்பாட்டின் அணுகலை விவரிக்கவும், அத்தகைய பொருள்களை பொருட்களின் அளவு பற்றிய தகவல்களைக் கொண்ட முழு எண் வாதங்களுடன் தொடர்புபடுத்தவும் சேர்க்கப்பட்டுள்ளது. "அணுகல்" உடன் இணைந்து செயல்பட, பயனர் செயல்பாடுகளிலிருந்து தவறான அணுகலைக் கண்டறிய "வகை" பண்புக்கூறு செயல்படுத்தப்படுகிறது, எடுத்துக்காட்டாக, வரிசையின் எல்லைக்கு வெளியே ஒரு பகுதிக்கு மதிப்புகளை எழுதும் போது. குறிப்பிட்ட பதிப்பு எண்கள் கொண்ட ELF கோப்பில் உள்ள அசோசியேட் சின்னங்களுக்கான "symver" பண்பும் சேர்க்கப்பட்டுள்ளது.
  • புதிய எச்சரிக்கைகள் சேர்க்கப்பட்டன:
    • “-Wstring-compare” (“-Wextra” உடன் இயக்கப்பட்டது) - strcmp மற்றும் strncmp செயல்பாடுகளை அழைப்பதன் விளைவாக பூஜ்ஜியம் ஒப்பிடப்படும் வெளிப்பாடுகள் இருப்பதைப் பற்றி எச்சரிக்கிறது, இது நீளம் காரணமாக மாறிலிக்கு சமம் ஒரு வாதத்தின் அளவு இரண்டாவது வாதத்தில் உள்ள வரிசையின் அளவை விட அதிகமாக உள்ளது.
    • "-Wzero-length-bounds" ("-Warray-bounds" உடன் இயக்கப்பட்டது) - பூஜ்ஜிய நீளத்தின் வரிசை கூறுகளை அணுகுவது பற்றி எச்சரிக்கிறது, இது மற்ற தரவை மேலெழுதுவதற்கு வழிவகுக்கும்.
    • "-வார்ரே-எல்லைகள்", "-வொர்மேட்-ஓவர்ஃப்ளோ", "-ரெஸ்டிரிக்ட்", "-வ்ரெட்டர்ன்-லோக்கல்-ஆட்ர்" மற்றும் "-வ்ஸ்ட்ரிங்காப்-ஓவர்ஃப்ளோ" எச்சரிக்கைகள் எல்லைக்கு அப்பாற்பட்ட சூழ்நிலைகளின் எண்ணிக்கையை விரிவாக்க விரிவாக்கப்பட்டுள்ளன. என்று கையாளப்படுகின்றன.
  • UCN குறியீட்டை விட (\uNNNN அல்லது \UNNNNNNN) தற்போதைய குறியாக்கத்தை (இயல்புநிலையாக UTF-8) பயன்படுத்தி அடையாளங்காட்டிகளில் பரந்த எழுத்துக்களை நேரடியாகக் குறிப்பிடும் திறனை செயல்படுத்தியது. உதாரணத்திற்கு:

    நிலையான const int π = 3;
    int get_naïve_pi() {
    திரும்ப π;
    }

  • C மொழிக்கு, C2X தரநிலையில் உருவாக்கப்பட்ட புதிய அம்சங்களின் ஒரு பகுதி செயல்படுத்தப்பட்டது (-std=c2x மற்றும் -std=gnu2x எனக் குறிப்பிடுவதன் மூலம் இயக்கப்பட்டது): "[[]]" தொடரியலுக்கான ஆதரவு, பண்புக்கூறுகளை வரையறுப்பதற்குத் தோன்றியுள்ளது. C++ (எடுத்துக்காட்டாக, [[gnu ::const]], [[நிறுத்தப்பட்ட]], [[Falthrough]] மற்றும் [[maybe_unused]]. UTF-8 எழுத்துகளுடன் மாறிலிகளை வரையறுக்க "u8" தொடரியல் ஆதரவு சேர்க்கப்பட்டது.
    புதிய மேக்ரோக்கள் சேர்க்கப்பட்டது . strftime க்கு "%OB" மற்றும் "%Ob" மாற்றீடுகள் சேர்க்கப்பட்டது.

  • C க்கான இயல்புநிலை பயன்முறையானது "-fno-common" ஆகும், இது சில தளங்களில் உலகளாவிய மாறிகளுக்கு மிகவும் திறமையான அணுகலை அனுமதிக்கிறது.
  • C++ க்கு, சுமார் 16 மாற்றங்கள் மற்றும் புதுமைகள் செயல்படுத்தப்பட்டு, C++20 தரநிலையில் உருவாக்கப்பட்டது. சேர்க்கப்பட்ட முக்கிய சொல்லான “constinit” உட்பட
    மற்றும் டெம்ப்ளேட் நீட்டிப்புகளுக்கான ஆதரவு செயல்படுத்தப்பட்டது "கருத்துக்கள்". வார்ப்புரு அளவுரு தேவைகளின் தொகுப்பை வரையறுக்க கருத்துக்கள் உங்களை அனுமதிக்கின்றன, அவை தொகுக்கும் நேரத்தில், டெம்ப்ளேட் அளவுருக்களாக ஏற்றுக்கொள்ளக்கூடிய வாதங்களின் தொகுப்பைக் கட்டுப்படுத்துகின்றன. டெம்ப்ளேட்டிற்குள் பயன்படுத்தப்படும் தரவு வகைகளின் பண்புகள் மற்றும் உள்ளீட்டு அளவுருக்களின் தரவு வகை பண்புகளுக்கு இடையே உள்ள தர்க்கரீதியான முரண்பாடுகளைத் தவிர்க்க கருத்துகள் பயன்படுத்தப்படலாம்.

  • G++ ஆனது constexpr மூலம் நிலையான பொருள்களை மாற்றுவதால் ஏற்படும் வரையறுக்கப்படாத நடத்தையைக் கண்டறியும். constexpr ஐக் கணக்கிடும்போது கம்பைலரால் நினைவக நுகர்வு குறைக்கப்பட்டது. புதிய எச்சரிக்கைகள் "-Wmismatched-tags" மற்றும் "-Wredundant-tags" சேர்க்கப்பட்டது.
  • புதிய கட்டளை வரி விருப்பங்கள் முன்மொழியப்பட்டுள்ளன:
    • "-Falocation-dce" தேவையற்ற ஜோடி "புதிய" மற்றும் "நீக்கு" ஆபரேட்டர்களை அகற்றும்.
    • "-fprofile-partial-training" பயிற்சி ரன் இல்லாத குறியீட்டிற்கான அளவு தேர்வுமுறையை முடக்க.
    • "-fprofile-சுயவிவர மறுஉருவாக்கம் அளவைக் கட்டுப்படுத்த மறுஉருவாக்கம் செய்யக்கூடியது.
    • "-fprofile-prefix-path" தனி சுயவிவர உருவாக்கத்திற்கு பயன்படுத்தப்படும் அடிப்படை மூல உருவாக்க கோப்பகத்தை வரையறுக்க ("-fprofile-generate=profile_dir" மற்றும் "-fprofile-use=profile_dir").
  • குறிப்பிடப்பட்ட விருப்பங்களுக்கான எச்சரிக்கை உரையில், இந்த விருப்பங்களுக்கான ஆவணங்களுக்குச் செல்ல உங்களை அனுமதிக்கும் ஹைப்பர்லிங்க்கள் வழங்கப்பட்டுள்ளன. URL மாற்றீடு "-fdiagnostics-urls" விருப்பத்தைப் பயன்படுத்தி கட்டுப்படுத்தப்படுகிறது.
  • முன்செயலி இயக்கி சேர்க்கப்பட்டது"__உள்ளது", இது உள்ளமைக்கப்பட்ட செயல்பாடுகளைச் சரிபார்க்கப் பயன்படும்.
  • ISO/IEC TS 18661 விவரக்குறிப்பில் வரையறுக்கப்பட்ட ரவுண்டிங் செயல்பாட்டின் செயலாக்கத்துடன் புதிய உள்ளமைக்கப்பட்ட செயல்பாடு "__builtin_roundeven" சேர்க்கப்பட்டது. - கீழே (பூஜ்ஜியத்திற்கு), மற்றும் 0.5 க்கு சமம் - இறுதி இலக்கத்தின் சமநிலையிலிருந்து தொடங்குகிறது.
  • AArch64 கட்டமைப்பிற்கு, SVE2 நீட்டிப்புக்கான ஆதரவு சேர்க்கப்பட்டுள்ளது மற்றும் SVE (அளவிடக்கூடிய வெக்டர் நீட்டிப்பு)க்கான ஆதரவு மேம்படுத்தப்பட்டுள்ளது, இதில் உள்ளமைக்கப்பட்ட SVE ACLE செயல்பாடுகள் மற்றும் வகைகளுக்கான கூடுதல் ஆதரவு மற்றும் வெக்டரைசேஷன் பயன்பாடு ஆகியவை அடங்கும். LSE (பெரிய கணினி நீட்டிப்புகள்) மற்றும் TME (பரிவர்த்தனை நினைவக நீட்டிப்பு) ஆகியவற்றிற்கான ஆதரவு விரிவாக்கப்பட்டுள்ளது. Armv8.5-A மற்றும் Armv8.6-A இல் முன்மொழியப்பட்ட புதிய வழிமுறைகள் சேர்க்கப்பட்டன, இதில் சீரற்ற எண் உருவாக்கம், ரவுண்டிங், நினைவக குறிச்சொல் பிணைப்பு,
    bfloat16 மற்றும் மேட்ரிக்ஸ் பெருக்கல். செயலி ஆதரவு சேர்க்கப்பட்டது
    ஆர்ம் கார்டெக்ஸ்-A77,
    ஆர்ம் கார்டெக்ஸ்-A76AE,
    ஆர்ம் கார்டெக்ஸ்-A65,
    ஆர்ம் கார்டெக்ஸ்-A65AE,
    ஆர்ம் கார்டெக்ஸ்-A34 மற்றும்
    மார்வெல் தண்டர்எக்ஸ்3.

  • ARM32 க்கான ABI FDPIC (64-பிட் செயல்பாட்டு சுட்டிகள்) ஆதரவு சேர்க்கப்பட்டது. 64-பிட் முழு எண் செயல்பாடுகளின் மறுவடிவமைப்பு மற்றும் உகந்த செயலாக்கம். CPU ஆதரவு சேர்க்கப்பட்டது
    ஆர்ம் கார்டெக்ஸ்-A77,
    ஆர்ம் கார்டெக்ஸ்-A76AE மற்றும்
    ஆர்ம் கார்டெக்ஸ்-எம்35பி. 32-பிட் SIMD, 16-பிட் பெருக்கல், தாழ்ப்பாள் எண்கணிதம் மற்றும் பிற DSP அல்காரிதம் மேம்படுத்தல்கள் உட்பட ACLE தரவு செயலாக்க வழிமுறைகளுக்கான விரிவாக்கப்பட்ட ஆதரவு. ACLE CDE (Custom Datapath Extension) வழிமுறைகளுக்கான சோதனை ஆதரவு சேர்க்கப்பட்டது.

  • GCN மைக்ரோஆர்கிடெக்சரை அடிப்படையாகக் கொண்ட AMD GPUகளுக்கான பின்தளத்தில் குறிப்பிடத்தக்க வகையில் மேம்படுத்தப்பட்ட குறியீடு உருவாக்கம் மற்றும் வெக்டரைசேஷன்.
  • AVR கட்டமைப்பிற்கான XMEGA போன்ற சாதனங்களுக்கான ஆதரவு சேர்க்கப்பட்டது
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608 1609, ATmega3208, ATmega3209 4808, ATmega4809 மற்றும் ATmegaXNUMX.

  • IA-32/x86-64 கட்டமைப்புகளுக்கு ஒரு புதிய Intel ENQCMD இன்ஸ்ட்ரக்ஷன் செட் ஆர்கிடெக்சர் நீட்டிப்பு (-menqcmd) சேர்க்கப்பட்டுள்ளது. Intel Cooperlake (-march=cooperlake, AVX512BF16 ISA நீட்டிப்பை உள்ளடக்கியது) மற்றும் Tigerlake (-march=tigerlake, MOVDIRI, MOVDIR64B மற்றும் AVX512VP2INTERSECT ISA நீட்டிப்புகளை உள்ளடக்கியது) CPUகளுக்கான ஆதரவு சேர்க்கப்பட்டது.
  • HSA கட்டமைப்பின் அடிப்படையிலான பன்முக கணினி அமைப்புகளுக்கான HSAIL (Heterogeneous System Architecture Intermediate Language) இன் செயலாக்கம் நிராகரிக்கப்பட்டது மற்றும் எதிர்கால வெளியீட்டில் அகற்றப்படும்.

ஆதாரம்: opennet.ru

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