ከአንድ አመት እድገት በኋላ ነፃው የጂሲሲ ኮምፕሌተር ስብስብ GCC 15.1 ተለቋል፣ በአዲሱ የጂሲሲ 15.x ቅርንጫፍ ውስጥ የመጀመሪያው ትልቅ ልቀት ነው። በተለቀቀው የቁጥር አወጣጥ እቅድ መሰረት፣ እትም 15.0 በእድገት ወቅት ጥቅም ላይ ውሏል፣ እና ጂሲሲ 15.1 ከመውጣቱ ጥቂት ቀደም ብሎ፣ የጂሲሲ 16.0 ቅርንጫፍ ፎርክ ተሰርቷል፣ ይህም የሚቀጥለው ዋና ልቀት GCC 16.1 መሰረት ይሆናል።
ዋና ለውጦች፡-
- የC ፕሮግራሞችን በሚሰበስቡበት ጊዜ የC23 መስፈርት (ማጠቃለያ ለውጥ) ከጂኤንዩ ቅጥያዎች ("-std=gnu23") ጋር በነባሪነት ጥቅም ላይ ይውላል። ከዚህ ቀደም የC17 መስፈርት በነባሪ (-std=gnu17) ጥቅም ላይ ውሏል። ለውጡ ነባር ፕሮጀክቶችን በሚገነባበት ጊዜ የ nullptr ቋሚ፣ _BitInt(n) አይነት እና ቡል፣ እውነት እና የውሸት ቁልፍ ቃላት በማካተት ምክንያት ችግር ሊፈጥር ይችላል፣ ይህም በመተግበሪያዎች ውስጥ ከተገለጹት ተመሳሳይ ስም ካላቸው መለያዎች ጋር ሊጋጭ ይችላል።
- የሚከተሉት የC23 ደረጃ ችሎታዎች ተተግብረዋል፡
- የ"#embed" መመሪያው የተነደፈው ሁለትዮሽ ሀብቶችን ወደ ኮድ ለማስገባት ነው።
- ውጤቱ በአፈፃፀም ቅደም ተከተል ላይ የተመካ አለመሆኑን የሚያመለክት "ያልተከታታይ" ባህሪ.
- "የሚባዛ" ባህሪው የሚያመለክተው ተግባሩ ሁልጊዜ ተመሳሳይ ግብዓት የተሰጠውን ውጤት ይመልሳል, ማለትም በሌሎች ሁኔታዎች ላይ የተመካ አይደለም.
- የወደፊቱ የC2Y መስፈርት አካላት ተተግብረዋል (-std=c2y እና -std=gnu2y)፦
- በ"if" መግለጫ ውስጥ ተለዋዋጮችን የማወጅ ችሎታ፣ ለምሳሌ "if (int x = get ()) {...}"።
- በኮድ ውስጥ እነሱን ለማመልከት loops ለመሰየም ድጋፍ። ውጫዊ: ለ (int i = 0; i <IK; ++ i) {መቀያየር (i) {ጉዳይ 1: መቋረጥ; // ወደ CONT1 ጉዳይ 2 ይዝለሉ: ውጫዊ ውጫዊ; // ወደ CONT2 ይዘላል } // CONT1 } // CONT2
- እንደ "ጉዳይ 1...10:" ባሉ የጉዳይ አገላለጾች ውስጥ የኢንቲጀር እሴቶችን ክልሎች ለመለየት ድጋፍ።
- ውስብስብ ቁጥሮች ውስጥ ያለውን ምናባዊ ክፍል ለማመልከት “i” እና “j” የሚሉት ቅጥያዎች።
- ውስብስብ ቁጥሮች ያላቸውን የ"++" እና "-" ኦፕሬተሮችን የመጠቀም እድል።
- "_Generic(type, expr1, expr2, ...)" በኦፔራ ዓይነት ላይ በመመስረት አገላለጽ ለመምረጥ ይገነባል።
- እንደ ሌሎች የዕቃ ዓይነቶች፣ እንደ መዋቅሮች እና ማህበራት ያሉ ባይት ድርድሮችን ለማግኘት ድጋፍ።
- የ"alignof" ኦፕሬተርን ላልተሟሉ አደራደሮች (እንደ "int a[]) ያለ መጠን ሳይገለጽ የተገለጹት) ለመተግበር ድጋፍ።
- ለኦክታል፣ ሄክሳዴሲማል እና ሁለንተናዊ ገጸ ማምለጫ ቅደም ተከተሎች አዲስ አገባብ ታክሏል። ከ"\u"፣ "\x" እና "\nn" ይልቅ "\u{}"፣"\o{}" እና "\x{}" ያሉት ቅደም ተከተሎች ቀርበዋል፣ በዚህ ውስጥ የትኛውም አሃዞች ሊገለፅ ይችላል።
- አብሮገነብ ተግባራት "__builtin_stdc_rotate_left" እና "__builtin_stdc_rotate_right"
- በ NULL ጠቋሚዎች ላይ የዜሮ ርዝመት ስራዎች ይፈቀዳሉ (ለምሳሌ "መጠን(*p)")።
- የC++ ቋንቋ ፊት ለፊት ለወደፊት የC++26 መስፈርት እየተዘጋጁ ያሉ ባህሪያትን ተግባራዊ ያደርጋል፡
- ተለዋዋጭ ኦፕሬተር "ጓደኛ" ("ጓደኛ Ts...").
- የኮንስተክፕር ቁልፍ ቃልን ከአዲሱ ኦፕሬተር ልዩነት ጋር የመጠቀም ችሎታ (ምደባ አዲስ) አንድን ነገር በማጠናቀር ጊዜ አስቀድሞ በተመደበው ማህደረ ትውስታ ውስጥ ለማስቀመጥ።
- ጠቋሚውን ወደ ያልተሟላ አይነት ሲሰርዝ የስህተት ውጤት።
- ያለ ቀዳሚ ነጠላ ሰረዝ (ለምሳሌ " ባዶ ኢ(int, ...)" ከማለት ይልቅ "void e(int...") ሲገለፅ ከ ellipsis ጋር የቫሪዲያን መለኪያዎችን የሚገልጽ አገባብ ተቋርጧል።
- በአብነት ውስጥ የመለኪያ ፓኬጅ መረጃ ጠቋሚ ማድረግ።
- ለተዋቀሩ ማሰሪያዎች ባህሪያት;
- አገባብ '= ሰርዝ("ምክንያት")';
- በመሠረታዊ የቁምፊ ስብስብ ውስጥ የ"@"፣ "$" እና "`" ማካተት።
- ሞጁሎችን ለማወጅ ማክሮዎችን መጠቀም የተከለከለ ነው።
- መግለጫዎችን በመቀየር እና በመቀየር የተዋቀረ ማሰሪያን እንደ ቅድመ ሁኔታ የመጠቀም ችሎታ።
- የቀጥታ አደራደር ንጽጽር (ለምሳሌ "int arr1 [5]፤ int arr2 [5]፤ bool same = arr1 == arr2") ድጋፍ ተቋርጧል።
- ሁለትዮሽ ሀብቶችን ለመክተት የ"#embed" ዘዴ።
- ኢ-ትሪቪያል አብነት ክፍል ተቋርጧል።
- የተጨመሩ የC++23 ባህሪያት፡-
- አንዳንድ የ"ላክ" መመሪያን መጠቀም አትፍቀድ እና "ወደ ውጪ ላክ {}" መጠቀምን ፍቀድ።
- ከክልሎች በላይ ለሚደጋገሙ ዑደቶች ጊዜያዊ ዕቃዎችን ዕድሜ ለማራዘም ድጋፍ።
- የ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 ሁነታ ላይ ማስጠንቀቂያዎችን ይከላከላል)።
- የንጥረቶችን ብዛት የሚወስን ተለዋዋጭ ድርድር ባለው መዋቅር ውስጥ መስክን ለመለየት ለ"የተቆጠረ_በ" ባህሪ ተጨማሪ ድጋፍ። ባህሪው የባፈር የትርፍ ፍተሻዎችን ውጤታማነት ለማሻሻል ጥቅም ላይ ሊውል ይችላል።
- ለተግባሮች የ"nonnull_if_nonzero" ባህሪ ታክሏል፣ ይህም አንዳንድ የተግባር መለኪያዎች በጠቋሚዎች ባዶ ሊሆኑ የሚችሉት ሌላ ግቤት ዜሮ ከሆነ ብቻ እንደሆነ ይገልጻል።
- የተራዘመ ሰብሳቢ "asm(….)" የውጭ ተግባራት ይፈቀዳል። በመሰብሰቢያ ማስገቢያዎች ውስጥ ፣ በክምችቱ ቀይ ዞን (በቁልል አናት ላይ ያለው ቦታ) ላይ ማህደረ ትውስታን እንደገና ለመፃፍ ተፈቅዶለታል ።
- የC++ ኮድ ማጠናቀር ፈጣን ነው ለተሻሻለ አብነት ሃሽ።
- አዲስ ማትባቶች ታክለዋል። ቀደም ብሎ ለመውጣት ኮድ የያዙ ቀለበቶችን (ለምሳሌ በእረፍት ወይም በመመለሻ ጥሪ) የቬክተር ማድረጊያ ድግግሞሾችን ለማድረግ ድጋፍ ተተግብሯል፣ ምንም እንኳን እንደዚህ ያሉ ቀለበቶች በተጠናቀረ ጊዜ መጠናቸው የማይታወቅ በተለዋዋጭ የተመደቡ አደራደሮችን ወይም ማቋቋሚያዎችን ቢቆጣጠሩም። የ -O2 አማራጭ ሲገለጽ፣ የጉዞ ብዛት መረጃ የማይገኝባቸውን አንዳንድ በቀላሉ ቬክተር ሊደረጉ የሚችሉ loops ቬክተር ማድረግ ነቅቷል።
- በኮዱ ላይ ጥቃቅን ለውጦች በተደረጉባቸው ሁኔታዎች (አንድ ተግባር ተስተካክሏል) ላይ LTO ሲጠቀሙ የመልሶ ማጠናቀሪያ ጊዜን በእጅጉ የሚቀንሰው በማገናኘት ደረጃ (LTO፣ Link-Time Optimization) ላይ የተጨመረው የመጨመሪያ ማመቻቸት ሁነታ ታክሏል። የመጨመሪያ ሁነታን ለማንቃት "-flto-incremental" አማራጭ ቀርቧል.
- የተሻሻለ በጣም ትልቅ የግቤት ፋይሎች ስብስብ። የተተገበረ የአምድ ቁጥሮች ከ 4096 በላይ. በጣም ትልቅ በሆኑ ፋይሎች ውስጥ ስህተቶች እና ማስጠንቀቂያዎች የሚገኙበትን ቦታ የሚያመለክት የተሻሻለ ትክክለኛነት.
- ችግሮችን በሚመረምርበት ጊዜ የተሻሻለ የሪፖርቶች ታይነት። ለምሳሌ የችግሩ መገኛ ቦታ በ "⚠️" ምልክት ጎልቶ ይታያል፣ በ C++ አብነቶች ውስጥ የውጤቱ አቀማመጥ ተለውጧል፣ ወደ C23 ደረጃ የሚደረገውን ሽግግር ለማቃለል ፍንጮች ተጨምረዋል እና የቀለም መርሃ ግብር እንደገና ተዘጋጅቷል። ምርመራዎችን በሳሪፍ ቅርጸት (-fdiagnostics-format=sarif-file) የማውጣት ችሎታ ታክሏል።
- የሊብግዲያግኖስቲክስ ቤተ መፃህፍት ተተግብሯል፣ ይህም የጂሲሲ አቅምን ከዲያግኖስቲክ መልእክቶች ዲዛይን ጋር በፕሮጀክቶችዎ ውስጥ እንዲያዋህዱ ያስችሎታል (ለምሳሌ፡ መጥቀስ፣ ማድመቅ እና ማስተካከያ ፍንጮችን መጠቀም ይችላሉ።)
- በመስመሮች መጨረሻ ላይ ቀሪውን ነጭ ቦታ ለማወቅ እና በመስመሮች መጀመሪያ ላይ ተጨማሪ የነጭ ቦታን ለመለየት "-Wtrailing-whitespace" እና "-Wleading-whitespace" ታክለዋል።
- የራስጌ ፋይል እንደገና እንዳይካተት የሚከለክሉትን የራስጌ ጠባቂ ማክሮዎች ችግር ለመዘገብ "-Wheader-guard" ታክሏል።
- የዲ ቋንቋ ፊት ለፊት ወደ ስሪት 2.111.0 ተዘምኗል።
- ላልተፈረሙ ኢንቲጀሮች ድጋፍ ወደ ፎርትራን ግንባር ተጨምሯል።
- ጥቅሉ የ x86-64 እና AArch64 መድረኮችን የሚደግፍ እና በ32-ቢት ሲስተሞች ላይ ጥቅም ላይ እንዲውል ያልተነደፈ ለCOBOL ቋንቋ፣ gcobol አጠናቃሪ ያካትታል። አቀናባሪው የISO/IEC 1989፡2023 መግለጫን ተግባራዊ ያደርጋል እና አብዛኛዎቹን የNIST CCVS/85 ፈተናዎችን አልፏል።
- የ OpenMP 5.0, 5.1, 5.2 and 6.0 (Open Multi-Processing) ደረጃዎችን በመግለጽ ኤፒአይን በመግለጽ እና ትይዩ የፕሮግራም አወጣጥ ዘዴዎችን በበርካታ ኮር እና ዲቃላ (ሲፒዩ+ ጂፒዩ/DSP) ሲስተሞች በጋራ የማህደረ ትውስታ እና የቬክተርራይዜሽን አሃዶች (ሲኤምዲ) መተግበር ቀጥሏል። ለሜታአቅጣጫዎች እና ሰድር፣ ንጥቅ፣ ኢንተርፕ እና የመላክ ግንባታዎች ድጋፍ ታክሏል። ለአንዳንድ ኤ.ዲ.ዲ እና ኤንቪዲአይ ጂፒዩዎች የተዋሃደ የጋራ ማህደረ ትውስታ ድጋፍ ታክሏል (unified_shared_memory "በሚያስፈልገው" መመሪያ ውስጥ በመጥቀስ የነቃ)። ለ"self_maps" አገላለጽ ድጋፍ ታክሏል።
- የ AArch64 አርክቴክቸር የ MinGW መድረክን ለመደገፍ ተዘምኗል (aarch64-w64-mingw32)። ከ20 ARM8 በላይ ማራዘሚያዎች ተተግብረዋል እና ለ ACLE (Arm C Language Extensions) ማራዘሚያ ድጋፍ ተሻሽሏል። በኮድ ጀነሬተር ላይ ብዙ ማሻሻያዎች ተደርገዋል። የሲፒዩ ድጋፍ ታክሏል፡
- አፕል A12 (አፕል-a12)
- አፕል ኤም 1 (አፕል-ኤም 1)
- አፕል ኤም 2 (አፕል-ኤም 2)
- አፕል ኤም 3 (አፕል-ኤም 3)
- ክንድ Cortex-A520AE (cortex-a520ae)
- ክንድ Cortex-A720AE (cortex-a720ae)
- ክንድ ኮርቴክስ-A725 (ኮርቴክስ-a725)
- ክንድ Cortex-R82AE (cortex-r82ae)
- ክንድ Cortex-X925 (ኮርቴክስ-x925)
- Arm Neoverse N3 (neoverse-n3)
- Arm Neoverse V3 (neoverse-v3)
- Arm Neoverse V3AE (neoverse-v3ae)
- ፉጂትሱ-ሞናካ (ፉጂትሱ-ሞናካ)
- NVIDIA ጸጋ
- ኒቪዲያ ኦሊምፐስ (ኦሊምፐስ)
- Qualcomm Oryon-1 (ኦሪዮን-1)
- የ AMD Radeon GPU (GCN) ኮድ ማመንጨት ጀርባ የlibstdc++ ቤተ-መጽሐፍትን ለመደገፍ ዘምኗል እና የሙከራ ኮድ ማመንጨት ድጋፍ ለgfx9-አጠቃላይ፣ gfx10-3-generic እና gfx11-generic መሣሪያ ተከታታይ ታክሏል።
- የ x86 ጀርባ አሁን የኢንቴል መመሪያ ስብስብ አርክቴክቸር ቅጥያዎችን AVX10.2፣ AMX-AVX512፣ AMX-FP8፣ AMX-MOVRS፣ AMX-TF32፣ AMX-TRANSPOSE፣ MOVRSን ይደግፋል። ለIntel Diamond Rapids እና Xeon Phi CPUs ድጋፍ ታክሏል።
- ለ LoongArch እና AVR መድረኮች የተስፋፉ የኋለኛ ክፍል አቅሞች።
- በNios II ፕሮሰሰር ውስጥ ጥቅም ላይ የዋለው የ nios2 ኢላማ አርክቴክቸር የተወገደ። በAArch32 ወደብ ውስጥ ያለው የILP32 ABI (-mabi=ilp64) ድጋፍ ተቋርጧል እና በሚቀጥለው ትልቅ ልቀት ይወገዳል።
ምንጭ: opennet.ru
