የGCC 12 ማጠናከሪያ ስብስብ መልቀቅ

ከአንድ አመት እድገት በኋላ ነፃ የማጠናቀቂያ ስብስብ GCC 12.1 ተለቋል፣ በአዲሱ የጂሲሲ 12.x ቅርንጫፍ ውስጥ የመጀመሪያው ጉልህ ልቀት ነው። በአዲሱ የመልቀቂያ ቁጥር አሰጣጥ እቅድ መሰረት, እትም 12.0 በእድገት ሂደት ውስጥ ጥቅም ላይ ውሏል, እና ጂሲሲ 12.1 ከመውጣቱ ጥቂት ቀደም ብሎ, የጂሲሲ 13.0 ቅርንጫፍ ቀድሞውኑ ተከፍቷል, በዚህ መሠረት የሚቀጥለው ዋና ልቀት GCC 13.1, ይመሰረታል። በግንቦት 23, ፕሮጀክቱ የ GCC የመጀመሪያ እትም ከተመሰረተ 35 ዓመታትን ያከብራል.

ዋና ለውጦች፡-

  • ስለ ሲ አይነቶች መረጃ፣ በተግባሮች እና በማረም ምልክቶች መካከል ያሉ ግንኙነቶችን የሚያቀርብ ለሲቲኤፍ (Compact Type Format) ማረም ቅርፀት ድጋፍ ታክሏል። በ ELF ነገሮች ውስጥ ሲካተት፣ ቅርጸቱ የውሂብ መባዛትን ለማስቀረት የ EFL ቁምፊ ሰንጠረዦችን መጠቀም ያስችላል።
  • በ 1980 ዎቹ ውስጥ የተፈጠረው የ "STABS" ማረም የመረጃ ማከማቻ ቅርጸት ድጋፍ ተቋርጧል።
  • ስራው ለወደፊቱ C2X እና C++23 ደረጃዎች ለ C እና C++ ቋንቋዎች ድጋፍን ማስፋፋቱን ቀጥሏል። ለምሳሌ, ለ "consteval" አገላለጽ ድጋፍ ተጨምሯል; በተግባር ነጋሪ እሴቶች ውስጥ አውቶማቲክን ለመጠቀም ተፈቅዶለታል ("f (auto (g ()))"); እንደ constexpr በተገለጹት ተግባራት ውስጥ ቀጥተኛ ያልሆኑ ተለዋዋጮችን፣ ጎቶ እና መለያዎችን መጠቀም ተፈቅዶላቸዋል። ለባለብዙ-ልኬት መረጃ ጠቋሚ ኦፕሬተሮች ኦፕሬተር [] ተጨማሪ ድጋፍ; ከሆነ ፣ ለ እና ከተቀየረ ፣ የማስጀመሪያ ብሎኮች ችሎታዎች ተስፋፍተዋል (“ለ (T = int ፣ T e: v) በመጠቀም”)።
  • የC++ መደበኛ ቤተ መፃህፍት ለC++20 እና C++23 ደረጃዎች የሙከራ ክፍሎች ድጋፍ አሻሽሏል። ለ std::move_only_function፣ ፣ std ::መሰረታዊ_string :: መጠን_እና_ይፃፈው፣ ፣ እና std:: invoke_r ድጋፍ ታክሏል። std:: ልዩ_ptr፣ std:: vector፣ std:: መሰረታዊ_string፣ std:: አማራጭ እና std:: በ constexpr ተግባራት ውስጥ ተለዋጭ ለመጠቀም ተፈቅዷል።
  • የForran frontend ለ TS 29113 መግለጫ ሙሉ ድጋፍ ይሰጣል፣ ይህም በፎርራን እና ሲ ኮድ መካከል ተንቀሳቃሽነት የማረጋገጥ ችሎታዎችን ይገልጻል።
  • ለ __builtin_shufflevector (vec1, vec2, index1, index2, ...) ማራዘሚያ ከዚህ ቀደም ወደ ክላንግ ታክሏል፣ ይህም የጋራ የቬክተር መወዛወዝን እና የመቀየሪያ ስራዎችን ለማከናወን አንድ ጥሪ ያቀርባል።
  • የ"-O2" ማሻሻያ ደረጃን ሲጠቀሙ፣ ቬክተራይዜሽን በነባሪነት ነቅቷል (-ftree-vectorize እና -fvect-cost-model=በጣም ርካሽ ሁነታዎች ነቅተዋል)። በጣም ርካሹ ሞዴል ቬክተር ማድረግን የሚፈቅደው የቬክተር ኮድ ሙሉ በሙሉ በቬክተራይዝ የተደረገውን ስካላር ኮድ መተካት ከቻለ ብቻ ነው።
  • ጉዳዮችን ለመከታተል እና ያልታወቁ ተለዋዋጮች አጠቃቀም ጋር የተዛመዱ ተጋላጭነቶችን ለመዝጋት ቁልል ላይ ያሉ ተለዋዋጮችን በግልፅ ማስጀመር ለማስቻል የ"-ftrivial-auto-var-init" ሁነታ ታክሏል።
  • ለC እና C++ ቋንቋዎች የአንድን ነገር መጠን ለመወሰን አብሮ የተሰራ ተግባር __builtin_dynamic_object_size ታክሏል፣ከክላንግ ከተመሳሳይ ተግባር ጋር።
  • ለ C እና C ++ ቋንቋዎች "የማይገኝ" ባህሪ ድጋፍ ታክሏል (ለምሳሌ, እነሱን ለመጠቀም ከሞከሩ ስህተት የሚፈጥሩ ተግባራትን ምልክት ማድረግ ይችላሉ).
  • ለ C እና C++ ቋንቋዎች፣ ለቅድመ-ሂደት መመሪያዎች "#elifdef" እና "#elifndef" ድጋፍ ታክሏል።
  • UTF-8 ቁምፊዎች በስህተት ጥቅም ላይ ከዋሉ ማስጠንቀቂያ ለማሳየት የ"-Wbidi-chars" ባንዲራ ታክሏል፣ ባለሁለት አቅጣጫ ጽሁፍ የሚታይበትን ቅደም ተከተል ይቀይራል።
  • ድርድሮችን የሚያመለክቱ ሁለት ኦፔራዶችን ለማነጻጸር ሲሞክሩ ማስጠንቀቂያ ለማሳየት የ"-Warray-compare" ባንዲራ ታክሏል።
  • የ OpenMP 5.0 እና 5.1 (Open Multi-Processing) ደረጃዎችን መተግበር ኤፒአይን እና ትይዩ የፕሮግራም አወጣጥ ዘዴዎችን በብዙ ኮር እና ዲቃላ (ሲፒዩ+ ጂፒዩ/ዲኤስፒ) ሲስተሞች በጋራ የማህደረ ትውስታ እና የቬክተርራይዜሽን አሃዶች (ሲኤምዲ) መተግበር የሚቻልበት መንገድ ነው። , ቀጥሏል.
  • የተሻሻለ የOpenACC 2.6 ትይዩ ፕሮግራሚንግ ስፔስፊኬሽን፣ ይህም በጂፒዩዎች ላይ ስራዎችን ለማውረድ የሚረዱ መሳሪያዎችን እና እንደ NVIDIA PTX ያሉ ልዩ ፕሮሰሰርዎችን ይገልጻል።
  • የተራዘመ መመሪያዎች ኢንቴል AVX86-FP512 እና የ_Float16 አይነት ድጋፍ ለ x16 አርክቴክቸር በኮድ ማመንጨት ጀርባ ላይ ተጨምሯል።
  • ለ x86 አርክቴክቸር፣ ያለምንም ቅድመ ሁኔታ ወደፊት የመዝለል ስራዎች ከተከናወኑ በኋላ በግምታዊ የመመሪያዎች አፈፃፀም ምክንያት በአቀነባባሪዎች ውስጥ ካሉ ተጋላጭነቶች ጥበቃ ተጨምሯል። ችግሩ የሚከሰተው በማህደረ ትውስታ (SLS, Straight Line Speculation) የቅርንጫፍ መመሪያን በመከተል መመሪያዎችን በቅድሚያ በማዘጋጀት ምክንያት ነው. ጥበቃን ለማንቃት "-mharden-sls" አማራጭ ቀርቧል።
  • ለሙከራ የማይንቀሳቀስ ተንታኝ ያልተፈጠሩ ተለዋዋጮች አጠቃቀም ታክሏል። በመስመር ውስጥ ማስገቢያዎች ውስጥ የመሰብሰቢያ ኮድን ለመተንተን የመጀመሪያ ድጋፍ ታክሏል። የተሻሻለ የማህደረ ትውስታ ክትትል። የመቀየሪያ አገላለጾችን የሚሠራበት ኮድ እንደገና ተጽፏል።
  • ኮድ ጄኔሬተርን ወደ ሌሎች ሂደቶች ለመክተት እና ጂአይቲ ባይት ኮድ ወደ ማሽን ኮድ ለማሰባሰብ libgccjit ወደሆነው የጋራ ቤተ-መጽሐፍት 30 አዳዲስ ጥሪዎችን ታክሏል።
  • የ CO-RE ድጋፍ (አንድ ጊዜ ያጠናቅራል - በሁሉም ቦታ ያሂዱ) ዘዴ በቢኤፍኤፍ ባይትኮድ ለማመንጨት በጀርባው ላይ ተጨምሯል ፣ ይህም የኢቢፒኤፍ ፕሮግራሞችን ኮድ ለሊኑክስ ከርነል አንድ ጊዜ ብቻ እንዲያጠናቅሩ እና ልዩ ሁለንተናዊ ሎንደርን ለመጠቀም ያስችላል ። የተጫነ ፕሮግራም ወደ የአሁኑ የከርነል እና የ BPF ዓይነቶች ቅርጸት)። CO-RE የተጠናቀሩ eBPF ፕሮግራሞችን የመሸከም ችግር ይፈታል, ይህም ቀደም ሲል በተቀነባበሩበት የከርነል ስሪት ውስጥ ብቻ ጥቅም ላይ ሊውል ይችላል, ምክንያቱም በውሂብ አወቃቀሮች ውስጥ ያሉ የንጥሎች አቀማመጥ ከስሪት ወደ ስሪት ስለሚቀየር.
  • የ RISC-V ጀርባ ለአዲስ የትምህርት ስብስብ አርክቴክቸር ቅጥያዎች zba፣zbb፣zbc እና zbs፣እንዲሁም ISA ቅጥያዎችን ለቬክተር እና ስካላር ክሪፕቶግራፊክ ስራዎች ድጋፍን ይጨምራል። በነባሪነት ለ RISC-V ISA 20191213 ዝርዝር መግለጫ ቀርቧል። -mtune=thead-c906 ባንዲራ ለT-HEAD c906 ኮሮች ማመቻቸትን ለማስቻል ታክሏል።
  • ለ__int128_t/ኢንቲጀር(አይነት=16) አይነት ድጋፍ በጂሲኤን ማይክሮ አርክቴክቸር መሰረት ለ AMD ጂፒዩዎች በኮድ ማመንጨት ጀርባ ላይ ተጨምሯል። በአንድ የኮምፒውተር ክፍል (CU) እስከ 40 የሥራ ቡድኖችን እና እስከ 16 የማስተማሪያ ግንባሮችን (የሞገድ ፊት ለፊት፣ በሲምዲ ሞተር በትይዩ የተከናወኑ የክሮች ስብስብ) በቡድን መጠቀም ይቻላል። ከዚህ ቀደም በአንድ CU አንድ የማስተማሪያ ጠርዝ ብቻ ተፈቅዶለታል።
  • የNVPTX ደጋፊ፣ የNVDIA PTX (Parallel Thread Execution) መመሪያ ስብስብ አርክቴክቸር በመጠቀም ኮድ ለማመንጨት የተነደፈ ሲሆን የ"-march", "-mptx" እና "-march-map" ባንዲራዎችን የመጠቀም ችሎታን ጨምሯል። የተተገበረ ድጋፍ ለPTX ISA sm_53፣ sm_70፣ sm_75 እና sm_80 ነባሪው አርክቴክቸር sm_30 ነው።
  • ለPowerPC/PowerPC64/RS6000 ፕሮሰሰሮች ከበስተጀርባ አብሮ የተሰሩ ተግባራት አተገባበር እንደገና ተፅፏል። አብሮገነብ ተግባራት __builtin_get_texasr ፣ __builtin_get_tfhar ፣ __builtin_get_tfhar ፣ __builtin_get_tfiar ፣ __builtin_set_texasr ፣__builtin_set_texasru ፣ __builtin_set_texasru ፣
  • ለ Arm Ampere-64 (-mcpu/-mtune ampere1)፣ Arm Cortex-A1 (cortex-a510)፣ Arm Cortex-A510 (cortex-a710) እና Arm Cortex-X710 (cortex- x2) ድጋፍ። ከ"-ማርች" አማራጭ ጋር ለመጠቀም ለአዲሱ ARMv2 አርክቴክቸር አማራጮች ድጋፍ ታክሏል፡ armv8-a፣ armv8.7-a፣ armv8.8-a። የተራዘመ የ ARM መመሪያዎችን (ls9) አጠቃቀምን መሰረት በማድረግ ለአቶሚክ ጭነት እና መረጃን ወደ ማህደረ ትውስታ ለመቆጠብ በአቀናባሪ (ኢንትሪንሲክስ) ውስጥ የተገነቡ የC ተግባራትን መተግበር ታክሏል። የሞፕሶፕሽን ARM ቅጥያ በመጠቀም memcpy፣ memmove እና memset ተግባራትን ለማፋጠን ተጨማሪ ድጋፍ።
  • አዲስ የፍተሻ ሁነታ ታክሏል "-fsanitize=shadow-call-stack" (ShadowCallStack)፣ ይህም በአሁኑ ጊዜ ለ AArch64 አርክቴክቸር ብቻ የሚገኝ እና ኮድ ሲገነባ በ"-fixed-r18" አማራጭ። ሁነታው በተደራራቢው ላይ ቋት በሚሞላበት ጊዜ የመመለሻ አድራሻውን ከአንድ ተግባር እንዳይጽፍ ጥበቃ ያደርጋል። የጥበቃው ዋናው ነገር መቆጣጠሪያውን ወደ ተግባር ካስተላለፉ እና ተግባሩን ከመውጣትዎ በፊት ይህንን አድራሻ ካገኙ በኋላ የመመለሻ አድራሻውን በተለየ የ "ጥላ" ቁልል ውስጥ ማስቀመጥ ነው.

ምንጭ: opennet.ru

አስተያየት ያክሉ