Ar ôl chwe mis o ddatblygiad wedi'i gyflwyno rhyddhau prosiect LLVM 10.0 - Offer sy'n gydnaws â GCC (cyfunwyr, optimizers a generaduron cod), llunio rhaglenni i god did canolradd o gyfarwyddiadau rhithwir tebyg i RISC (peiriant rhithwir lefel isel gyda system optimeiddio aml-lefel). Gellir trosi'r ffuggod a gynhyrchir gan ddefnyddio casglwr JIT yn gyfarwyddiadau peiriant yn uniongyrchol ar adeg gweithredu'r rhaglen.
Mae nodweddion newydd yn LLVM 10.0 yn cynnwys cefnogaeth ar gyfer C ++ Concepts, nid yw bellach yn rhedeg Clang fel proses ar wahân, cefnogaeth ar gyfer gwiriadau CFG (gwarchod llif rheoli) ar gyfer Windows, a chefnogaeth ar gyfer galluoedd CPU newydd.
Ychwanegwyd cefnogaeth ar gyfer "cysyniadau", estyniad templed C++ a fydd yn cael ei gynnwys yn y safon nesaf, gyda'r enw cod C++2a (wedi'i droi ymlaen gan y faner -std=c++2a).
Mae cysyniadau'n caniatáu ichi ddiffinio set o ofynion paramedr templed sydd, ar amser llunio, yn cyfyngu ar y set o ddadleuon y gellir eu derbyn fel paramedrau templed. Gellir defnyddio'r cysyniadau i osgoi anghysondebau rhesymegol rhwng priodweddau'r mathau o ddata a ddefnyddir yn y templed a phriodweddau math data'r paramedrau mewnbwn.
templed
cysyniad CydraddoldebComparable = gofyn(T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
};
Yn ddiofyn, rhoddir y gorau i lansio proses ar wahân (“clang -cc1”) lle caiff y gwaith ei lunio. Mae'r gwaith llunio bellach yn cael ei wneud yn y brif broses, a gellir defnyddio'r opsiwn "-fno-integrated-cc1" i adfer yr hen ymddygiad.
Dulliau diagnostig newydd:
Mae "-Wc99-designator" a "-Wreorder-init-list" yn rhybuddio yn erbyn defnyddio cychwynwyr C99 yn y modd C++ mewn achosion lle maent yn gywir yn C99 ond nid yn C++20.
"-Wsizeof-array-div" - dal sefyllfaoedd fel "int arr[10]; …maint(arr) / sizeof(byr)…” (dylai fod yn “sizeof(arr) / sizeof(int)”).
Mae "-Wxor-used-as-po" - yn rhybuddio yn erbyn defnyddio lluniadau megis y defnydd o weithredwr "^" (xor) mewn gweithrediadau y gellir eu cymysgu ag esboniad (2^16).
Mae "-Wfinal-dtor-non-final-class" - yn rhybuddio am ddosbarthiadau nad ydynt wedi'u marcio â'r fanyleb "terfynol", ond sydd â distryw gyda'r priodoledd "terfynol".
Mae "-Wtautological-bitwise-compare" yn grŵp o rybuddion ar gyfer gwneud diagnosis o gymariaethau tautolegol rhwng gweithrediad bitwise a chysonyn, ac ar gyfer nodi cymariaethau gwir bob amser lle mae'r gweithrediad bitwise NEU yn cael ei gymhwyso i rif nad yw'n negyddol.
Mae "-Wbitwise-conditional-parentheses" yn rhybuddio am broblemau wrth gymysgu'r gweithredwyr rhesymegol AC (&) ac OR(|) gyda'r gweithredwr amodol (?:).
Mae “-Wmisleading-indentation” yn analog o'r siec o'r un enw gan GCC, sy'n rhybuddio am ymadroddion wedi'u hindentio fel pe baent yn rhan o floc os/arall/am/tra, ond mewn gwirionedd nid ydynt wedi'u cynnwys yn y bloc hwn .
Wrth nodi "-Wextra", mae'r gwiriad "-Wdeprecated-copy" wedi'i alluogi, gan rybuddio am y defnydd o adeiladwyr
"symud" a "copi" mewn dosbarthiadau gyda diffiniad dinistriol penodol.
Mae'r gwiriadau "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-analysis" wedi'u hehangu.
Mae'r gwiriadau "-Wbitwise-op-parentheses" a "-Wlogical-op-parentheses" wedi'u hanalluogi yn ddiofyn.
Mewn cod C a C++, dim ond mewn araeau y caniateir gweithrediadau rhifyddeg pwyntydd. Mae'r Glanweithydd Ymddygiad Anniffiniedig yn y modd "-fsanitize=pointer-overflow" bellach yn dal achosion fel ychwanegu gwrthbwyso di-sero at bwyntydd nwl neu greu pwyntydd nwl wrth dynnu cyfanrif o bwyntydd di-nwl.
Mae'r modd "-fsanitize=implicit-conversion" (Implicit Conversion Sanitizer) wedi'i addasu i nodi problemau gyda gweithrediadau cynyddiad a gostyngiad ar gyfer mathau sydd ychydig yn llai na maint y math "int".
Wrth ddewis pensaernïaeth darged x86 "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" a "-march=cooperlake" yn ddiofyn yn fectorized The cod wedi rhoi'r gorau i ddefnyddio cofrestrau zmm 512-did, ac eithrio eu dynodiad uniongyrchol yn y cod ffynhonnell. Y rheswm yw bod amledd y CPU yn lleihau wrth berfformio gweithrediadau 512-did, a all effeithio'n negyddol ar berfformiad cyffredinol. I newid yr ymddygiad newydd, darperir yr opsiwn "-mprefer-vector-width=512".
Mae ymddygiad y faner "-flax-fector-conversions" yn debyg i GCC: gwaherddir trawsnewidiadau did fector ymhlyg rhwng cyfanrif a fectorau pwynt arnawf. Er mwyn dileu'r cyfyngiad hwn, cynigir defnyddio'r faner
"-flax-vector-conversions=all" sef y rhagosodiad.
Gwell cefnogaeth i CPUs MIPS y teulu Octeon. Ychwanegwyd "octeon+" at y rhestr o fathau CPU dilys.
Wrth gydosod i god canolradd WebAssembly, gelwir yr optimizer wasm-opt yn awtomatig, os yw ar gael yn y system.
Ar gyfer systemau sy'n seiliedig ar bensaernïaeth RISC-V, caniateir defnyddio cofrestrau sy'n storio gwerthoedd pwynt arnawf mewn blociau amodol o fewnosodiadau cydosodwr.
Ychwanegwyd baneri casglwr newydd: "-fgnuc-version" i osod gwerth y fersiwn ar gyfer "__GNUC__" a macros tebyg; "-fmacro-prefix-map=OLD=NEW" i ddisodli'r rhagddodiad cyfeiriadur OLD gyda NEWYDD mewn macros megis "__FILE__"; "-fpatchable-function-entry=N[,M]" i gynhyrchu nifer penodol o gyfarwyddiadau NOP cyn ac ar ôl pwynt mynediad y ffwythiant. Ar gyfer RISC-V
cefnogaeth ychwanegol ar gyfer y baneri "-ffixed-xX", "-mcmodel=medany" a "-mcmodel=medlow".
Ychwanegwyd cefnogaeth i'r briodwedd '__attribute__((target("branch-protection=..."))), y mae ei effaith yn debyg i'r opsiwn -cangen-amddiffyn.
Ar blatfform Windows, wrth nodi'r faner “-cfguard”, gweithredir amnewid gwiriadau cywirdeb llif gweithredu (Control Flow Guard) ar gyfer galwadau swyddogaeth anuniongyrchol. I analluogi amnewid siec, gallwch ddefnyddio'r faner “-cfguard-nochecks” neu'r addasydd “__declspec(guard(nocf))”.
Mae ymddygiad y priodoledd gnu_inline yn debyg i GCC mewn achosion lle caiff ei ddefnyddio heb yr allweddair "allanol".
Mae'r galluoedd sy'n gysylltiedig â chymorth OpenCL a CUDA wedi'u hehangu. Cefnogaeth ychwanegol ar gyfer nodweddion OpenMP 5.0 newydd.
Mae opsiwn safonol wedi'i ychwanegu at y cyfleustodau fformat clang, sy'n eich galluogi i bennu'r fersiwn o'r safon C++ a ddefnyddir wrth ddosrannu a fformatio cod (Diweddaraf, Auto, c++03, c++11, c++14, c++17, c++20).
Mae gwiriadau newydd wedi'u hychwanegu at y dadansoddwr statig: alpha.cplusplus.PlacementNew i benderfynu a oes digon o le storio, fuchsia.HandleChecker i ganfod gollyngiadau sy'n ymwneud â thrinwyr Fuchsia, security.insecureAPI.decodeValueOfObjCType i ganfod gorlifoedd clustogi posibl wrth ddefnyddio [NSCoder decodebCtalypepe :yn:].
Mae'r Glanweithydd Ymddygiad Anniffiniedig (UBSan) wedi ehangu ei wiriadau gorlif pwyntydd i ddal y defnydd o wrthbwyso di-sero i awgrymiadau NULL neu ychwanegu gwrthbwyso pwyntydd NULL o ganlyniad.
Yn linter clang-taclus wedi adio cyfran fawr o sieciau newydd.
I'r fframwaith Priodolwr Mae optimeiddiadau a dadansoddwyr rhyng-weithdrefnol newydd wedi'u hychwanegu. Rhagfynegir cyflwr 19 o wahanol nodweddion, gan gynnwys 12 nodwedd 12 LLVM IR a 7 priodoledd haniaethol megis bywiogrwydd.
Ychwanegwyd ffwythiannau mathemategol matrics newydd yn y casglwr (Cynhenid), sy'n cael eu disodli gan gyfarwyddiadau fector effeithlon wrth eu llunio.
Mae nifer o welliannau wedi'u gwneud i gefnlenni ar gyfer pensaernïaeth X86, AArch64, ARM, SystemZ, MIPS, AMDGPU a PowerPC. Ychwanegwyd cefnogaeth CPU
Cortex-A65, Cortex-A65AE, Neoverse E1 a Neoverse N1. Ar gyfer ARMv8.1-M, mae'r broses cynhyrchu cod wedi'i optimeiddio (er enghraifft, mae cefnogaeth ar gyfer dolenni heb fawr o uwchben wedi ymddangos) ac mae cefnogaeth ar gyfer autovectorization wedi'i ychwanegu gan ddefnyddio'r estyniad MVE. Gwell cefnogaeth CPU MIPS Octeon. Ar gyfer PowerPC, mae fectoreiddio is-reolweithiau mathemategol gan ddefnyddio'r llyfrgell MASSV (Is-System Cyflymu Mathemategol) wedi'i alluogi, mae cynhyrchu cod yn cael ei wella, ac mae mynediad cof o ddolenni wedi'i optimeiddio. Ar gyfer x86, mae'r modd yr ymdrinnir â mathau fector v2i32, v4i16, v2i16, v8i8, v4i8 a v2i8 wedi'i newid.
Gwell generadur cod ar gyfer WebCynulliad. Ychwanegwyd cefnogaeth ar gyfer cyfarwyddiadau TLS (Storio Thread-Local) a atomic.fence. Mae cefnogaeth SIMD wedi'i ehangu'n sylweddol. Bellach mae gan ffeiliau gwrthrych WebCynulliad y gallu i ddefnyddio llofnodion swyddogaeth aml-werth.
Defnyddir y dadansoddwr wrth brosesu dolenni Cof SSA, sy'n eich galluogi i ddiffinio dibyniaethau rhwng gwahanol weithrediadau cof. Gall MemorySSA leihau amser llunio a gweithredu neu gellir ei ddefnyddio yn lle AliasSetTracker heb golli perfformiad.
Mae dadfygiwr LLDB wedi gwella cefnogaeth yn sylweddol ar gyfer fformat DWARF v5. Gwell cefnogaeth ar gyfer adeiladu gyda MinGW
a gallu cychwynnol ychwanegol i ddadfygio nwyddau gweithredadwy Windows ar gyfer pensaernïaeth ARM ac ARM64. Ychwanegwyd disgrifiadau o'r opsiynau a gynigir wrth awtolenwi mewnbwn trwy wasgu tab.
Ehangwyd Galluoedd cysylltydd LLD. Gwell cefnogaeth i'r fformat ELF, gan gynnwys sicrhau cydnawsedd llawn o dempledi glob gyda'r cysylltydd GNU, ychwanegu cefnogaeth ar gyfer adrannau dadfygio cywasgedig ".zdebug", gan ychwanegu'r eiddo PT_GNU_PROPERTY i ddiffinio'r adran .note.gnu.property (gellir ei ddefnyddio yn y dyfodol cnewyllyn Linux),
Mae'r moddau “-z noseparate-code”, “-z separate-code” a “-z separate-loadable-segments” wedi'u rhoi ar waith. Gwell cefnogaeth i MinGW a WebCynulliad.