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

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

GCC 9.1 ஆனது C++17 தரநிலைக்கான ஆதரவை நிலைநிறுத்துவதில் குறிப்பிடத்தக்கது, எதிர்கால C++20 தரநிலையின் (C++2a குறியீட்டுப் பெயரிடப்பட்டது), D மொழிக்கான முன்பகுதியில் சேர்த்தல், OpenMP 5.0க்கான பகுதி ஆதரவு ஆகியவற்றை தொடர்ந்து செயல்படுத்துகிறது. , OpenACC 2.5க்கு கிட்டத்தட்ட முழுமையான ஆதரவு, பிணைப்பு கட்டத்தில் இடைச்செயல்முறை மேம்படுத்தல்கள் மற்றும் மேம்படுத்தல்களின் அளவிடுதல், கண்டறியும் கருவிகளின் விரிவாக்கம் மற்றும் புதிய எச்சரிக்கைகள், OpenRISC, C-SKY V2 மற்றும் AMD GCN GPU க்கான பின்தளங்கள்.

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

  • D நிரலாக்க மொழிக்கான ஆதரவு சேர்க்கப்பட்டது. GCC ஆனது கம்பைலருடன் கூடிய முன்பகுதியை உள்ளடக்கியது GDC (Gnu D Compiler) மற்றும் இயக்க நேர நூலகங்கள் (libphobos), இது D நிரலாக்க மொழியில் நிரல்களை உருவாக்க நிலையான GCC ஐப் பயன்படுத்த உங்களை அனுமதிக்கிறது, GCC இல் D மொழி ஆதரவை செயல்படுத்தும் செயல்முறை ஆரம்பித்துவிட்டது மீண்டும் 2011 இல், ஆனால் இழுத்துச் செல்லப்பட்டது ஜி.சி.சி தேவைகளுக்கு இணங்க குறியீட்டைக் கொண்டுவர வேண்டிய அவசியம் மற்றும் டி நிரலாக்க மொழியை உருவாக்கும் டிஜிட்டல் மார்ஸுக்கு அறிவுசார் சொத்துரிமைகளை மாற்றுவதில் உள்ள சிக்கல்கள் காரணமாக;
  • குறியீடு ஜெனரேட்டரில் மேம்பாடுகள் செய்யப்பட்டுள்ளன. எடுத்துக்காட்டாக, சூழ்நிலைகளைப் பொறுத்து ஸ்விட்ச் வெளிப்பாடுகளை (ஜம்ப் டேபிள், பிட் டெஸ்ட், டிசிஷன் ட்ரீ) விரிவுபடுத்துவதற்கான வெவ்வேறு உத்திகளின் பயன்பாடு செயல்படுத்தப்பட்டுள்ளது. "-ftree-switch-conversion" ஆப்டிமைசேஷனைப் பயன்படுத்தி ஸ்விட்ச் வெளிப்பாடு அடங்கிய நேரியல் செயல்பாடுகளை மாற்றும் திறன் சேர்க்கப்பட்டது (எடுத்துக்காட்டாக, "case 2: how = 205; break; case 3: how = 305; break ;” "100 * எப்படி + 5" ஆக மாற்றப்படும்;
  • மேம்படுத்தப்பட்ட இடைச்செயல்முறை மேம்படுத்தல்கள். இன்லைன் வரிசைப்படுத்தல் அமைப்புகள் நவீன C++ கோட்பேஸ்களுக்குத் தழுவி புதிய அளவுருக்கள் max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns மற்றும் uninlined ஆகிய புதிய அளவுருக்களுடன் விரிவாக்கப்பட்டுள்ளன. - நன்றி நேரம். குளிர்/சூடான குறியீடு பிரித்தலின் மேம்படுத்தப்பட்ட துல்லியம் மற்றும் ஆக்கிரமிப்பு. மிகப் பெரியவற்றுக்கு மேம்படுத்தப்பட்ட அளவிடுதல் மொழிபெயர்ப்பு அலகுகள் (எடுத்துக்காட்டாக, பெரிய நிரல்களுடன் இணைக்கும் கட்டத்தில் தேர்வுமுறையைப் பயன்படுத்தும்போது);
  • குறியீட்டு விவரக்குறிப்பின் (PGO - Profile-guided optimization) முடிவுகளின் அடிப்படையிலான தேர்வுமுறை பொறிமுறை மேம்படுத்தப்பட்டுள்ளது, இது குறியீடு செயலாக்கத்தின் பண்புகளின் பகுப்பாய்வின் அடிப்படையில் மிகவும் உகந்த குறியீட்டை உருவாக்குகிறது. சுருக்க விருப்பம் "-fprofile-பயன்பாடுஇப்போது தேர்வுமுறை முறைகள் "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" மற்றும் "-ftree-loop-distribution" ஆகியவை அடங்கும். கோப்புகளில் கவுண்டர்களுடன் ஹிஸ்டோகிராம்கள் சேர்க்கப்படுவது நீக்கப்பட்டது, இது சுயவிவரங்களுடன் கோப்புகளின் அளவைக் குறைத்தது (இணைக்கும் போது மேம்படுத்தல்களைச் செய்யும்போது ஹிஸ்டோகிராம்கள் இப்போது பறக்கும் போது உருவாக்கப்படுகின்றன);
  • மேம்படுத்தப்பட்ட இணைப்பு நேர மேம்படுத்தல்கள் (LTO). முடிவை உருவாக்கும் முன் வகைகளின் எளிமைப்படுத்தல் வழங்கப்பட்டது, இது LTO ஆப்ஜெக்ட் கோப்புகளின் அளவைக் கணிசமாகக் குறைக்கவும், பிணைப்பு கட்டத்தில் நினைவக நுகர்வு குறைக்கவும் மற்றும் செயல்பாடுகளின் இணையாக மேம்படுத்தவும் சாத்தியமாக்கியது. பகிர்வுகளின் எண்ணிக்கை (-param lto-partitions) 32 இலிருந்து 128 ஆக அதிகரிக்கப்பட்டுள்ளது, இது அதிக எண்ணிக்கையிலான CPU த்ரெட்களைக் கொண்ட கணினிகளில் செயல்திறனை மேம்படுத்துகிறது. ஆப்டிமைசர் செயல்முறைகளின் எண்ணிக்கையைக் கட்டுப்படுத்த ஒரு அளவுரு சேர்க்கப்பட்டுள்ளது
    "-பரம் lto-max-streaming-parallelism";

    இதன் விளைவாக, GCC 8.3 உடன் ஒப்பிடும்போது, ​​GCC 9 இல் அறிமுகப்படுத்தப்பட்ட மேம்படுத்தல்கள் அனுமதிக்கப்பட்டது Firefox 5 மற்றும் LibreOffice 66 ஆகியவற்றின் தொகுப்பு நேரத்தை சுமார் 6.2.3% குறைக்கிறது. பொருள் கோப்புகளின் அளவு 7% குறைந்துள்ளது. 8-கோர் CPU இல் பைண்டிங் நேரம் 11% குறைந்துள்ளது. இணைக்கும் நிலையின் வரிசைமுறை மேம்படுத்தல் நிலை இப்போது 28% வேகமானது மற்றும் 20% குறைவான நினைவகத்தைப் பயன்படுத்துகிறது. LTO இன் இணையான நிலையின் ஒவ்வொரு செயலியின் நினைவக நுகர்வு 30% குறைந்துள்ளது;

  • பெரும்பாலான இணை நிரலாக்க விவரக்குறிப்புகள் C, C++ மற்றும் Fortran மொழிகளுக்கு செயல்படுத்தப்படுகின்றன OpenACC 2.5, இது GPUகள் மற்றும் NVIDIA PTX போன்ற சிறப்பு செயலிகளில் ஆஃப்லோடிங் செயல்பாடுகளுக்கான கருவிகளை வரையறுக்கிறது;
  • C மற்றும் C++ க்கு தரநிலைக்கான பகுதி ஆதரவு செயல்படுத்தப்பட்டுள்ளது MP 5.0ஐத் திறக்கவும் (திறந்த பல-செயலாக்குதல்), இது API மற்றும் C, C++ மற்றும் Fortran மொழிகளுக்கான இணையான நிரலாக்க முறைகளை மல்டி-கோர் மற்றும் ஹைப்ரிட் (CPU+GPU/DSP) அமைப்புகளில் பகிரப்பட்ட நினைவகம் மற்றும் வெக்டரைசேஷன் யூனிட்களுடன் (SIMD) வரையறுக்கிறது. ;
  • C மொழிக்கு புதிய எச்சரிக்கைகள் சேர்க்கப்பட்டுள்ளன: "நிரம்பிய-உறுப்பினர்" (ஒரு அமைப்பு அல்லது தொழிற்சங்கத்தின் நிரம்பிய உறுப்பினருக்கு சீரமைக்கப்படாத சுட்டிக்காட்டி மதிப்பு) மற்றும்
    «-முழு-மதிப்பு" (ஒரு முழுமையான மதிப்பைக் கணக்கிடுவதற்கான செயல்பாடுகளை அணுகும் போது, ​​குறிப்பிட்ட வாதத்திற்கு மிகவும் பொருத்தமான செயல்பாடு இருந்தால், எடுத்துக்காட்டாக, abs(3.14)க்குப் பதிலாக fabs(3.14) பயன்படுத்தப்பட வேண்டும். C++ க்கு புதிய எச்சரிக்கைகள் சேர்க்கப்பட்டன: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" மற்றும் "-Wclass-conversion". முன்னர் கிடைத்த பல எச்சரிக்கைகள் விரிவுபடுத்தப்பட்டுள்ளன;

  • எதிர்கால C மொழி தரநிலையின் ஒரு பகுதிக்கு சோதனை ஆதரவு சேர்க்கப்பட்டது, C2x குறியீட்டுப் பெயர். C2x ஆதரவை இயக்க, "-std=c2x" மற்றும் "-std=gnu2x" (GNU நீட்டிப்புகளை இயக்க) விருப்பங்களைப் பயன்படுத்தவும். தரநிலை இன்னும் வளர்ச்சியின் ஆரம்ப கட்டத்தில் உள்ளது, எனவே, அதன் திறன்களில், ஒரு வாதத்துடன் கூடிய _Static_assert என்ற வெளிப்பாடு மட்டுமே ஆதரிக்கப்படுகிறது (_Static_assert இரண்டு வாதங்களுடன் C11 இல் தரப்படுத்தப்பட்டுள்ளது);
  • C++17 தரநிலைக்கான ஆதரவு நிலையானதாக அறிவிக்கப்பட்டுள்ளது. முன்பகுதியில், C++17 இன் மொழித் திறன்கள் முழுமையாகச் செயல்படுத்தப்படுகின்றன, மேலும் libstdc++ இல், தரநிலையில் வரையறுக்கப்பட்ட நூலகச் செயல்பாடுகள் முழுமையாகச் செயல்படுத்தப்படுவதற்கு அருகில் உள்ளன;
  • தொடர்ந்தது செயல்படுத்த எதிர்கால C++2a தரநிலையின் கூறுகள். எடுத்துக்காட்டாக, துவக்கத்தின் போது வரம்புகளைச் சேர்க்கும் திறன் சேர்க்கப்பட்டுள்ளது, லாம்ப்டா வெளிப்பாடுகளுக்கான நீட்டிப்புகள் செயல்படுத்தப்பட்டுள்ளன, தரவு கட்டமைப்புகளின் வெற்று உறுப்பினர்களுக்கான ஆதரவு மற்றும் வாய்ப்பு/சாத்தியமற்ற பண்புக்கூறுகள் சேர்க்கப்பட்டுள்ளன, நிபந்தனை வெளிப்பாடுகளில் மெய்நிகர் செயல்பாடுகளை அழைக்கும் திறன் வழங்கப்பட்டுள்ளது. , முதலியன
    C++2a ஆதரவை இயக்க, "-std=c++2a" மற்றும் "-std=gnu++2a" விருப்பங்களைப் பயன்படுத்தவும். C++2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible மற்றும் std::type_identity traits:std pointerp:sd: , std::bind_front,
    std::visit, std::is_constant_evaluated மற்றும் std::assume_aligned, char8_t வகைக்கான ஆதரவைச் சேர்த்தது, சரங்களின் முன்னொட்டு மற்றும் பின்னொட்டைச் சரிபார்க்கும் திறனைச் செயல்படுத்தியது (தொடக்க_வித், முடிவு_வித்);

  • புதிய ARM செயலிகளுக்கான ஆதரவு சேர்க்கப்பட்டது
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE மற்றும் Neoverse N1. சிக்கலான எண்கள், போலி-ரேண்டம் எண் உருவாக்கம் (ஆர்என்ஜி) மற்றும் மெமரி டேக்கிங் (மெம்டேக்) ஆகியவற்றுடன் பணிபுரிய Armv8.3-A இல் அறிமுகப்படுத்தப்பட்ட அறிவுறுத்தல்களுக்கான ஆதரவு சேர்க்கப்பட்டது . AArch64 கட்டமைப்பிற்கு, ஒரு பாதுகாப்பு முறை சேர்க்கப்பட்டுள்ளது அடுக்கு மற்றும் குவியலின் குறுக்குவெட்டுகள் ("-fstack-clash-protection"). Armv8.5-A கட்டமைப்பின் அம்சங்களைப் பயன்படுத்த, “-march=armv8.5-a” விருப்பம் சேர்க்கப்பட்டுள்ளது.

  • இது GCN மைக்ரோஆர்கிடெக்சரின் அடிப்படையில் AMD GPUகளுக்கான குறியீட்டை உருவாக்குவதற்கான பின்தளத்தை உள்ளடக்கியது. செயல்படுத்தல் தற்போது ஒற்றை-திரிக்கப்பட்ட பயன்பாடுகளின் தொகுப்பிற்கு மட்டுப்படுத்தப்பட்டுள்ளது (OpenMP மற்றும் OpenACC வழியாக பல-திரிக்கப்பட்ட கணக்கீடுகளை மேற்கொள்வதற்கான ஆதரவு பின்னர் வழங்கப்படும்) மற்றும் GPU Fiji மற்றும் Vega 10 க்கான ஆதரவு;
  • செயலிகளுக்கு புதிய பின்தளம் சேர்க்கப்பட்டது OpenRISC;
  • செயலிகளுக்கு பின்தளத்தில் சேர்க்கப்பட்டது C-SKY V2, பல்வேறு நுகர்வோர் சாதனங்களுக்கு அதே பெயரில் சீன நிறுவனத்தால் தயாரிக்கப்பட்டது;
  • பைட் மதிப்புகளை இயக்கும் அனைத்து கட்டளை வரி விருப்பங்களும் kb, KiB, MB, MiB, GB மற்றும் GiB பின்னொட்டுகளை ஆதரிக்கின்றன;
  • செயல்படுத்தப்பட்டது "-flive-patching=[inline-only-static|inline-clone]" விருப்பமானது, இடைச்செயல்முறையின் பயன்பாட்டின் மீது பல-நிலைக் கட்டுப்பாட்டின் காரணமாக நேரடி-ஒட்டு அமைப்புகளுக்கான பாதுகாப்பான தொகுப்பை அடைய உங்களை அனுமதிக்கிறது (ஐபிஏ) மேம்படுத்தல்கள்;
  • பாஷைப் பயன்படுத்தும் போது விருப்பத்தை நிறைவு செய்வதற்கான நுணுக்கமான கட்டுப்பாட்டிற்காக "--நிறைவு" விருப்பம் சேர்க்கப்பட்டது;
  • கண்டறியும் கருவிகள் வரி எண்ணைக் குறிக்கும் மூல உரை பகுதிகளின் காட்சிகளை வழங்குகின்றன மற்றும் ஓபராண்ட் வகைகள் போன்ற தொடர்புடைய தகவல்களை பார்வைக்குக் குறிக்கின்றன. வரி எண்கள் மற்றும் லேபிள்களின் காட்சியை முடக்க, "-fno-diagnostics-show-line-numbers" மற்றும் "-fno-diagnostics-show-labels" விருப்பங்கள் வழங்கப்படுகின்றன;

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

  • விரிவாக்கப்பட்டது C++ குறியீட்டில் பிழைகளைக் கண்டறிவதற்கான கருவிகள், பிழைகள் மற்றும் சிக்கல் அளவுருக்களை முன்னிலைப்படுத்துவதற்கான காரணங்கள் பற்றிய தகவல்களை மேம்படுத்துதல்;

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

  • "-fdiagnostics-format=json" விருப்பம் சேர்க்கப்பட்டது, இது இயந்திரம் படிக்கக்கூடிய வடிவத்தில் (JSON) கண்டறியும் வெளியீட்டை உருவாக்க அனுமதிக்கிறது;
  • செயலாக்கப்பட வேண்டிய மூலக் கோப்புகளைத் தேர்ந்தெடுக்க புதிய விவரக்குறிப்பு விருப்பங்கள் “-fprofile-filter-files” மற்றும் “-fprofile-exclude-files” சேர்க்கப்பட்டது;
  • AddressSanitizer ஆனது தானியங்கு மாறிகளுக்கு மிகவும் கச்சிதமான சரிபார்ப்புக் குறியீட்டை உருவாக்குகிறது, இது சரிபார்க்கப்படும் இயங்கக்கூடிய கோப்பின் நினைவக நுகர்வைக் குறைக்கிறது;
  • மேம்படுத்தப்பட்ட வெளியீடு "-fopt-தகவல்» (சேர்க்கப்பட்ட மேம்படுத்தல்கள் பற்றிய விரிவான தகவல்). முன்னர் கிடைக்கக்கூடிய "குறிப்பு" முன்னொட்டுடன் கூடுதலாக "உகந்ததாக" மற்றும் "தவறிவிட்டது" என்ற புதிய முன்னொட்டுகள் சேர்க்கப்பட்டன. இன்லைன்-அன்ஃபோல்டிங் மற்றும் சுழற்சிகளின் வெக்டரைசேஷன் ஆகியவற்றில் முடிவெடுப்பது பற்றிய தகவலின் வெளியீடு சேர்க்கப்பட்டது;
  • "-fsave-optimization-record" விருப்பம் சேர்க்கப்பட்டது, குறிப்பிடப்பட்டால், GCC ஆனது SRCFILE.opt-record.json.gz கோப்பை சில மேம்படுத்தல்களின் பயன்பாடு குறித்த முடிவுகளின் விளக்கத்துடன் சேமிக்கிறது. சுயவிவரம் மற்றும் இன்லைன் சங்கிலிகள் போன்ற கூடுதல் மெட்டாடேட்டாவைச் சேர்ப்பதன் மூலம் புதிய விருப்பம் “-fopt-info” பயன்முறையிலிருந்து வேறுபடுகிறது;
  • ஸ்டாக் சீரமைப்பைக் கட்டுப்படுத்த “-fipa-stack-alignment” மற்றும் “-fipa-reference-addressable” விருப்பங்கள் சேர்க்கப்பட்டன மற்றும் இடைச்செயல்முறை மேம்படுத்தல்களின் போது நிலையான மாறிகளுக்கான முகவரி முறைகளை (எழுத-மட்டும் அல்லது படிக்க-சரியான) பயன்படுத்துதல்;
  • பண்புக்கூறு பிணைப்பைக் கட்டுப்படுத்த புதிய உள்ளமைக்கப்பட்ட செயல்பாடுகள் அறிமுகப்படுத்தப்பட்டுள்ளன.__builtin_has_attribute" '__builtin_expect_with_probability"மற்றும்"__builtin_speculation_safe_value". செயல்பாடுகள், மாறிகள் மற்றும் வகைகளுக்கு புதிய பண்புக்கூறு சேர்க்கப்பட்டுள்ளது பிரதியை;
  • ஒத்திசைவற்ற உள்ளீடு/வெளியீட்டிற்கான முழு ஆதரவு Fortran மொழிக்கு செயல்படுத்தப்பட்டுள்ளது;
  • Solaris 10 (*-*-solaris2.10) மற்றும் Cell/BE (Cell Broadband Engine SPU) இயங்குதளங்களுக்கான ஆதரவு நிறுத்தப்பட்டது மற்றும் அடுத்த பெரிய வெளியீட்டில் அகற்றப்படும். Armv2, Armv3, Armv5 மற்றும் Armv5E கட்டமைப்புகளுக்கான ஆதரவு நிறுத்தப்பட்டது. இன்டெல் எம்பிஎக்ஸ் (நினைவகப் பாதுகாப்பு நீட்டிப்புகள்)க்கான ஆதரவு நிறுத்தப்பட்டது.

ஆதாரம்: opennet.ru

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