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 සඳහා පසුබිම්.

ප්රධාන වෙනස්:

  • ඩී ක්‍රමලේඛන භාෂාව සඳහා සහය එක් කරන ලදී. GCC හි සම්පාදකයක් සහිත ඉදිරිපස ඇත GDC (Gnu D Compiler) සහ ධාවන කාල පුස්තකාල (libphobos), D ක්‍රමලේඛන භාෂාවෙන් වැඩසටහන් තැනීමට සම්මත GCC භාවිතා කිරීමට ඔබට ඉඩ සලසයි. GCC හි D භාෂා සහාය සක්‍රීය කිරීමේ ක්‍රියාවලිය ආරම්භ වී ඇත ආපසු 2011 දී, නමුත් ඇදගෙන ගියා GCC අවශ්‍යතා වලට අනුකූලව කේතය ගෙන ඒමේ අවශ්‍යතාවය සහ D ක්‍රමලේඛන භාෂාව සංවර්ධනය කරන ඩිජිටල් අඟහරු වෙත බුද්ධිමය දේපල හිමිකම් පැවරීමේ ගැටළු හේතුවෙන්;
  • කේත උත්පාදකයේ වැඩිදියුණු කිරීම් සිදු කර ඇත. උදාහරණයක් ලෙස, අවස්ථා මත පදනම්ව ස්විච් ප්‍රකාශන (ජම්ප් ටේබල්, බිට් ටෙස්ට්, තීරණ ගස) පුළුල් කිරීම සඳහා විවිධ උපාය මාර්ග භාවිතා කිරීම ක්‍රියාත්මක කර ඇත. “-ftree-switch-conversion” ප්‍රශස්තකරණය භාවිතයෙන් ස්විච් ප්‍රකාශනයක් ඇතුළත් රේඛීය ශ්‍රිත පරිවර්තනය කිරීමේ හැකියාව එක් කරන ලදී (උදාහරණයක් ලෙස, “case 2: how = 205; break; case 3: how = 305; break ;” "100 * how + 5" බවට පරිවර්තනය වේ;
  • වැඩිදියුණු කළ අන්තර් ක්‍රියා පටිපාටි ප්‍රශස්තකරණය. පේළිගත යෙදවුම් සැකසීම් නවීන C++ කේත පදනම සඳහා අනුවර්තනය කර ඇති අතර max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns සහ uninlined යන නව පරාමිති සමඟින් පුළුල් කර ඇත. - thunk-time. සීතල/උණුසුම් කේත වෙන්කිරීමේ නිරවද්‍යතාවය සහ ආක්‍රමණශීලී බව වැඩිදියුණු කිරීම. ඉතා විශාල සඳහා වැඩි දියුණු කළ පරිමාණය පරිවර්තන ඒකක (උදාහරණයක් ලෙස, විශාල වැඩසටහන් වලට සම්බන්ධ කිරීමේ අදියරේදී ප්රශස්තකරණය යොදන විට);
  • කේත ප්‍රොෆයිල් කිරීමේ ප්‍රතිඵල මත පදනම් වූ ප්‍රශස්තකරණ යාන්ත්‍රණය (PGO - පැතිකඩ-මාර්ගෝපදේශ ප්‍රශස්තකරණය) වැඩිදියුණු කර ඇත, එය කේත ක්‍රියාත්මක කිරීමේ ලක්ෂණ විශ්ලේෂණයක් මත පදනම්ව වඩාත් ප්‍රශස්ත කේතයක් ජනනය කරයි. සාරාංශ විකල්පය "-fprofile-භාවිතය"දැන් "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" සහ "-ftree-loop-distribution" යන ප්‍රශස්තිකරණ මාදිලි ඇතුළත් වේ. ලිපිගොනු වල කවුන්ටර සහිත හිස්ටෝග්‍රෑම් ඇතුළත් කිරීම ඉවත් කරන ලද අතර එමඟින් පැතිකඩ සහිත ගොනු වල ප්‍රමාණය අඩු විය (සම්බන්ධ කිරීමේදී ප්‍රශස්තිකරණය සිදු කරන විට හිස්ටෝග්‍රෑම් දැන් පියාසර කරන විට ජනනය වේ);
  • වැඩිදියුණු කළ සම්බන්ධක කාල ප්‍රශස්තකරණය (LTO). ප්‍රති result ලය උත්පාදනය කිරීමට පෙර වර්ග සරල කිරීම සපයන ලද අතර එමඟින් LTO වස්තු ගොනු වල ප්‍රමාණය සැලකිය යුතු ලෙස අඩු කිරීමට, බන්ධන අවධියේදී මතක පරිභෝජනය අඩු කිරීමට සහ මෙහෙයුම් සමාන්තරකරණය වැඩි දියුණු කිරීමට හැකි විය. කොටස් ගණන (-param lto-partitions) 32 සිට 128 දක්වා වැඩි කර ඇති අතර, එය CPU නූල් විශාල සංඛ්‍යාවක් සහිත පද්ධතිවල ක්‍රියාකාරිත්වය වැඩි දියුණු කරයි. ප්‍රශස්තිකරණ ක්‍රියාවලි ගණන පාලනය කිරීමට පරාමිතියක් එකතු කර ඇත
    "-param lto-max-streaming-parallelism";

    එහි ප්‍රතිඵලයක් වශයෙන්, GCC 8.3 හා සසඳන විට, GCC 9 හි හඳුන්වා දුන් ප්‍රශස්තකරණයන් අවසර Firefox 5 සහ LibreOffice 66 හි සම්පාදන කාලය 6.2.3% කින් පමණ අඩු කරන්න. වස්තු ගොනු වල ප්‍රමාණය 7% කින් අඩු විය. 8-core CPU එකක බන්ධන කාලය 11%කින් අඩු විය. සම්බන්ධ කිරීමේ අදියරේ අනුක්‍රමික ප්‍රශස්තිකරණ අදියර දැන් 28% වේගවත් වන අතර 20% අඩු මතකයක් පරිභෝජනය කරයි. LTO හි සමාන්තර අවධියේ එක් එක් ප්‍රොසෙසරයේ මතක පරිභෝජනය 30% කින් අඩු විය;

  • බොහෝ සමාන්තර ක්‍රමලේඛන පිරිවිතර C, C++ සහ Fortran භාෂා සඳහා ක්‍රියාත්මක වේ OpenACC 2.5, GPU වල සහ NVIDIA PTX වැනි විශේෂිත ප්‍රොසෙසරවල ඕෆ්ලෝඩ් මෙහෙයුම් සඳහා මෙවලම් නිර්වචනය කරයි;
  • C සහ C++ සඳහා ප්‍රමිතිය සඳහා අර්ධ සහාය ක්‍රියාත්මක කර ඇත MP 5.0 විවෘත කරන්න (Open Multi-Processing), එය API නිර්වචනය කරන අතර C, C++ සහ Fortran භාෂා සඳහා සමාන්තර ක්‍රමලේඛන ක්‍රම භාවිතා කරන බහු-core සහ hybrid (CPU+GPU/DSP) පද්ධතිවල හවුල් මතකය සහ දෛශික ඒකක (SIMD) ;
  • C භාෂාව සඳහා නව අනතුරු ඇඟවීම් එකතු කර ඇත: "--ඇසුරුම්-සාමාජිකයාගේ ඇඳුම" (ව්‍යුහයක හෝ සමිතියක ඇසුරුම් කළ සාමාජිකයෙකුට නොගැලපෙන දර්ශකයේ අගය) සහ
    «- නිරපේක්ෂ අගය" (නිරපේක්ෂ අගයක් ගණනය කිරීම සඳහා ශ්‍රිත වෙත ප්‍රවේශ වන විට, නිශ්චිත තර්කය සඳහා වඩාත් සුදුසු ශ්‍රිතයක් තිබේ නම්, උදාහරණයක් ලෙස, abs(3.14) වෙනුවට fabs(3.14) භාවිතා කළ යුතුය. C++ සඳහා නව අනතුරු ඇඟවීම් එකතු කරන ලදී: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" සහ "-Wclass-conversion". පෙර පැවති බොහෝ අනතුරු ඇඟවීම් පුළුල් කර ඇත;

  • C2x කේත නාමයෙන් අනාගත C භාෂා ප්‍රමිතියේ කොටසක් සඳහා පර්යේෂණාත්මක සහාය එක් කරන ලදී. C2x සහාය සක්‍රීය කිරීමට, "-std=c2x" සහ "-std=gnu2x" (GNU දිගු සක්‍රීය කිරීමට) විකල්ප භාවිතා කරන්න. ප්‍රමිතිය තවමත් සංවර්ධනයේ මුල් අවධියේ පවතී, එබැවින් එහි හැකියාවන් සම්බන්ධයෙන්, එක් තර්කයක් සහිත _Static_assert ප්‍රකාශනය පමණක් සහාය දක්වයි (C11 හි තර්ක දෙකක් සහිත _Static_assert ප්‍රමිතිගත කර ඇත);
  • 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 point:sd: සඳහා libstdc++ වෙත bit සහ අනුවාද ශීර්ෂ ගොනු එක් කරන ලදී , 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. සංකීර්ණ සංඛ්‍යා, ව්‍යාජ සසම්භාවී සංඛ්‍යා උත්පාදනය (rng) සහ මතක ටැග් කිරීම (memtag) සමඟ වැඩ කිරීම සඳහා 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]” විකල්පය මඟින් අන්තර් ක්‍රියා පටිපාටි භාවිතය පිළිබඳ බහු-මට්ටමේ පාලනය හේතුවෙන් සජීවී-පෑච් පද්ධති සඳහා ආරක්ෂිත සම්පාදනය ලබා ගැනීමට ඔබට ඉඩ සලසයි (IPA) ප්රශස්තකරණයන්;
  • bash භාවිතා කරන විට විකල්ප සම්පූර්ණ කිරීමේ සියුම් පාලනය සඳහා "--completion" විකල්පය එකතු කරන ලදී;
  • රෝග විනිශ්චය මෙවලම් මඟින් රේඛා අංකය දැක්වෙන මූලාශ්‍ර පෙළ උපුටා දැක්වීම් සහ ඔපෙරන්ඩ් වර්ග වැනි අදාළ තොරතුරු දෘශ්‍යමය වශයෙන් සලකුණු කරයි. රේඛා අංක සහ ලේබල සංදර්ශනය අක්‍රිය කිරීමට, "-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_speculation_safe_value". ශ්‍රිත, විචල්‍ය සහ වර්ග සඳහා නව ගුණාංගයක් එක් කර ඇත පිටපතක්;
  • ෆෝට්‍රාන් භාෂාව සඳහා අසමමුහුර්ත ආදානය/ප්‍රතිදානය සඳහා පූර්ණ සහාය ක්‍රියාත්මක කර ඇත;
  • Solaris 10 (*-*-solaris2.10) සහ Cell/BE (Cell Broadband Engine SPU) වේදිකා සඳහා සහය අත්හරින ලද අතර මීළඟ ප්‍රධාන නිකුතුවේදී ඉවත් කරනු ලැබේ. Armv2, Armv3, Armv5 සහ Armv5E ගෘහනිර්මාණ සඳහා සහාය අත්හිටුවා ඇත. Intel MPX (Memory Protection Extensions) සඳහා වන සහය අත්හිටුවා ඇත.

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න