Ina ua uma le ono masina o le atinae fa'amatu'u galuega - Meafaigaluega e fetaui ma le GCC (fa'apipi'i, fa'asili ma fa'atupu fa'ailoga), tu'ufa'atasia polokalame i totonu o le bitcode vaeluaga ole RISC-pei o fa'atonuga fa'apitoa (masini fa'atauva'a maualalo fa'atasi ai ma le tele-level optimization system). O le pseudocode gaosia e mafai ona liua e faʻaaoga ai le JIT compiler i faʻatonuga masini i le taimi o le faʻatinoga o polokalame.
O foliga fou i le LLVM 10.0 e aofia ai le lagolago mo C ++ Concepts, e le o toe taʻavale Clang o se faʻagasologa ese, lagolago mo le CFG (pulea le tafe) siaki mo Windows, ma le lagolago mo gafatia fou o le PPU.
i le Clang 10.0:
- Faaopoopo le lagolago mo "", o le C++ template extension lea o le a aofia i le isi tulaga, codenamed C++2a (faʻaalia e le -std=c++2a fuʻa).
O manatu fa'ataga e fa'ataga ai oe e fa'amatala se seti o fa'ata'ita'iga fa'ata'ita'iga mana'omia e, i le taimi fa'aopoopo, fa'atapula'a le seti o finauga e mafai ona talia e fai ma fa'ata'ita'iga fa'ata'ita'iga. E mafai ona fa'aoga manatu e 'alofia ai fe'ese'esea'iga talafeagai i le va o meatotino o fa'amaumauga o lo'o fa'aogaina i totonu o le fa'ata'ita'iga ma fa'amaumauga o fa'amaumauga o fa'amaufa'ailoga.mamanu
manatu TutusaFaatusatusa = mana'omia(T a, T b) {
{a == b } -> std::boolean;
{ a != b } -> std::boolean;
}; - Ona o le le mafai, o le faʻalauiloaina o se faʻagasologa ese ("clang -cc1") lea e faia ai le tuʻufaʻatasia ua taofia. O le tuʻufaʻatasiga ua faia nei i le faʻagasologa autu, ma o le "-fno-integrated-cc1" filifiliga e mafai ona faʻaaogaina e toe faʻafoʻi ai le amio tuai.
- Faiga fou o su'esu'ega:
- "-Wc99-designator" ma le "-Wreorder-init-list" lapatai mai le faʻaaogaina o le C99 initializers ile C++ mode i mataupu e saʻo ile C99 ae le o le C ++ 20.
- "-Wsizeof-array-div" - maua tulaga e pei o le "int arr[10]; …le tele(arr) / lapopoa(puupuu)…” (e tatau ona “tele(arr) / lapopoa(int)”).
- "-Wxor-used-as-po" - lapatai mai i le faʻaaogaina o mea faufale e pei o le faʻaogaina o le "^" (xor) faʻagaioiga i gaioiga e mafai ona fenumiai ma faʻasalalauga (2 ^ 16).
- "-Wfinal-dtor-non-final-class" - lapataʻi e uiga i vasega e le o faʻailogaina i le "faʻaiʻuga" specifier, ae o loʻo i ai se faʻaleagaina ma le uiga "mulimuli".
- "-Wtautological-bitwise-faʻatusatusa" o se vaega o lapataiga mo le suʻesuʻeina o faʻatusatusaga tautological i le va o le faʻaogaina o le bitwise ma le faʻaauau, ma mo le faʻailoaina o faʻatusatusaga moni i taimi uma lea e faʻaoga ai le bitwise OR i se numera e le lelei.
- "-Wbitwise-conditional-parentheses" lapata'i i fa'afitauli pe a fa'afefiloi le fa'agaioiga talafeagai MA (&) ma OR (|) fa'atasi ai ma le fa'aogaina o tuutuuga (?:).
- "-Wmisleading-indentation" o se faʻataʻitaʻiga o le siaki o le igoa tutusa mai le GCC, lea e lapatai mai e uiga i faʻamatalaga faʻapipiʻi e pei o se vaega o le pe afai / isi / mo / ao poloka, ae o le mea moni latou te le o aofia ai i lenei poloka. .
- Pe a faʻamaonia le "-Wextra", o le siaki "-Wdeprecated-copy" e mafai, lapatai e uiga i le faʻaogaina o tagata faufale
"move" ma le "kopi" i vasega ma se faʻamatalaga manino faʻaleagaina. - O le "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-analyse" siaki ua faʻalauteleina.
- O siaki "-Wbitwise-op-parentheses" ma le "-Wlogical-op-parentheses" e le mafai ona fa'aletonu.
- I le C ma le C ++ code, fa'atonuga fa'atusa e na'o le fa'atagaina i fa'asologa. O le Undefined Behavior Sanitizer i le "-fsanitize=pointer-overflow" mode ua maua nei mataupu e pei o le faʻaopoopoina o le non-zero offset i le null pointer poʻo le fatuina o le null pointer pe a toesea le numera mai le non-null pointer.
- O le "-fsanitize=implicit-conversion" (Implicit Conversion Sanitizer) e fa'afetaui e iloa ai fa'afitauli i fa'aopoopoga ma fa'aitiitia fa'agaioiga mo ituaiga e la'ititi la'ititi nai lo le ituaiga "int".
- Pe a filifilia le x86 faʻatulagaina fausaga "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" ma le "-march=cooperlake" ona o le faaletonu i le vectorized code ua taofia le faaaogaina o 512-bit zmm resitala, sei vagana ai lo latou faasinomaga tuusao i le source code. O le mafuaʻaga o le faʻaitiitia o le CPU pe a faʻatino galuega 512-bit, lea e mafai ona afaina ai le faʻatinoga atoa. Ina ia suia le amio fou, ua saunia le filifiliga "-mprefer-vector-width=512".
- O le amio a le fu'a "-flax-vector-conversions" e tutusa ma le GCC: e fa'asaina le fa'aliliuina o sina mea fa'ata'ita'i i le va o vete fa'ato'a ma fa'a'a'e. Ina ia faʻaumatia lenei tapulaʻa, ua fautuaina e faʻaaoga le fuʻa
"-flax-vector-conversions=all" o le faaletonu lea. - Faʻaleleia atili le lagolago mo MIPS CPU o le aiga Octeon. Fa'aopoopoina le "octeon+" i le lisi o ituaiga PPU aoga.
- Pe a faʻapipiʻi i totonu o le WebAssembly intermediate code, o le wasm-opt optimizer e otometi lava ona valaʻau, pe a maua i le polokalama.
- Mo faiga faʻavae i luga o le RISC-V architecture, o le faʻaogaina o tusi resitala o loʻo teuina ai tau faʻafefeteina e faʻatagaina i poloka faʻapitoa o faʻapipiʻi faʻapipiʻi faʻapipiʻi.
- Fa'aopoopo fu'a tu'ufa'atasi fou: "-fgnuc-version" e fa'atulaga ai le tau fa'asologa mo le "__GNUC__" ma macros tutusa; "-fmacro-prefix-map=OLD=NEW" e sui ai le fa'asologa o le lisi OLD i le FOU i macros pei o le "__FILE__"; "-fpatchable-function-entry=N[,M]" e fau ai se numera patino o faatonuga a le NOP i luma ma pe a uma le mea e ulufale ai galuega. Mo RISC-V
fa'aopoopo le lagolago mo fu'a "-ffixed-xX", "-mcmodel=medany" ma le "-mcmodel=medlow". - Faʻaopoopoina le lagolago mo le '__attribute__((target("branch-protection=..."))) attribute, o lona aafiaga e tutusa ma le filifiliga .
- I luga o le Windows platform, pe a faʻamaonia le "-cfguard" fuʻa, o le suia o le faʻatinoina o siaki faʻamaoni (Control Flow Guard) mo le faʻaogaina o le galuega e faʻatinoina. Ina ia faʻamalo le suʻega siaki, e mafai ona e faʻaogaina le fuʻa "-cfguard-nochecks" poʻo le "__declspec(guard(nocf))" modifier.
- O le amio a le gnu_inline attribute e tutusa ma le GCC i mataupu e faʻaaogaina e aunoa ma le upu "fafo".
- O gafatia e fesoʻotaʻi ma OpenCL ma le CUDA lagolago ua faʻalauteleina. Faʻaopoopo le lagolago mo foliga fou OpenMP 5.0.
- Ua faʻaopoopoina se filifiliga Faʻatonu i le faʻaogaina o le clang-format, lea e mafai ai e oe ona fuafua le faʻasologa o le C ++ faʻaaogaina pe a faʻaogaina ma faʻapipiʻi code (Latest, Auto, c ++ 03, c ++ 11, c ++ 14, c++17, c++20).
- Ua faaopoopo siaki fou i le static analyzer: alpha.cplusplus.PlacementNew e iloa ai pe lava le avanoa e teu ai, fuchsia.HandleChecker e iloa ai le tafe e fesoʻotaʻi ma Fuchsia handlers, security.insecureAPI.decodeValueOfObjCType e iloa ai le mafai ona sosolo le pa puipui pe a faʻaaoga [NSCoder decodeValueOfOf :i:] .
- O le Undefined Behavior Sanitizer (UBSan) ua faʻalauteleina ana siaki mataʻutia o loʻo faʻaogaina e puʻe ai le faʻaogaina o le leai o se zero offsets i NULL pointers poʻo le faʻaopoopoina o le NULL pointer offset.
- I le linter clang-tidy se vaega tele o siaki fou.
tele LLVM 10.0:
- I le auivi Ua fa'aopoopoina ni su'esu'ega fou ma su'esu'ega interprocedural. O le tulaga o uiga eseese e 19 ua valoia, e aofia ai le 12 uiga 12 LLVM IR ma le 7 uiga manino e pei o le ola.
- Fa'aopoopo galuega fa'a-matematika fou ua fausia i totonu o le tu'ufa'atasi (), lea e suitulaga i faʻatonuga faʻaoga lelei i le taimi o le tuʻufaʻatasia.
- E tele faʻaleleia ua faia i tua mo X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ma PowerPC fausaga. Fa'aopoopoina le lagolago CPU
Cortex-A65, Cortex-A65AE, Neoverse E1 ma Neoverse N1. Mo le ARMv8.1-M, ua fa'amalieina le fa'agasologa o le fa'asologa o tulafono (mo se fa'ata'ita'iga, ua aliali mai le lagolago mo fa'amaufa'ailoga e la'ititi i luga) ma ua fa'aopoopoina le lagolago mo le fa'aogaina o le ta'avale e fa'aaoga ai le fa'aopoopoga MVE. Faʻaleleia le CPU MIPS Octeon lagolago. Mo le PowerPC, e mafai ona fa'aogaina le fa'aogaina o mea fa'a-matematika e fa'aaoga ai le faletusi MASSV (Mathematical Acceleration SubSystem), fa'aleleia le fa'atupuina o tulafono, ma fa'amanino le manatua mai fa'agasolo. Mo x86, ua suia le fa'aogaina o ituaiga ve'a v2i32, v4i16, v2i16, v8i8, v4i8 ma v2i8. - Faʻaleleia code generator mo WebAssembly. Fa'aopoopo le lagolago mo le TLS (Thread-Local Storage) ma fa'atonuga atomic.fence. SIMD lagolago ua matua faʻalauteleina. O faila faila a le WebAssembly ua i ai nei le malosi e faʻaaoga ai saini galuega e tele-taua.
- O le su'esu'e e fa'aaogaina pe a fa'agasolo fa'amau , lea e mafai ai ona e faʻamalamalamaina faʻalagolago i le va o gaioiga eseese o mafaufauga. MemorySSA e mafai ona faʻaitiitia le tuʻufaʻatasia ma le taimi faʻatino pe mafai ona faʻaoga nai lo AliasSetTracker e aunoa ma le leiloa o le faʻatinoga.
- O le LLDB debugger ua matua faʻaleleia atili le lagolago mo le DWARF v5 format. Faʻaleleia atili le lagolago mo le fausiaina ma le MinGW
ma fa'aopoopoina le tomai muamua e fa'apipi'i ai mea fa'atino a le Windows mo ARM ma ARM64 tusiata. Fa'aopoopo fa'amatalaga o filifiliga o lo'o ofoina pe a fa'amae'a fa'aoga mea e ala i le oomiina o le tab. - LLD feso'ota'iga agava'a. Faʻaleleia atili le lagolago mo le faʻatulagaga ELF, e aofia ai le faʻamautinoaina o le fetaui atoatoa o faʻataʻitaʻiga glob ma le GNU linker, faʻaopoopoina le lagolago mo vaega faʻapipiʻi faʻapipiʻi ".zdebug", faʻaopoopo le PT_GNU_PROPERTY meatotino e faʻamatala ai le vaega .note.gnu.property (e mafai ona faʻaaoga i le lumanaʻi. Linux kernels),
O le "-z noseparate-code", "-z separate-code" ma le "-z separate-loadable-segments" ua faʻatinoina. Faʻaleleia le lagolago mo MinGW ma WebAssembly.
puna: opennet.ru
