GCC 15 සම්පාදක කට්ටලය නිකුත් කිරීම

වසරක සංවර්ධනයකින් පසු, නොමිලේ GCC සම්පාදක කට්ටලය GCC 15.1 නිකුත් කර ඇති අතර එය නව GCC 15.x ශාඛාවේ පළමු ප්‍රධාන නිකුතුවයි. නිකුතු අංකකරණ යෝජනා ක්‍රමයට අනුව, සංවර්ධනය අතරතුර 15.0 අනුවාදය භාවිතා කරන ලද අතර, GCC 15.1 නිකුත් කිරීමට ටික කලකට පෙර, GCC 16.0 හි ශාඛාවක් දැනටමත් දෙබලක කර තිබුණි, එය ඊළඟ ප්‍රධාන නිකුතුව වන GCC 16.1 හි පදනම වනු ඇත.

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

  • C වැඩසටහන් සම්පාදනය කිරීමේදී, GNU දිගු ("-std=gnu23") සහිත C23 ප්‍රමිතිය (Change Summary) පෙරනිමියෙන් භාවිතා වේ. මීට පෙර, C17 ප්‍රමිතිය පෙරනිමියෙන් භාවිතා කරන ලදී (-std=gnu17). nullptr නියතය, _BitInt(n) වර්ගය සහ bool, true සහ false මූල පද ඇතුළත් කිරීම හේතුවෙන්, පවතින ව්‍යාපෘති ගොඩනැගීමේදී මෙම වෙනස ගැටළු ඇති කළ හැකි අතර, ඒවා යෙදුම්වල අර්ථ දක්වා ඇති සමාන නම් කරන ලද හඳුනාගැනීම් සමඟ ගැටිය හැකිය.
  • C23 ප්‍රමිතියේ පහත හැකියාවන් ක්‍රියාත්මක කර ඇත:
    • "#embed" විධානය නිර්මාණය කර ඇත්තේ ද්විමය සම්පත් කේතයට ඇතුළත් කිරීම සඳහා ය.
    • "අනුපිළිවෙලට නොකළ" ගුණාංගය, එයින් පෙන්නුම් කරන්නේ ප්‍රතිඵලය ක්‍රියාත්මක කිරීමේ අනුපිළිවෙල මත රඳා නොපවතින බවයි.
    • "ප්‍රතිනිෂ්පාදනය කළ හැකි" ගුණාංගයෙන් පෙන්නුම් කරන්නේ ශ්‍රිතය සෑම විටම එකම ආදානය ලබා දී එකම ප්‍රතිඵලය ලබා දෙන බවයි, එනම් වෙනත් සාධක මත රඳා නොපවතී.
  • අනාගත C2Y ප්‍රමිතියේ මූලද්‍රව්‍ය ක්‍රියාත්මක කර ඇත (-std=c2y සහ -std=gnu2y):
    • "if (int x = get ()) {...}" වැනි "if" ප්‍රකාශනයක විචල්‍යයන් ප්‍රකාශ කිරීමේ හැකියාව.
    • කේතයෙන් ඒවා යොමු කිරීම සඳහා ලූප නම් කිරීම සඳහා සහාය. පිටත: (int i = 0; i < IK; ++ i) සඳහා { ස්විචය (i) { අවස්ථාව 1: බිඳීම; // CONT1 අවස්ථාව 2 වෙත පැනීම: පිටත බිඳීම; // CONT2 වෙත පනියි } // CONT1 } // CONT2
    • "case 1...10:" වැනි case ප්‍රකාශනවල පූර්ණ සංඛ්‍යා අගයන්හි පරාසයන් නියම කිරීම සඳහා සහාය.
    • සංකීර්ණ සංඛ්‍යා වල මනඃකල්පිත කොටස දැක්වීමට "i" සහ "j" උපසර්ග.
    • සංකීර්ණ සංඛ්‍යා සහිත "++" සහ "—" ක්‍රියාකරුවන් භාවිතා කිරීමේ හැකියාව.
    • ඔපෙරන්ඩ් වර්ගය මත පදනම්ව ප්‍රකාශනයක් තේරීම සඳහා "_Generic(type, expr1, expr2, …)" නිර්මිතය.
    • ව්‍යුහයන් සහ සංගම් වැනි අනෙකුත් වස්තු වර්ග මෙන් බයිට් අරා වෙත ප්‍රවේශ වීම සඳහා සහාය.
    • අසම්පූර්ණ අරා වලට ("int a[]" වැනි ප්‍රමාණයක් සඳහන් නොකර ප්‍රකාශ කරන ලද) "alignof" ක්‍රියාකරු යෙදීම සඳහා සහාය.
    • අෂ්ටක, ෂඩ් දශම සහ විශ්වීය අක්ෂර ගැලවීමේ අනුපිළිවෙල සඳහා නව වාක්‍ය ඛණ්ඩයක් එක් කරන ලදී. “\u”, “\x” සහ “\nnn” වෙනුවට, “\u{}”, “\o{}” සහ “\x{}” අනුපිළිවෙල යෝජනා කර ඇති අතර, එහි ඕනෑම ඉලක්කම් ගණනක් නියම කළ හැකිය.
    • "__builtin_stdc_rotate_left" සහ "__builtin_stdc_rotate_right" යන බිල්ට්-ඉන් ශ්‍රිත.
    • NULL දර්ශකයන් මත ශුන්‍ය-දිග මෙහෙයුම් සඳහා අවසර ඇත (උදා: "sizeof(*p)").
  • C++ භාෂාව සඳහා වන ඉදිරිපස කොටස අනාගත C++26 ප්‍රමිතිය සඳහා සංවර්ධනය වෙමින් පවතින විශේෂාංග ක්‍රියාත්මක කරයි:
    • විචල්‍ය ක්‍රියාකරු "මිතුරා" ("මිතුරා Ts...").
    • සම්පාදනය කරන අවස්ථාවේදී පූර්ව වෙන් කරන ලද මතකයට වස්තුවක් තැබීම සඳහා නව ක්‍රියාකරු (ස්ථානගත කිරීම නව) හි විචලනයක් සහිත constexpr මූල පදය භාවිතා කිරීමේ හැකියාව.
    • අසම්පූර්ණ වර්ගයකට දර්ශකයක් මකා දැමීමේදී දෝෂ ප්‍රතිදානය.
    • පෙර කොමාවක් නොමැතිව ඉලිප්සිස් එකක් සහිත විචල්‍ය පරාමිතීන් අර්ථ දැක්වීම සඳහා වන වාක්‍ය ඛණ්ඩය (උදාහරණයක් ලෙස, "void e(int…)" වෙනුවට "void e(int…)" සඳහන් කරන විට) අතහැර දමා ඇත.
    • සැකිලි තුළ පරාමිති පැකේජයක් සුචිගත කිරීම.
    • ව්‍යුහගත බන්ධන සඳහා ගුණාංග;
    • වාක්‍ය ඛණ්ඩය '= මකන්න("හේතුව")';
    • මූලික අක්ෂර කට්ටලයේ "@", "$" සහ "`" ඇතුළත් කිරීම.
    • මොඩියුල ප්‍රකාශ කිරීමට මැක්‍රෝ භාවිතා කිරීම තහනම්ය.
    • if සහ switch ප්‍රකාශනවල කොන්දේසියක් ලෙස ව්‍යුහගත බන්ධනය භාවිතා කිරීමේ හැකියාව.
    • සෘජු අරා සංසන්දනය සඳහා සහාය (උදා: "int arr1[5]; int arr2[5]; bool same = arr1 == arr2") අත්හිටුවා ඇත.
    • ද්විමය සම්පත් කාවැද්දීම සඳහා "#embed" යාන්ත්‍රණය.
    • is_trivial සැකිලි පන්තිය අතහැර දමා ඇත.
  • C++23 විශේෂාංග එකතු කරන ලදී:
    • "export" විධානයේ සමහර භාවිතයන් තහනම් කර "export {}" භාවිතයට ඉඩ දෙන්න.
    • පරාස හරහා පුනරාවර්තනය වන ලූප සඳහා තාවකාලික වස්තූන්ගේ ආයු කාලය දීර්ඝ කිරීම සඳහා සහාය.
  • libstdc++ පුස්තකාලය std සහ std.compat මොඩියුල සඳහා පර්යේෂණාත්මක සහාය ක්‍රියාත්මක කරයි.
  • C සහ C++ කේතවල සංගම් සඳහා "{0}" ආරම්භකය භාවිතා කිරීමෙන් තවදුරටත් සියලුම අන්තර්ගතයන් හිස් කර ඇති බවට සහතික නොවේ, නමුත් ඒ වෙනුවට සංගමේ පළමු අංගය ශුන්‍ය කිරීමට හේතු වේ. සම්පූර්ණ එකමුතුව හිස් කිරීමට, C23 පිරිවිතරයේ අර්ථ දක්වා ඇති "{}" ප්‍රකාශනය භාවිතා කරන්න, නැතහොත් පැරණි හැසිරීම ප්‍රතිස්ථාපනය කිරීමට "-fzero-init-padding-bits=unions" විකල්පය සඳහන් කරන්න.
  • සහතික කළ වලිග ඇමතුම් සඳහා "musttail" ගුණාංගය ([[gnu::musttail]] සහ [[clang::musttail]]) සඳහා ක්‍රියාත්මක කරන ලද සහාය. ගුණාංගය වත්මන් ශ්‍රිතයට පුනරාවර්තන ඇමතුමක් ලබා දෙන ආපසු ප්‍රකාශන සඳහා අදාළ වන අතර, එවැනි ඇමතුමක් ටේල් පුනරාවර්තනය භාවිතා කරන බව සහතික කරයි, එමඟින් තොගයේ අමතර මතකය වෙන් නොකෙරේ (ඉතා විශාල ඇමතුම් සංඛ්‍යාවක් සමඟ මතකය අවසන් වීමේ අවදානම ඉවත් කරයි).
  • flag_enum ගුණාංගය ([[gnu::flag_enum]] සහ [[clang::flag_enum]]) සඳහා ක්‍රියාත්මක කරන ලද සහාය ගණන් කිරීම් වලට යොදන ලද අතර එමඟින් අන්තර්ගතය බිට්වයිස් මෙහෙයුම් වලදී භාවිතා වන බව පෙන්නුම් කරයි (-Wswitch මාදිලියේ අනතුරු ඇඟවීම් වළක්වයි).
  • "counted_by" ගුණාංගය සඳහා සහය එක් කරන ලදී, එය මූලද්‍රව්‍ය ගණන තීරණය කරන නම්‍යශීලී අරාවක් සහිත ව්‍යුහයක ක්ෂේත්‍රයක් නියම කිරීමට භාවිතා කළ හැකිය. බෆර පිටාර ගැලීම් පරීක්ෂා කිරීම්වල කාර්යක්ෂමතාව වැඩි දියුණු කිරීම සඳහා ගුණාංගය භාවිතා කළ හැක.
  • "nonnull_if_nonzero" ගුණාංගය ශ්‍රිතවලට එක් කරන ලදී, එය වෙනත් පරාමිතියක් ශුන්‍ය නම් පමණක් දර්ශකයන් සහිත සමහර ශ්‍රිත පරාමිතීන් NULL විය හැකි බව නියම කරයි.
  • "asm(….)" බාහිර ශ්‍රිත ඇතුළත් කර ඇති විස්තීරණ එකලස් කිරීමේ යන්ත්‍රයට අවසර ඇත. එකලස් කිරීමේ ඇතුළු කිරීම් වලදී, තොගයේ රතු කලාපයේ (තොගයේ මුදුනේ ඇති ප්‍රදේශය) මතකය උඩින් ලිවීමට අවසර ඇත.
  • වැඩිදියුණු කළ සැකිලි හැෂිං නිසා C++ කේත සම්පාදනය වේගවත් වේ.
  • නව ප්‍රශස්තිකරණ එකතු කරන ලදී. සම්පාදනය කරන අවස්ථාවේ ප්‍රමාණය නොදන්නා ගතිකව වෙන් කරන ලද අරා හෝ බෆර හැසිරවීමේදී පවා, කලින් පිටවීම සඳහා කේත අඩංගු ලූප දෛශිකකරණය කිරීම සඳහා සහය ක්‍රියාත්මක කර ඇත (නිදසුනක් ලෙස, විවේකයක් හෝ ආපසු ඇමතුමක් හරහා). -O2 විකල්පය නිශ්චිතව දක්වා ඇති විට, ට්‍රිප්කවුන්ට් තොරතුරු නොමැති පහසුවෙන් දෛශික කළ හැකි ලූප කිහිපයක දෛශිකකරණය සක්‍රීය කෙරේ.
  • සම්බන්ධක අදියරේදී (LTO, Link-Time Optimization) වර්ධක ප්‍රශස්තිකරණ මාදිලියක් එක් කරන ලදී, එමඟින් කේතයට සුළු වෙනස්කම් සිදු කර ඇති අවස්ථාවන්හිදී (එක් කාර්යයක් සංස්කරණය කර ඇත) LTO භාවිතා කරන විට නැවත සම්පාදනය කිරීමේ කාලය සැලකිය යුතු ලෙස අඩු කරයි. වර්ධක මාදිලිය සක්‍රීය කිරීම සඳහා, "-flto-incremental" විකල්පය යෝජනා කෙරේ.
  • ඉතා විශාල ආදාන ගොනු වල වැඩිදියුණු කළ සම්පාදනය. 4096 ට වැඩි තීරු අංක ලුහුබැඳීම ක්‍රියාත්මක කරන ලදී. ඉතා විශාල ගොනු වල දෝෂ සහ අනතුරු ඇඟවීම් පිහිටීම දැක්වීමේ නිරවද්‍යතාවය වැඩි දියුණු කරන ලදි.
  • ගැටළු හඳුනාගැනීමේදී වාර්තාවල දෘශ්‍යතාව වැඩි දියුණු කිරීම. උදාහරණයක් ලෙස, ගැටලුවේ පිහිටීම “⚠️” සංකේතය සමඟ උද්දීපනය කර ඇත, C++ සැකිලි වල දෝෂ සඳහා ප්‍රතිදානයේ පිරිසැලසුම වෙනස් කර ඇත, C23 ප්‍රමිතියට සංක්‍රමණය සරල කිරීම සඳහා ඉඟි එකතු කර ඇත, සහ වර්ණ පටිපාටිය නැවත සැලසුම් කර ඇත. Sarif ආකෘතියෙන් රෝග විනිශ්චය ප්‍රතිදානය කිරීමේ හැකියාව එක් කරන ලදී (-fdiagnostics-format=sarif-file).
  • libgdiagnostics පුස්තකාලය ක්‍රියාත්මක කර ඇති අතර, එමඟින් ඔබේ ව්‍යාපෘතිවලට රෝග විනිශ්චය පණිවිඩ සැලසුම් කිරීමට අදාළ GCC හැකියාවන් ඒකාබද්ධ කිරීමට ඔබට ඉඩ සලසයි (උදාහරණයක් ලෙස, ඔබට උපුටා දැක්වීම, උද්දීපනය කිරීම සහ නිවැරදි කිරීමේ ඉඟි භාවිතා කළ හැකිය).
  • පේළි අවසානයේ අවශේෂ සුදු අවකාශය සහ පේළි ආරම්භයේදී අමතර සුදු අවකාශය හඳුනා ගැනීමට "-Wtrailing-whitespace" සහ "-Wleading-whitespace" අනතුරු ඇඟවීම් එක් කරන ලදී.
  • ශීර්ෂ ගොනුවක් නැවත ඇතුළත් කිරීම වළක්වන ශීර්ෂ ආරක්ෂක මැක්‍රෝ වල ගැටළු වාර්තා කිරීම සඳහා "-Wheader-guard" අනතුරු ඇඟවීමක් එක් කරන ලදී.
  • D භාෂාව සඳහා ඉදිරිපස කොටස 2.111.0 අනුවාදයට යාවත්කාලීන කර ඇත.
  • අත්සන් නොකළ පූර්ණ සංඛ්‍යා සඳහා සහය Fortran ඉදිරිපසට එක් කර ඇත.
  • මෙම පැකේජයේ COBOL භාෂාව සඳහා වන සම්පාදකයක් වන gcobol ඇතුළත් වන අතර එය x86-64 සහ AArch64 වේදිකා සඳහා සහය දක්වන අතර 32-bit පද්ධතිවල භාවිතය සඳහා නිර්මාණය කර නොමැත. සම්පාදකය ISO/IEC 1989:2023 පිරිවිතර ක්‍රියාත්මක කරන අතර NIST CCVS/85 පරීක්ෂණ බොහොමයක් සමත් වේ.
  • බෙදාගත් මතකය සහ දෛශිකකරණ ඒකක (SIMD) සහිත බහු-හර සහ දෙමුහුන් (CPU+GPU/DSP) පද්ධතිවල සමාන්තර ක්‍රමලේඛන ක්‍රම යෙදීම සඳහා API සහ ක්‍රම නිර්වචනය කරන OpenMP 5.0, 5.1, 5.2 සහ 6.0 (විවෘත බහු-සැකසුම්) ප්‍රමිතීන් ක්‍රියාත්මක කිරීම අඛණ්ඩව සිදු කර ඇත. මෙටා ඩිරෙක්ටිව් සහ ටයිල්, අන්රෝල්, ඉන්ටරොප් සහ ඩිස්පැච් කන්ස්ට්‍රක්ට් සඳහා සහය එක් කරන ලදී. සමහර AMD සහ NVIDIA GPU සඳහා, ඒකාබද්ධ හවුල් මතකය සඳහා සහය එක් කර ඇත ("requires" විධානයේ unified_shared_memory සඳහන් කිරීමෙන් සක්‍රීය කර ඇත). "self_maps" ප්‍රකාශනය සඳහා සහය එක් කරන ලදී.
  • AArch64 ගෘහ නිර්මාණ ශිල්පයේ පසුබිම MinGW වේදිකාවට (aarch64-w64-mingw32) සහය දැක්වීම සඳහා යාවත්කාලීන කර ඇත. ARM20 දිගු 8කට වඩා ක්‍රියාත්මක කර ඇති අතර ACLE (Arm C භාෂා දිගු) දිගුව සඳහා සහාය වැඩි දියුණු කර ඇත. කේත උත්පාදක යන්ත්‍රයට බොහෝ වැඩිදියුණු කිරීම් සිදු කර ඇත. CPU සහාය එක් කරන ලදී:
    • ඇපල් A12 (ඇපල්-a12)
    • ඇපල් එම් 1 (ඇපල්-එම් 1)
    • ඇපල් එම් 2 (ඇපල්-එම් 2)
    • ඇපල් එම් 3 (ඇපල්-එම් 3)
    • බාහිකය-A520AE (බාහිකය-a520ae)
    • බාහිකය-A720AE (බාහිකය-a720ae)
    • බාහිකය-A725 බාහිකය (බාහිකය-a725)
    • බාහිකය-R82AE (බාහිකය-r82ae)
    • බාහිකය-X925 බාහිකය (බාහිකය-x925)
    • ආම් නියෝවර්ස් N3 (නියෝවර්ස්-n3)
    • ආම් නියෝවර්ස් V3 (නියෝවර්ස්-v3)
    • Arm Neoverse V3AE (neoverse-v3ae)
    • FUJITSU-MONAKA (fujitsu-monaka)
    • NVIDIA ග්‍රේස්
    • NVIDIA ඔලිම්පස් (ඔලිම්පස්)
    • ක්වාල්කොම් ඔරියන්-1 (ඔරියන්-1)
  • libstdc++ පුස්තකාලයට සහය දැක්වීම සඳහා AMD Radeon GPU (GCN) කේත උත්පාදන පසුපෙළ යාවත්කාලීන කර ඇති අතර gfx9-generic, gfx10-3-generic, සහ gfx11-generic උපාංග ශ්‍රේණි සඳහා පර්යේෂණාත්මක කේත උත්පාදන සහාය එක් කර ඇත.
  • x86 පසුබිම දැන් Intel උපදෙස් කට්ටල ගෘහ නිර්මාණ දිගු AVX10.2, AMX-AVX512, AMX-FP8, AMX-MOVRS, AMX-TF32, AMX-TRANSPOSE, MOVRS සඳහා සහය දක්වයි. Intel Diamond Rapids සහ Xeon Phi CPU සඳහා සහය එක් කරන ලදී.
  • LoongArch සහ AVR වේදිකා සඳහා පුළුල් කරන ලද පසු අන්ත හැකියාවන්.
  • Nios II සකසනයන්හි භාවිතා වන nios2 ඉලක්ක ගෘහ නිර්මාණ ශිල්පය සඳහා සහාය ඉවත් කරන ලදී. AArch32 port එකේ ILP32 ABI (-mabi=ilp64) සඳහා සහය අත්හැර දමා ඇති අතර ඊළඟ ප්‍රධාන නිකුතුවේදී එය ඉවත් කරනු ලැබේ.

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

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