የኤልኤልቪኤም 16.0 ማጠናከሪያ ስብስብ መለቀቅ

ከስድስት ወራት እድገት በኋላ የኤልኤልቪኤም 16.0 ፕሮጀክት መለቀቅ ቀርቧል - ከጂሲሲ ጋር ተኳሃኝ የሆነ የመሳሪያ ስብስብ (አቀናባሪዎች ፣ አመቻቾች እና ኮድ ማመንጫዎች) ፕሮግራሞችን ወደ መካከለኛ ቢትኮድ እንደ RISC መሰል ምናባዊ መመሪያዎች ያጠናቅራል (ዝቅተኛ ደረጃ ምናባዊ ማሽን ከ ባለብዙ ደረጃ ማመቻቸት ስርዓት). የመነጨው pseudocode በፕሮግራሙ አፈጻጸም ጊዜ በቀጥታ በጂአይቲ ማጠናከሪያ ወደ ማሽን መመሪያዎች ሊቀየር ይችላል።

በክላንግ 16.0 ውስጥ ዋና ማሻሻያዎች፡-

  • ነባሪው የC++/ObjC++ መስፈርት gnu++17 ነው (ቀደም ሲል gnu++14) ይህ ማለት የC++17 ባህሪያት ከጂኤንዩ ቅጥያዎች ጋር በነባሪ ይደገፋሉ ማለት ነው። የቀደመውን ባህሪ ለመመለስ የ"-std=gnu++14" አማራጭን መጠቀም ትችላለህ።
  • ከC++20 መስፈርት ጋር የተያያዙ የላቁ ባህሪያት፡-
    • ሁኔታዊ ጥቃቅን ልዩ የአባልነት ተግባራት፣
    • በላምዳ ተግባራት ውስጥ የተዋቀሩ ማሰሪያዎችን መያዝ ፣
    • በገለፃዎች ውስጥ የእኩልነት ኦፕሬተር ፣
    • በአንዳንድ አውድ ውስጥ የጽሕፈት ስም ቁልፍ ቃልን የማስወገድ አማራጭ ፣
    • በቅንፍ ውስጥ የሚሰራ የድምር ጅምር ("Aggr(val1, val2)")።
  • በወደፊቱ የC++2b መስፈርት የተገለጹ ባህሪያት ተተግብረዋል፡-
    • በድብልቅ መግለጫዎች መጨረሻ ላይ መለያዎችን ማስቀመጥ ተፈቅዶለታል፣
    • የማይንቀሳቀስ ኦፕሬተር()
    • የማይንቀሳቀስ ኦፕሬተር[]፣
    • ከ char8_t አይነት ጋር ተኳሃኝነት የተረጋገጠ ነው፣
    • በ"\N{...}" ውስጥ ለመጠቀም የሚፈቀደው የቁምፊዎች ክልል ተዘርግቷል።
    • እንደ constexpr በተገለጹት ተግባራት ውስጥ እንደ “static constexpr” የተገለጹ ተለዋዋጮችን የመጠቀም ችሎታ ታክሏል።
  • በወደፊቱ የC-standard C2x የተገለጹት ባህሪያት ተተግብረዋል፡-
    • የ"-Wunused-label" ማስጠንቀቂያን ለማሰናከል የ"[[ምናልባት_ጥቅም ላይ ያልዋለ]]" ባህሪው በመለያዎች ላይ እንዲተገበር ተፈቅዶለታል።
    • በተዋሃዱ አባባሎች ውስጥ የትም ቦታ መለያዎችን ማስቀመጥ ተፈቅዶለታል፣
    • የተጨመረው ዓይነት እና ዓይነት_ያልሆኑ ኦፕሬተሮች፣
    • አዲስ አይነት nullptr_t እና nullptr ቋሚ ወደ ማንኛውም የጠቋሚ አይነት የሚቀይሩ እና ከኢንቲጀር እና ባዶ* አይነቶች ጋር ያልተያያዘ የNULL ልዩነትን የሚወክሉ ባዶ አመልካቾችን ለመግለጽ።
    • በC2x ሁነታ የቫ_ስታርት ማክሮን ከተለዋዋጭ ነጋሪ እሴት (variadic) ጋር መጥራት ይፈቀዳል።
  • በC99፣ C11 እና C17 ተገዢነት ሁነታዎች ነባሪ አማራጮች "-Wimplicit-function-Declaration" እና "-Wimplicit-int" አሁን ከማስጠንቀቂያ ይልቅ ስህተት ይፈጥራሉ።
  • በC++ ሁነታ ላይ የ"void *" (ለምሳሌ "void func(void *p) {*p; }") በተዘዋዋሪ መጠቀም አሁን ከ ISO C++፣ GCC፣ ICC እና MSVC ጋር ተመሳሳይ የሆነ ስህተት ይፈጥራል።
  • በማይክሮሶፍት ስታይል የውስጥ መገጣጠም ብሎኮች ውስጥ ቢትፊልድን እንደ መመሪያ ኦፔራዎች (ለምሳሌ "__asm ​​​​{mov eax, s.bf}") መለየት አሁን ስህተት ይፈጥራል።
  • በተለያዩ ሞጁሎች ውስጥ ተመሳሳይ ስሞች ያላቸው የተለያዩ መዋቅሮች እና ማህበራት መኖራቸውን ተጨማሪ ምርመራዎች.
  • ከOpenCL እና OpenMP ድጋፍ ጋር የተያያዙ ችሎታዎች ተዘርግተዋል። በOpenCL kernel ክርክሮች ውስጥ ጥቅም ላይ ለሚውሉ የC++ አብነቶች የተሻሻለ ምርመራዎች። ለ AMDGPU የተሻሻለ ወረፋ ድጋፍ። የስም ንፋስ ባህሪው በተዘዋዋሪ በሁሉም ተግባራት ላይ ተጨምሯል። አብሮገነብ ተግባራት የተሻሻለ ድጋፍ።
  • የብልሽት መመርመሪያ ውሂብ የተቀመጠበትን ማውጫ ለመወሰን የCLAG_CRASH_DIAGNOSTICS_DIR አካባቢ ተለዋዋጭ የመጠቀም ችሎታ ታክሏል።
  • የዩኒኮድ ድጋፍ ወደ ዩኒኮድ 15.0 ዝርዝር ተዘምኗል። አንዳንድ የሂሳብ ምልክቶች እንደ "₊" (ለምሳሌ "ድርብ xₖ₊₁") ባሉ ለዪዎች ውስጥ ተፈቅደዋል።
  • ብዙ የማዋቀሪያ ፋይሎችን ለመጫን ተጨማሪ ድጋፍ (ነባሪ የማዋቀሪያ ፋይሎች መጀመሪያ ይጫናሉ, ከዚያም በ "--config=" ባንዲራ በኩል የተገለጹት, አሁን ብዙ ጊዜ ሊገለጹ ይችላሉ). የማዋቀሪያ ፋይሎችን ነባሪ የመጫኛ ቅደም ተከተል ተለውጧል፡ clang መጀመሪያ ፋይሉን ለመጫን ይሞክራል። - .cfg፣ እና ካልተገኘ ሁለት ፋይሎችን ለመጫን ይሞክራል። .cfg እና .cfg. የማዋቀሪያ ፋይሎችን በነባሪነት ለማሰናከል፣ የ«--no-default-config» ባንዲራ ታክሏል።
  • ሊደገሙ የሚችሉ ግንባታዎችን ለማረጋገጥ በ__DATE__፣ __TIME__ እና __TIMESTAMP__ ማክሮዎች ውስጥ ያሉትን የቀን እና የሰዓት ዋጋዎች በ SOURCE_DATE_EPOCH አካባቢ ተለዋዋጭ በተጠቀሰው ጊዜ መተካት ይቻላል።
  • በቋሚዎች አውድ ውስጥ ጥቅም ላይ ሊውሉ የሚችሉ አብሮገነብ ተግባራት (builtin) መኖራቸውን ለማረጋገጥ ማክሮ "__has_constexpr_builtin" ተጨምሯል።
  • አዲስ የተጠናቀረ ባንዲራ ታክሏል "-fcoro-aligned-allocation" ለተሰለፈው የኮሮቲን ፍሬም ምደባ።
  • የ "-fstrict-flex-arrays=" ባንዲራ በመዋቅሮች ውስጥ ተለዋዋጭ ድርድር አባሎች (Flexible Array Members, በ መዋቅሩ መጨረሻ ላይ ያልተወሰነ መጠን ያለው ድርድር) ለሦስተኛ ደረጃ የማረጋገጫ ድጋፍን ተግባራዊ ያደርጋል። በሶስተኛ ደረጃ፣ ልክ "[]" (ለምሳሌ "int b[]") ልክ እንደ ተለዋዋጭ ድርድር ነው የሚወሰደው፣ ግን መጠኑ "[0]" (ለምሳሌ "int b[0]") አይደለም.
  • ነጠላ-ደረጃ ማጠናቀር ሞዴልን ለመደበኛ C++ ሞጁሎች ለማንቃት የ"-fmodule-output" ባንዲራ ታክሏል።
  • በቁልል ፍሬም አቀማመጥ ላይ ያሉ ችግሮችን ለመለየት የሚረዳ "-Rpass-analysis=stack-frame-layout" ሁነታ ታክሏል።
  • በ AArch1 የቀረቡ የተወሰኑ የባህሪያት ስሪቶችን ለመምረጥ አዲስ ባህሪ __ባህሪ __((ዒላማ_ስሪት("ሲፒዩ_features"))) ታክሏል እና የባህሪውን ተግባር __ባህሪ__(( target_clones("cpu_features2"፣cpu_features64፣...))) አራዝሟል። ሲፒዩዎች
  • የምርመራ መሣሪያዎች ተዘርግተዋል፡-
    • አንድ ለነጠላ-ቢት የተፈረመ የቢት መስክ ሲመደብ ስውር መቆራረጥን ለመለየት "-Wsingle-bit-bitfield-constant-conversion" ታክሏል።
    • ያልታወቁ የኮንስቴክፕር ተለዋዋጮች ምርመራዎች ተዘርግተዋል።
    • "-Wcast-function-type-strict" እና "-Win ተኳሃኝ-ተግባር-ጠቋሚ-አይነቶች-ጥብቅ" ማስጠንቀቂያዎች የተግባር አይነት መውሰድ ላይ ሊሆኑ የሚችሉ ችግሮችን ለመለየት ታክለዋል።
    • የተሳሳቱ ወይም የተያዙ የሞዱል ስሞችን ወደ ውጭ መላኪያ ብሎኮች ለመጠቀም የታከሉ ምርመራዎች።
    • በትርጉሞች ውስጥ የጎደሉ "ራስ-ሰር" ቁልፍ ቃላትን ማግኘቱ የተሻሻለ።
    • የ "-Winteger-overflow" ማስጠንቀቂያ መተግበር ወደ ፍሳሾችን የሚያመሩ ተጨማሪ ሁኔታዎችን ፍተሻ ጨምሯል።
  • በLongson 64 464 ፕሮሰሰር ጥቅም ላይ የዋለው እና አዲሱን RISC ISA በመተግበር ላይ ለLongArch መመሪያ ስብስብ አርክቴክቸር (-march=loongarch3 or -march=la5000) የተተገበረ ድጋፍ እና ከ MIPS እና RISC-V ጋር ተመሳሳይ።

በኤልኤልቪኤም 16.0 ውስጥ ቁልፍ ፈጠራዎች፡-

  • LLVM ኮድ በC++17 ደረጃ የተገለጹ ክፍሎችን እንዲጠቀም ተፈቅዶለታል።
  • LLVMን ለመገንባት የአካባቢ መስፈርቶች ጨምረዋል። የግንባታ መሳሪያዎች አሁን የ C ++17 ደረጃን መደገፍ አለባቸው, ማለትም. ለመገንባት፣ ቢያንስ GCC 7.1፣ Clang 5.0፣ Apple Clang 10.0 ወይም Visual Studio 2019 16.7 ያስፈልግዎታል።
  • የ AArch64 አርክቴክቸር ጀርባ ለ Cortex-A715፣ Cortex-X3 እና Neoverse V2 CPUs፣ Assembler ለ RME MEC (የማስታወሻ ምስጠራ አውዶች)፣ Armv8.3 ቅጥያዎች (ውስብስብ ቁጥር) እና ተግባር ባለብዙ ሥሪት።
  • በኤአርኤም አርክቴክቸር ጀርባ ለArmv2፣Armv2A፣Armv3 እና Armv3M ዒላማ መድረኮች ድጋፍ ተቋርጧል፣ ለዚህም ትክክለኛ ኮድ ማመንጨት ዋስትና አልነበረውም። ከተወሳሰቡ ቁጥሮች ጋር ለመስራት መመሪያዎችን ኮድ የማመንጨት ችሎታ ታክሏል።
  • የ X86 አርክቴክቸር ጀርባ ለትምህርት ስብስብ አርክቴክቸር (ISAs) AMX-FP16፣ CMPCCXADD፣ AVX-IFMA፣ AVX-VNNI-INT8፣ AVX-NE-CONVERT ድጋፍ አድርጓል። ለRDMSRLIST፣ RMSRLIST እና WRMSRNS መመሪያዎች ድጋፍ ታክሏል። የተተገበሩ አማራጮች "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" እና "-mcpu= grandridge"።
  • ለ LoongArch መድረክ ይፋዊ ድጋፍ ታክሏል።
  • ለ MIPS፣ PowerPC እና RISC-V አርክቴክቸር የተሻሻሉ የኋላ ሽፋኖች
  • ለLongArch አርክቴክቸር 64-ቢት ተፈፃሚዎችን ወደ ኤልኤልዲቢ አራሚ ለማረም ድጋፍ ታክሏል። የተሻሻለ የ COFF ማረም ምልክቶች አያያዝ። በተጫኑ የዊንዶውስ ሞጁሎች ዝርዝር ውስጥ የተባዙ DLLዎችን ማጣራት ቀርቧል።
  • በLibc++ ቤተ-መጽሐፍት ውስጥ ዋናው ስራው ለ C++20 እና C++23 ደረጃዎች አዲስ ባህሪያት ድጋፍን በመተግበር ላይ ያተኮረ ነበር።
  • የኤልዲዲ ማገናኛ የአድራሻ ማዛወሪያ ቅኝትን እና የክፍል ማስጀመሪያ ስራዎችን በማዛመድ የማገናኘት ጊዜን በእጅጉ ይቀንሳል። የZSTD አልጎሪዝምን በመጠቀም ለክፍል መጭመቂያ ድጋፍ ታክሏል።

ምንጭ: opennet.ru

አስተያየት ያክሉ