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 bytecode සමඟ වස්තු ගොනු පිළිබඳ තොරතුරු නැවත සැකසීමට. සමාන්තර LTO පාස් ස්වයංක්‍රීයව ක්‍රියාත්මක වන කාර්යයන් ගණන තීරණය කරන අතර, ඒවා තීරණය කළ නොහැකි නම්, සමාන්තරකරණ සාධකයක් ලෙස CPU මධ්‍ය ගණන පිළිබඳ තොරතුරු භාවිතා කරයි. zstd ඇල්ගොරිතම භාවිතයෙන් LTO බයිට්කේත සංකෝචනය කිරීමේ හැකියාව එක් කරන ලදී.
  • කේත ප්‍රොෆයිල් කිරීමේ ප්‍රතිඵල මත පදනම් වූ ප්‍රශස්තකරණ යාන්ත්‍රණය (PGO - පැතිකඩ-මාර්ගෝපදේශ ප්‍රශස්තකරණය) වැඩිදියුණු කර ඇත, එය කේත ක්‍රියාත්මක කිරීමේ ලක්ෂණ විශ්ලේෂණයක් මත පදනම්ව වඩාත් ප්‍රශස්ත කේතයක් ජනනය කරයි. සම්පාදනය කිරීමේදී සහ උණුසුම්/සීතල කේත වෙන් කිරීමේදී වැඩිදියුණු කළ පැතිකඩ නඩත්තු කිරීම. විකල්පය හරහා "-fprofile-අගය» දැන් පැතිකඩ අගයන් 4ක් දක්වා නිරීක්ෂණය කළ හැක, උදාහරණයක් ලෙස වක්‍ර ඇමතුම් සහ වඩාත් නිවැරදි පැතිකඩ තොරතුරු සැපයීම සඳහා.
  • C, C++ සහ Fortran භාෂා සඳහා ක්‍රියාත්මක සමාන්තර ක්‍රමලේඛන පිරිවිතර OpenACC 2.6, GPUs සහ NVIDIA PTX වැනි විශේෂිත ප්‍රොසෙසර මත ඕෆ්ලෝඩ් මෙහෙයුම් සඳහා මෙවලම් නිර්වචනය කරයි. ප්‍රමිතිය ක්‍රියාත්මක කිරීම පාහේ අවසන් MP 5.0 විවෘත කරන්න (Open Multi-Processing), හවුල් මතක සහ දෛශික ඒකක (SIMD) සහිත බහු-core සහ hybrid (CPU+GPU/DSP) පද්ධති මත API සහ සමාන්තර ක්‍රමලේඛන ක්‍රම යෙදීමේ ක්‍රම නිර්වචනය කරයි. අවසාන පුද්ගලික කොන්දේසි, ස්කෑන් සහ ලූප් විධාන, ඇණවුම් සහ use_device_addr ප්‍රකාශන වැනි විශේෂාංග එකතු කරන ලදී. OpenMP සහ OpenACC සඳහා, සිව්වන පරම්පරාවේ (Fiji) සහ පස්වන පරම්පරාවේ AMD Radeon (GCN) GPUs (VEGA 10/VEGA 20) මත ඕෆ්ලෝඩ් මෙහෙයුම් සඳහා සහය එක් කර ඇත.
  • C පවුලේ භාෂා සඳහා, යොමු හෝ දර්ශක මගින් සම්මත කරන ලද වස්තූන් වෙත ශ්‍රිතයේ ප්‍රවේශය විස්තර කිරීමට සහ එවැනි වස්තූන් වස්තූන්ගේ ප්‍රමාණය පිළිබඳ තොරතුරු අඩංගු පූර්ණ සංඛ්‍යා තර්ක සමඟ සම්බන්ධ කිරීමට “ප්‍රවේශ” ශ්‍රිතය එක් කර ඇත. “ප්‍රවේශය” සමඟ එක්ව ක්‍රියා කිරීම සඳහා, පරිශීලක ක්‍රියාකාරකම් වලින් වැරදි ප්‍රවේශයක් හඳුනා ගැනීමට “වර්ගය” ගුණාංගය ක්‍රියාත්මක වේ, උදාහරණයක් ලෙස, අරාවේ සීමාවෙන් පිටත ප්‍රදේශයකට අගයන් ලිවීමේදී. නිශ්චිත අනුවාද අංක සහිත ELF ගොනුවක ආශ්‍රිත සංකේත සඳහා "symver" ගුණාංගය ද එක් කර ඇත.
  • නව අනතුරු ඇඟවීම් එකතු කර ඇත:
    • “-Wstring-compare” (“-Wextra” සමඟ සක්‍රීය කර ඇත) - strcmp සහ strncmp ශ්‍රිත ඇමතීමේ ප්‍රතිඵලය සමඟ ශුන්‍යය සංසන්දනය කරන ප්‍රකාශන පැවතීම ගැන අනතුරු අඟවයි, එය දිග නිසා නියතයකට සමාන වේ. එක් තර්කයක් දෙවන තර්කයේ ඇති අරාවේ ප්‍රමාණයට වඩා වැඩිය.
    • "-Wzero-length-bounds" ("-Warray-bounds" සමඟින් සක්‍රීය කර ඇත) - ශුන්‍ය දිග අරා මූලද්‍රව්‍ය වෙත ප්‍රවේශ වීම ගැන අනතුරු අඟවයි, එය වෙනත් දත්ත නැවත ලිවීමට හේතු විය හැක.
    • “-Warray-bounds”, “-Wformat-overflow”, “-Wrestrict”, “-Wreturn-local-addr” සහ “-Wstringop-overflow” අනතුරු ඇඟවීම් සීමාවෙන් පිටත අවස්ථා ගණන පුළුල් කිරීමට පුළුල් කර ඇත. හසුරුවන බව.
  • UCN අංකනය (\uNNNN හෝ \UNNNNNN) වෙනුවට වත්මන් කේතීකරණය (UTF-8 පෙරනිමියෙන්) භාවිතා කරමින් හඳුනාගැනීම් වල පුළුල් අක්ෂර සෘජුවම සඳහන් කිරීමේ හැකියාව ක්‍රියාත්මක කරන ලදී. උදාහරණ වශයෙන්:

    ස්ථිතික const int π = 3;
    int get_naïve_pi() {
    ආපසු π;
    }

  • C භාෂාව සඳහා, C2X ප්‍රමිතිය තුළ සංවර්ධනය කරන ලද නව විශේෂාංගවල කොටසක් ක්‍රියාවට නංවා ඇත (-std=c2x සහ -std=gnu2x සඳහන් කිරීමෙන් සක්‍රීය කර ඇත): “[[]]” වාක්‍ය ඛණ්ඩය සඳහා සහය දක්වනුයේ උපලක්ෂණ නිර්වචනය කිරීම සඳහා ය. C++ (උදාහරණයක් ලෙස, [[gnu ::const]], [[අත්හරින ලද]], [[fallthrough]] සහ [[සමහරවිට_භාවිත නොකළ]]. UTF-8 අක්ෂර සහිත නියතයන් නිර්වචනය කිරීම සඳහා "u8" වාක්‍ය ඛණ්ඩය සඳහා සහය එක් කරන ලදී.
    වෙත නව මැක්‍රෝ එකතු කරන ලදී . strftime වෙත "%OB" සහ "%Ob" ආදේශන එක් කරන ලදී.

  • C සඳහා පෙරනිමි මාදිලිය "-fno-common" වේ, එමඟින් සමහර වේදිකාවල ගෝලීය විචල්‍යයන් වෙත වඩාත් කාර්යක්ෂම ප්‍රවේශයක් ලබා දේ.
  • C++ සඳහා, C++16 ප්‍රමිතියෙන් සංවර්ධනය කරන ලද වෙනස්කම් සහ නවෝත්පාදන 20ක් පමණ ක්‍රියාත්මක කර ඇත. "constinit" එකතු කළ මූල පදය ඇතුළුව
    සහ අච්චු දිගු සඳහා සහය ක්රියාත්මක කර ඇත "සංකල්ප". සංකල්ප මඟින් ඔබට සැකිලි පරාමිති අවශ්‍යතා සමූහයක් නිර්වචනය කිරීමට ඉඩ සලසයි, එය සම්පාදනය කරන අවස්ථාවේදී, සැකිලි පරාමිතීන් ලෙස පිළිගත හැකි තර්ක සමූහය සීමා කරයි. සැකිල්ල තුළ භාවිතා කරන දත්ත වර්ගවල ගුණ සහ ආදාන පරාමිතිවල දත්ත වර්ගයේ ගුණාංග අතර තාර්කික නොගැලපීම් වළක්වා ගැනීමට සංකල්ප භාවිතා කළ හැක.

  • G++ constexpr හරහා නියත වස්තු වෙනස් කිරීම නිසා ඇතිවන නිර්වචනය නොකළ හැසිරීම් අනාවරණය කරයි. constexpr ගණනය කිරීමේදී compiler මගින් මතක පරිභෝජනය අඩු කිරීම. "-Wmmatched-tags" සහ "-Wredundant-tags" නව අනතුරු ඇඟවීම් එකතු කරන ලදී.
  • නව විධාන රේඛා විකල්ප යෝජනා කර ඇත:
    • "-fallocation-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 ට වඩා වැඩි (විශාල අගයක් දක්වා), 0.5 ට අඩු - පහළට (ශුන්‍යයට), සහ 0.5 ට සමාන - අවසාන සංඛ්‍යාංකයේ සමානාත්මතාවයෙන් ආරම්භ වේ.
  • AArch64 ගෘහනිර්මාණ ශිල්පය සඳහා, SVE2 දිගුව සඳහා සහය එක් කර ඇති අතර SVE (පරිමාණ කළ හැකි දෛශික දිගුව) සඳහා සහය වැඩි දියුණු කර ඇත. LSE (Large System Extensions) සහ TME (Transactional Memory Extension) සඳහා සහය පුළුල් කර ඇත. Armv8.5-A සහ Armv8.6-A හි යෝජිත නව උපදෙස් එකතු කරන ලදි, සසම්භාවී සංඛ්‍යා උත්පාදනය, වටකුරු කිරීම, මතක ටැග් බැඳීම,
    bfloat16 සහ matrix ගුණ කිරීම. ප්‍රොසෙසර සහාය එකතු කරන ලදී
    Arm Cortex-A77,
    Arm Cortex-A76AE,
    Arm Cortex-A65,
    Arm Cortex-A65AE,
    Arm Cortex-A34 සහ
    Marvell ThunderX3.

  • ARM32 සඳහා ABI FDPIC (64-bit function pointers) සඳහා සහය එක් කරන ලදී. 64-bit පූර්ණ සංඛ්‍යා මෙහෙයුම්වල ප්‍රතිනිර්මාණය සහ ප්‍රශස්ත සැකසුම්. CPU සහාය එක් කරන ලදී
    Arm Cortex-A77,
    Arm Cortex-A76AE සහ
    Arm Cortex-M35P. 32-bit SIMD, 16-bit ගුණ කිරීම, අගුලේ අංක ගණිතය සහ අනෙකුත් 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 (විෂම පද්ධති ගෘහ නිර්මාණ අතරමැදි භාෂාව) ක්‍රියාත්මක කිරීම අවලංගු කර ඇති අතර අනාගත නිකුතුවකදී එය ඉවත් කිරීමට ඉඩ ඇත.

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

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