ከስድስት ወራት እድገት በኋላ የኤልኤልቪኤም 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