ከስድስት ወር እድገት በኋላ
በኤልኤልቪኤም 10.0 ውስጥ ያሉ አዳዲስ ባህሪያት ለ C++ ጽንሰ-ሀሳቦች ድጋፍን ያካትታሉ፣ ከአሁን በኋላ ክላንግን እንደ የተለየ ሂደት አይሰራም፣ ለ CFG (የቁጥጥር ፍሰት ጠባቂ) የዊንዶውስ ቼኮች እና ለአዲስ ሲፒዩ ችሎታዎች ድጋፍ።
- ለ" ድጋፍ ታክሏል
ጽንሰ-ሐሳቦች "፣ C++ አብነት ቅጥያ በሚቀጥለው መስፈርት ውስጥ የሚካተት፣ በኮድ ስም C++2a (በ -std=c++2a ባንዲራ የበራ)።
ፅንሰ-ሀሳቦች የአብነት መለኪያ መስፈርቶችን ስብስብ እንዲገልጹ ያስችሉዎታል፣ ይህም በማጠናቀር ጊዜ፣ እንደ አብነት መመዘኛዎች ተቀባይነት ያላቸውን ነጋሪ እሴቶች ስብስብ ይገድባል። ፅንሰ-ሀሳቦቹ በአብነት ውስጥ ጥቅም ላይ በሚውሉ የውሂብ አይነቶች ባህሪያት እና በግቤት ግቤቶች የውሂብ አይነት ባህሪያት መካከል ያለውን አመክንዮአዊ አለመጣጣም ለማስወገድ ጥቅም ላይ ሊውሉ ይችላሉ.አብነት
ፅንሰ-ሀሳብ እኩልነት ሊወዳደር የሚችል = ይጠይቃል (T a, T b) {
{a == b } -> std:: ቡሊያን;
{a != b } -> std:: boolean;
}; - በነባሪ, ማጠናቀር የሚከናወነው የተለየ ሂደት ("clang -cc1") መጀመር ይቆማል. ማጠናቀር አሁን በዋናው ሂደት ውስጥ ተከናውኗል, እና "-fno-integrated-cc1" አማራጭ የድሮውን ባህሪ ለመመለስ ጥቅም ላይ ሊውል ይችላል.
- አዲስ የምርመራ ሁነታዎች፡-
- "-Wc99-designator" እና "-Wreorder-init-list" C99 ማስጀመሪያዎችን በC++ ሁነታ በC99 ትክክል ሲሆኑ ነገር ግን በC++20 ላይ እንዳይጠቀሙ ያስጠነቅቃሉ።
- "-Wsizeof-array-div" - እንደ "int arr[10] ያሉ ሁኔታዎችን ይይዛል; …መጠን(arr) /መጠኑ(አጭር)…” (“መጠን(arr)/መጠን(int)” መሆን አለበት።
- "-Wxor-used-as-po" - እንደ "^" (xor) ኦፕሬተርን ከማጉላት (2 ^ 16) ጋር ሊምታታ በሚችል ኦፕሬሽኖች ውስጥ ግንባታዎችን ከመጠቀም ያስጠነቅቃል.
- "-Wfinal-dtor-ያልሆኑ የመጨረሻ-ክፍል" - "የመጨረሻ" ገላጭ ጋር ምልክት አይደለም ክፍሎች ስለ ያስጠነቅቃል, ነገር ግን "የመጨረሻ" ባህሪ ጋር አጥፊ አላቸው.
- "-Wtautological-bitwise-compare" በቢትዊዝ ኦፕሬሽን እና በቋሚ መካከል ያለውን ታውቶሎጂካል ንፅፅርን ለመመርመር እና የቢትዊዝ OR ኦፕሬሽን አሉታዊ ባልሆነ ቁጥር ላይ የሚተገበርበትን ሁሌም እውነተኛ ንፅፅርን ለመለየት የማስጠንቀቂያ ቡድን ነው።
- "-Wbitwise-conditional-parentheses" አመክንዮአዊ ኦፕሬተሮችን እና (&) እና OR (|) ከሁኔታዊ ኦፕሬተር (?:) ጋር ሲቀላቀሉ ችግሮችን ያስጠነቅቃል።
- “-Wmisleading-indentation” ከጂሲሲ የተገኘ ተመሳሳይ ስም ያለው ቼክ አናሎግ ነው፣ እሱም ስለተጠለፉ አገላለጾች ልክ እንደ/ሌላ/ለ/ጊዜ ብሎክ አካል እንደሆኑ ያስጠነቅቃል፣ነገር ግን በእውነቱ በዚህ ብሎክ ውስጥ አልተካተቱም። .
- “-Wextra”ን ሲገልጹ፣ “-የተቀደሰ-ኮፒ” ቼክ ነቅቷል፣ ስለ ግንበኞች አጠቃቀም ማስጠንቀቂያ።
ግልጽ አጥፊ ፍቺ ባላቸው ክፍሎች ውስጥ "አንቀሳቅስ" እና "ቅዳ"። - የ "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-ትንተና" ቼኮች ተዘርግተዋል.
- የ"-Wbitwise-op-parentheses" እና "-Wlogical-op-parentheses" ቼኮች በነባሪነት ተሰናክለዋል።
- በ C እና C ++ ኮድ ውስጥ የጠቋሚ የሂሳብ ስራዎች በድርድር ውስጥ ብቻ ይፈቀዳሉ. በ"-fsanitize=pointer-overflow" ሁነታ ላይ ያለው ያልተገለፀው የባህሪ ሳኒታይዘር አሁን እንደ ዜሮ ያልሆነ ማካካሻ ወደ ባዶ ጠቋሚ ማከል ወይም ኢንቲጀርን ከኑል ካልሆኑ ጠቋሚ ሲቀንሱ ያሉ ጉዳዮችን ይይዛል።
- የ"-fsanitize=implicit-conversion"(Implicit Conversion Sanitizer) ሁነታ ከ"int" አይነት ትንሽ መጠን ያላቸውን አይነቶች በመጨመር እና በመቀነስ ላይ ያሉ ችግሮችን ለመለየት ተስተካክሏል።
- x86 ኢላማ አርክቴክቸር ሲመርጡ "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" እና "-march=cooperlake" በነባሪነት በ vectorized ኮድ 512-ቢት zmm መዝገቦችን መጠቀም አቁሟል፣በምንጭ ኮድ ውስጥ በቀጥታ ከማመላከታቸው በስተቀር። ምክንያቱ የ 512 ቢት ስራዎችን በሚያከናውንበት ጊዜ የሲፒዩ ድግግሞሽ ይቀንሳል, ይህም አጠቃላይ አፈፃፀም ላይ አሉታዊ ተጽዕኖ ሊያሳድር ይችላል. አዲሱን ባህሪ ለመቀየር "-mprefer-vector-width=512" አማራጭ ቀርቧል።
- የ"-flax-vector-conversions" ባንዲራ ባህሪ ከጂሲሲ ጋር ተመሳሳይ ነው፡ ኢንቲጀር እና ተንሳፋፊ ነጥብ ቬክተር መካከል ስውር የቬክተር ቢት ልወጣዎች የተከለከሉ ናቸው። ይህንን ገደብ ለማጥፋት ባንዲራውን ለመጠቀም ይመከራል
"-flax-vector-conversions=all" ይህም ነባሪው ነው። - ለ Octeon ቤተሰብ MIPS ሲፒዩዎች የተሻሻለ ድጋፍ። ልክ የሆኑ የሲፒዩ አይነቶች ዝርዝር ውስጥ "octeon+" ታክሏል።
- ወደ WebAssembly መካከለኛ ኮድ በሚሰበሰቡበት ጊዜ በሲስተሙ ውስጥ ካለ የ wasm-opt optimizer በራስ-ሰር ይጠራል።
- በ RISC-V ሥነ ሕንፃ ላይ ለተመሠረቱ ሥርዓቶች ተንሳፋፊ ነጥብ እሴቶችን የሚያከማቹ መዝገቦችን መጠቀም በሁኔታዊ የአሰባሳቢ መስመር ማስገቢያዎች ውስጥ ይፈቀዳል።
- አዲስ የአቀናባሪ ባንዲራዎች ታክለዋል፡ "-fgnuc-version" የስሪት ዋጋን ለ"__GNUC__" እና ተመሳሳይ ማክሮዎች ለማዘጋጀት፤ "-fmacro-prefix-map=OLD=አዲስ" እንደ "__FILE__" ባሉ ማክሮዎች የድሮውን ማውጫ ቅድመ ቅጥያ በአዲስ ለመተካት; "-fpatchable-function-entry=N[,M]" ከተግባር መግቢያ ነጥብ በፊት እና በኋላ የተወሰኑ የNOP መመሪያዎችን ለማመንጨት። ለ RISC-V
ለ"-ffixed-xX"፣ "-mcmodel=medany" እና "-mcmodel=medlow" ባንዲራዎች ተጨማሪ ድጋፍ። - ለ'__ባህሪይ__((ዒላማ("ቅርንጫፍ-ጥበቃ=..."))) መገለጫ ባህሪ ታክሏል፣ ውጤቱም ከአማራጭ ጋር ተመሳሳይ ነው።
- ቅርንጫፍ-መከላከያ . - በዊንዶውስ መድረክ ላይ, የ "-cfguard" ባንዲራ ሲገልጹ, የአፈፃፀም ፍሰት ትክክለኛነት ፍተሻዎችን (የመቆጣጠሪያ ፍሰት ጠባቂ) በተዘዋዋሪ የተግባር ጥሪዎች መተካት ይተገበራል. የፍተሻ ምትክን ለማሰናከል የ"-cfguard-nochecks" ባንዲራ ወይም "__declspec(guard(nocf))"ማሻሻያ መጠቀም ይችላሉ።
- የ gnu_inline ባህሪ ባህሪ ያለ "ውጫዊ" ቁልፍ ቃል ጥቅም ላይ በሚውልበት ጊዜ ከጂሲሲ ጋር ተመሳሳይ ነው.
- ከOpenCL እና CUDA ድጋፍ ጋር የተያያዙ ችሎታዎች ተዘርግተዋል። ለአዲስ የOpenMP 5.0 ባህሪያት ድጋፍ ታክሏል።
- ኮድ ሲተነተን እና ሲቀረፅ ጥቅም ላይ የዋለውን የC++ ስታንዳርድ ስሪት (የቅርብ ጊዜ፣ አውቶ፣ c++03፣ c++11፣ c++14፣ c++17፣ c++20፣ c++XNUMX፣ c++XNUMX)።
- አዲስ ፍተሻዎች ወደ static analyzer ተጨምረዋል፡ alpha.cplusplus.PlacementNew፣ በቂ የማከማቻ ቦታ እንዳለ ለማወቅ፣ fuchsia.HandleChecker ከFuchsia ተቆጣጣሪዎች ጋር የተዛመዱ ፍንጣቂዎችን ለመለየት፣security.insecureAPI.decodeValueOfObjCType [NSCoder deValueBjUeBJJType] በሚጠቀሙበት ጊዜ ቋት የሚበዛበትን ለማወቅ በ፡]።
- ያልተገለፀው የባህሪ ሳኒታይዘር (UBSan) ዜሮ ያልሆኑ ማካካሻዎችን ወደ NULL ጠቋሚዎች መተግበርን ወይም የ NULL ጠቋሚ ማካካሻ መጨመርን ለመያዝ የጠቋሚውን የትርፍ ፍሰት ፍተሻዎችን አስፍቷል።
- በሊንተር ክላንግ-የተስተካከለ
ታክሏል አዲስ ቼኮች ትልቅ ክፍል.
ዋና
- ወደ ማዕቀፉ
መለያ ሰጪ አዳዲስ የእርስ በርስ ማመቻቸት እና ተንታኞች ተጨምረዋል። እንደ ህያውነት ያሉ 19 ባህሪያት 12 LLVM IR እና 12 ረቂቅ ባህሪያትን ጨምሮ የ7 የተለያዩ ባህሪያት ሁኔታ ተንብዮአል። - በአቀነባባሪው ውስጥ የተገነቡ አዲስ ማትሪክስ የሂሳብ ተግባራት ታክለዋል (
ውስጣዊ ነገሮች ) በማጠናቀር ጊዜ በተቀላጠፈ የቬክተር መመሪያዎች የሚተኩ። - ለX86፣ AArch64፣ ARM፣ SystemZ፣ MIPS፣ AMDGPU እና PowerPC አርክቴክቸር ለጀርባ ድጋፍ ብዙ ማሻሻያዎች ተደርገዋል። የሲፒዩ ድጋፍ ታክሏል።
Cortex-A65, Cortex-A65AE, Neoverse E1 እና Neoverse N1. ለ ARMv8.1-M፣ የኮድ ማመንጨት ሂደት ተሻሽሏል (ለምሳሌ፣ በትንሹ በላይ ላይ ላሉት loops ድጋፍ ታይቷል) እና የMVE ማራዘሚያን በመጠቀም አውቶቬክተር የማድረግ ድጋፍ ተጨምሯል። የተሻሻለ ሲፒዩ MIPS Octeon ድጋፍ። ለPowerPC፣ የ MASSV (የሂሳብ አፋጣኝ ንዑስ ስርዓት) ቤተ-መጽሐፍትን በመጠቀም የሒሳብ ንዑስ ክፍሎችን ቬክተር ማድረግ ነቅቷል፣ ኮድ ማመንጨት ተሻሽሏል፣ እና ከ loops የማስታወሻ መዳረሻ ተመቻችቷል። ለ x86፣ የቬክተር አይነቶች v2i32፣ v4i16፣ v2i16፣ v8i8፣ v4i8 እና v2i8 አያያዝ ተለውጧል። - ለWebAssembly የተሻሻለ ኮድ ጄኔሬተር። ለTLS (የክር-አከባቢ ማከማቻ) እና የatomic.fence መመሪያዎች ድጋፍ ታክሏል። የሲምዲ ድጋፍ በከፍተኛ ሁኔታ ተስፋፍቷል። WebAssembly የነገር ፋይሎች አሁን ባለብዙ ዋጋ የተግባር ፊርማዎችን የመጠቀም ችሎታ አላቸው።
- loops በሚሰራበት ጊዜ ተንታኙ ጥቅም ላይ ይውላል
ማህደረ ትውስታSSA , ይህም በተለያዩ የማህደረ ትውስታ ስራዎች መካከል ያለውን ጥገኝነት እንዲገልጹ ያስችልዎታል. MemorySSA የማጠናቀር እና የማስፈጸሚያ ጊዜን ሊቀንስ ይችላል ወይም ከአሊያስሴት ትራከር ይልቅ አፈጻጸም ሳያጣ መጠቀም ይችላል። - የኤልዲቢ አራሚው ለDWARF v5 ቅርጸት ድጋፍን በከፍተኛ ሁኔታ አሻሽሏል። ከ MinGW ጋር ለመገንባት የተሻሻለ ድጋፍ
እና የ Windows executablesን ለARM እና ARM64 አርክቴክቸር የማረም የመጀመሪያ ችሎታ ታክሏል። ትርን በመጫን ግቤትን በራስ-ሰር ሲያጠናቅቁ የቀረቡት አማራጮች መግለጫዎች ታክለዋል። -
ተስፋፋ የኤልኤልዲ ማያያዣ ችሎታዎች። ለኤልኤፍ ቅርጸት የተሻሻለ ድጋፍ፣ የግሎብ አብነቶችን ከጂኤንዩ አገናኝ ጋር ሙሉ ለሙሉ ተኳሃኝነትን ማረጋገጥ፣ ለተጨመቁ ማረም ክፍሎች ድጋፍን ማከል ".zdebug"፣ የ.note.gnu.property ክፍልን ለመግለጽ የPT_GNU_PROPERTY ንብረቱን ማከል (ለወደፊት ጥቅም ላይ ሊውል ይችላል) ሊኑክስ ኮርነሎች),
የ "-z noseparate-code", "-z የተለየ-ኮድ" እና "-z የተለየ ሊጫኑ የሚችሉ-ክፍልች" ሁነታዎች ተተግብረዋል. ለMingW እና WebAssembly የተሻሻለ ድጋፍ።
ምንጭ: opennet.ru