ืฉื—ืจื•ืจ ืžืขืจืš ื”ืžื”ื“ืจ LLVM 10.0

ืœืื—ืจ ืฉื™ืฉื” ื—ื•ื“ืฉื™ื ืฉืœ ืคื™ืชื•ื— ื”ืฆื™ื’ ืฉื—ืจื•ืจ ื”ืคืจื•ื™ืงื˜ LLVM 10.0 - ื›ืœื™ื ืชื•ืืžื™ GCC (ืžื”ื“ืจื™ื, ืžื™ื™ืขืœื™ื ื•ืžื—ื•ืœืœื™ ืงื•ื“), ืงื•ืžืคื™ืœืฆื™ื” ืฉืœ ืชื•ื›ื ื™ื•ืช ืœืงื•ื“ ื‘ื™ื ื™ื™ื ืฉืœ ื”ื•ืจืื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื“ืžื•ื™ื•ืช RISC (ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื‘ืจืžื” ื ืžื•ื›ื” ืขื ืžืขืจื›ืช ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืžืจื•ื‘ืช ืจืžื•ืช). ื ื™ืชืŸ ืœื”ืžื™ืจ ืืช ื”ืคืกืื•ื“ื•ืงื•ื“ ืฉื ื•ืฆืจ ื‘ืืžืฆืขื•ืช ืžื”ื“ืจ JIT ืœื”ื•ืจืื•ืช ืžื›ื•ื ื” ื™ืฉื™ืจื•ืช ื‘ื–ืžืŸ ื‘ื™ืฆื•ืข ื”ืชื•ื›ื ื™ืช.

ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช ื‘-LLVM 10.0 ื›ื•ืœืœื•ืช ืชืžื™ื›ื” ื‘-C++ Concepts, ืœื ืžืจื™ืฅ ืขื•ื“ ืืช Clang ื›ืชื”ืœื™ืš ื ืคืจื“, ืชืžื™ื›ื” ื‘ื‘ื“ื™ืงื•ืช CFG (ืžืฉืžืจ ื–ืจื™ืžื” ื‘ืงืจื”) ืขื‘ื•ืจ Windows ื•ืชืžื™ื›ื” ื‘ื™ื›ื•ืœื•ืช CPU ื—ื“ืฉื•ืช.

ืฉื™ืคื•ืจื™ื ื‘-Clang 10.0:

  • ื ื•ืกืคื” ืชืžื™ื›ื” ืขื‘ื•ืจ "ืžื•ืฉื’ื™ื", ืกื™ื•ืžืช ืชื‘ื ื™ืช C++ ืฉืชื™ื›ืœืœ ื‘ืชืงืŸ ื”ื‘ื, ื‘ืฉื ื”ืงื•ื“ C++2a (ืžื•ืคืขืœ ืขืœ ื™ื“ื™ ื”ื“ื’ืœ -std=c++2a).
    ืžื•ืฉื’ื™ื ืžืืคืฉืจื™ื ืœืš ืœื”ื’ื“ื™ืจ ืงื‘ื•ืฆื” ืฉืœ ื“ืจื™ืฉื•ืช ืคืจืžื˜ืจื™ื ืฉืœ ืชื‘ื ื™ืช, ืฉื‘ื–ืžืŸ ื”ืงื•ืžืคื™ืœืฆื™ื”, ืžื’ื‘ื™ืœื•ืช ืืช ืงื‘ื•ืฆืช ื”ืืจื’ื•ืžื ื˜ื™ื ืฉื ื™ืชืŸ ืœืงื‘ืœ ื›ืคืจืžื˜ืจื™ื ืฉืœ ืชื‘ื ื™ืช. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืžื•ืฉื’ื™ื ื›ื“ื™ ืœืžื ื•ืข ื—ื•ืกืจ ืขืงื‘ื™ื•ืช ืœื•ื’ื™ืช ื‘ื™ืŸ ื”ืžืืคื™ื™ื ื™ื ืฉืœ ืกื•ื’ื™ ื”ื ืชื•ื ื™ื ื”ืžืฉืžืฉื™ื ื‘ืชื•ืš ื”ืชื‘ื ื™ืช ืœื‘ื™ืŸ ืžืืคื™ื™ื ื™ ืกื•ื’ ื”ื ืชื•ื ื™ื ืฉืœ ืคืจืžื˜ืจื™ ื”ืงืœื˜.

    ืชื‘ื ื™ืช
    ืžื•ืฉื’ EqualityComparable = requires(T a, T b) {
    { a == b } -> std::boolean;
    { 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]; ...sizeof(arr) / sizeof(short)..." (ืฆืจื™ืš ืœื”ื™ื•ืช "sizeof(arr) / sizeof(int)").
    • "-Wxor-used-as-po" - ืžื–ื”ื™ืจ ืžืคื ื™ ืฉื™ืžื•ืฉ ื‘ืžื‘ื ื™ื ื›ื’ื•ืŸ ืฉื™ืžื•ืฉ ื‘ืื•ืคืจื˜ื•ืจ "^" (xor) ื‘ืคืขื•ืœื•ืช ืฉื ื™ืชืŸ ืœื‘ืœื‘ืœ ืขื ืืงืกืคื•ื ื ืฆื™ื” (2^16).
    • "-Wfinal-dtor-non-final-class" - ืžืชืจื™ืข ืขืœ ืžื—ืœืงื•ืช ืฉืื™ื ืŸ ืžืกื•ืžื ื•ืช ื‘ืžืคืจื˜ "ืกื•ืคื™", ืืš ื™ืฉ ืœื”ืŸ ืžืฉืžื™ื“ ืขื ื”ืชื›ื•ื ื” "ืกื•ืคื™".
    • "-Wtautological-bitwise-compare" ื”ื™ื ืงื‘ื•ืฆื” ืฉืœ ืื–ื”ืจื•ืช ืœืื‘ื—ื•ืŸ ื”ืฉื•ื•ืื•ืช ื˜ืื•ื˜ื•ืœื•ื’ื™ื•ืช ื‘ื™ืŸ ืคืขื•ืœื” ืกื™ื‘ื™ืช ืœืงื‘ื•ืข, ื•ืœื–ื™ื”ื•ื™ ื”ืฉื•ื•ืื•ืช ืืžืช ืชืžื™ื“ ืฉื‘ื”ืŸ ืคืขื•ืœืช OR ืกื™ื‘ื™ืช ืžื•ื—ืœืช ืขืœ ืžืกืคืจ ืœื ืฉืœื™ืœื™.
    • "-Wbitwise-conditional-parentheses" ืžื–ื”ื™ืจ ืžืคื ื™ ื‘ืขื™ื•ืช ื‘ืขืช ืขืจื‘ื•ื‘ ื”ืื•ืคืจื˜ื•ืจื™ื ื”ืœื•ื’ื™ื™ื AND (&) ื•-OR (|) ืขื ื”ืื•ืคืจื˜ื•ืจ ื”ืžื•ืชื ื” (?:).
    • "-Wmisleading-indentation" ื”ื•ื ืื ืœื•ื’ื™ ืฉืœ ื”ืžื—ืื” ื‘ืื•ืชื• ืฉื ืž-GCC, ืฉืžืชืจื™ืข ืขืœ ื‘ื™ื˜ื•ื™ื™ื ืžื•ื–ื—ื™ื ื›ืื™ืœื• ื”ื ื—ืœืง ืžื‘ืœื•ืง if/else/for/while, ืืš ืœืžืขืฉื” ื”ื ืื™ื ื ื›ืœื•ืœื™ื ื‘ื‘ืœื•ืง ื–ื” .
    • ื‘ืขืช ืฆื™ื•ืŸ "-Wextra", ื”ืกื™ืžื•ืŸ "-Wdeprecated-copy" ืžื•ืคืขืœ, ืื–ื”ืจื” ืœื’ื‘ื™ ื”ืฉื™ืžื•ืฉ ื‘ื‘ื ืื™ื
      "ื”ื–ื–" ื•"ื”ืขืชืง" ื‘ืฉื™ืขื•ืจื™ื ืขื ื”ื’ื“ืจื” ืžืคื•ืจืฉืช ืฉืœ ืžืฉืžื™ื“.

    • ื”ื‘ื“ื™ืงื•ืช "-Wtautological-ื—ืคื™ืคื”-ื”ืฉื•ื•ืื”", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-analysis" ื”ื•ืจื—ื‘ื•.
    • ื”ืกื™ืžื•ืŸ "-Wbitwise-op-parentheses" ื•-"-Wlogical-op-parentheses" ืžื•ืฉื‘ืชื™ื ื›ื‘ืจื™ืจืช ืžื—ื“ืœ.
  • ื‘ืงื•ื“ C ื•-C++, ืคืขื•ืœื•ืช ืืจื™ืชืžื˜ื™ื•ืช ืžืฆื‘ื™ืข ืžื•ืชืจื•ืช ืจืง ื‘ืžืขืจื›ื™ื. ื”-Undefined Behavior Sanitizer ื‘ืžืฆื‘ "-fsanitize=pointer-overflow" ืชื•ืคืก ื›ืขืช ืžืงืจื™ื ื›ื’ื•ืŸ ื”ื•ืกืคืช ื”ื™ืกื˜ ืฉืื™ื ื• ืืคืก ืœืžืฆื‘ื™ืข ืืคืก ืื• ื™ืฆื™ืจืช ืžืฆื‘ื™ืข null ื‘ืขืช ื”ืคื—ืชืช ืžืกืคืจ ืฉืœื ืžืžืฆื‘ื™ืข ืฉืื™ื ื• ืืคืก.
  • ืžืฆื‘ "-fsanitize=implicit-conversion" (ืื™ืžืคืœื™ื˜ ื”ืžืจื•ืช ืžื ืงื”) ืžื•ืชืื ืœื–ื”ื•ืช ื‘ืขื™ื•ืช ืขื ืคืขื•ืœื•ืช ื”ื’ื“ืœื” ื•ื”ืงื˜ื ื” ืขื‘ื•ืจ ื˜ื™ืคื•ืกื™ื ืขื ื’ื•ื“ืœ ืกื™ื‘ื™ื•ืช ืงื˜ืŸ ืžื–ื” ืฉืœ ืกื•ื’ "int".
  • ื‘ืขืช ื‘ื—ื™ืจืช ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช ื™ืขื“ ืฉืœ x86 "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" ื•-"-march=cooperlake" ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื‘-Vectorized The ื”ืงื•ื“ ื”ืคืกื™ืง ืœื”ืฉืชืžืฉ ื‘ืื•ื’ืจื™ zmm ืฉืœ 512 ืกื™ื‘ื™ื•ืช, ืœืžืขื˜ ืฆื™ื•ืŸ ื™ืฉื™ืจ ืฉืœื”ื ื‘ืงื•ื“ ื”ืžืงื•ืจ. ื”ืกื™ื‘ื” ื”ื™ื ืฉืชื“ืจ ื”ืžืขื‘ื“ ื™ื•ืจื“ ื‘ืขืช ื‘ื™ืฆื•ืข ืคืขื•ืœื•ืช ืฉืœ 512 ืกื™ื‘ื™ื•ืช, ืžื” ืฉืขืœื•ืœ ืœื”ืฉืคื™ืข ืœืจืขื” ืขืœ ื”ื‘ื™ืฆื•ืขื™ื ื”ื›ื•ืœืœื™ื. ื›ื“ื™ ืœืฉื ื•ืช ืืช ื”ื”ืชื ื”ื’ื•ืช ื”ื—ื“ืฉื”, ื ื™ืชื ืช ื”ืืคืฉืจื•ืช "-mrefer-vector-width=512".
  • ื”ื”ืชื ื”ื’ื•ืช ืฉืœ ื”ื“ื’ืœ "-flax-vector-conversions" ื“ื•ืžื” ืœ-GCC: ื”ืžืจื•ืช ืกื™ื‘ื™ื•ืช ื•ืงื˜ื•ืจ ืžืจื•ืžื–ื•ืช ื‘ื™ืŸ ื•ืงื˜ื•ืจื™ื ืฉืœืžื™ื ืœื ืงื•ื“ื” ืฆืคื” ืืกื•ืจื•ืช. ื›ื“ื™ ืœื‘ื˜ืœ ืžื’ื‘ืœื” ื–ื•, ืžื•ืฆืข ืœื”ืฉืชืžืฉ ื‘ื“ื’ืœ
    "-flax-vector-conversions=all" ืฉื”ื™ื ื‘ืจื™ืจืช ื”ืžื—ื“ืœ.

  • ืชืžื™ื›ื” ืžืฉื•ืคืจืช ื‘ืžืขื‘ื“ื™ MIPS ืžืžืฉืคื—ืช Octeon. ื ื•ืกืฃ "octeon+" ืœืจืฉื™ืžืช ืกื•ื’ื™ ื”ืžืขื‘ื“ ื”ื—ื•ืงื™ื™ื.
  • ื‘ืขืช ื”ืจื›ื‘ื” ืœืงื•ื“ ื‘ื™ื ื™ื™ื ืฉืœ WebAssembly, ืžื™ื™ืขืœ wasm-opt ื ืงืจื ืื•ื˜ื•ืžื˜ื™ืช, ืื ื–ืžื™ืŸ ื‘ืžืขืจื›ืช.
  • ืขื‘ื•ืจ ืžืขืจื›ื•ืช ื”ืžื‘ื•ืกืกื•ืช ืขืœ ืืจื›ื™ื˜ืงื˜ื•ืจืช RISC-V, ื”ืฉื™ืžื•ืฉ ื‘ืจื’ื™ืกื˜ืจื™ื ื”ืžืื—ืกื ื™ื ืขืจื›ื™ ื ืงื•ื“ื” ืฆืคื” ืžื•ืชืจ ื‘ืœื•ืงื™ื ืžื•ืชื ื™ื ืฉืœ ืชื•ืกืคื•ืช ืืกืžื‘ืœืจ ืžื•ื˜ื‘ืขื•ืช.
  • ื ื•ืกืคื• ื“ื’ืœื™ ืžื”ื“ืจ ื—ื“ืฉื™ื: "-fgnuc-version" ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช ืขืจืš ื”ื’ืจืกื” ืขื‘ื•ืจ "__GNUC__" ื•ืคืงื•ื“ื•ืช ืžืืงืจื• ื“ื•ืžื•ืช; "-fmacro-prefix-map=OLD=NEW" ื›ื“ื™ ืœื”ื—ืœื™ืฃ ืืช ืงื™ื“ื•ืžืช ื”ืกืคืจื™ื™ื” OLD ื‘-NEW ื‘ืคืงื•ื“ื•ืช ืžืืงืจื• ื›ื’ื•ืŸ "__FILE__"; "-fpatchable-function-entry=N[,M]" ืœื™ืฆื™ืจืช ืžืกืคืจ ืžืกื•ื™ื ืฉืœ ื”ื•ืจืื•ืช NOP ืœืคื ื™ ื•ืื—ืจื™ ื ืงื•ื“ืช ื”ื›ื ื™ืกื” ืœืคื•ื ืงืฆื™ื”. ืขื‘ื•ืจ RISC-V
    ื”ื•ืกื™ืคื” ืชืžื™ื›ื” ื‘ื“ื’ืœื™ื "-ffixed-xX", "-mcmodel=medany" ื•-"-mcmodel=medlow".

  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืชื›ื•ื ื” '__attribute__((target("branch-protection=..."))), ืฉื”ืฉืคืขืชื” ื“ื•ืžื” ืœืืคืฉืจื•ืช -ืขื ืฃ-ื”ื’ื ื”.
  • ื‘ืคืœื˜ืคื•ืจืžืช Windows, ื‘ืขืช ืฆื™ื•ืŸ ื”ื“ื’ืœ "-cfguard", ืžื™ื•ืฉืžืช ื”ื—ืœืคื” ืฉืœ ื‘ื“ื™ืงื•ืช ืชืงื™ื ื•ืช ื–ืจื™ืžืช ื”ื‘ื™ืฆื•ืข (Control Flow Guard) ืขื‘ื•ืจ ืงืจื™ืื•ืช ืคื•ื ืงืฆื™ื” ืขืงื™ืคื•ืช. ื›ื“ื™ ืœื‘ื˜ืœ ืืช ื”ื—ืœืคืช ื”ืžื—ืื•ืช, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื“ื’ืœ "-cfguard-nochecks" ืื• ื‘ืžืฉื ื” "__declspec(guard(nocf))".
  • ื”ื”ืชื ื”ื’ื•ืช ืฉืœ ื”ืชื›ื•ื ื” gnu_inline ื“ื•ืžื” ืœ-GCC ื‘ืžืงืจื™ื ืฉื‘ื”ื ื ืขืฉื” ื‘ื” ืฉื™ืžื•ืฉ ืœืœื ืžื™ืœืช ื”ืžืคืชื— "ื—ื™ืฆื•ื ื™ืช".
  • ื”ื™ื›ื•ืœื•ืช ื”ืงืฉื•ืจื•ืช ืœืชืžื™ื›ื” ื‘-OpenCL ื•ื‘-CUDA ื”ื•ืจื—ื‘ื•. ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช ืฉืœ OpenMP 5.0.
  • ื ื•ืกืคื” ืืคืฉืจื•ืช Standard ืœืชื•ื›ื ื™ืช ื”ืฉื™ืจื•ืช clang-format, ื”ืžืืคืฉืจืช ืœืงื‘ื•ืข ืืช ื”ื’ืจืกื” ืฉืœ ืชืงืŸ C++ ื”ืžืฉืžืฉ ื‘ืขืช ื ื™ืชื•ื— ื•ืขื™ืฆื•ื‘ ืงื•ื“ (Latest, Auto, c++03, c++11, c++14, c++17, c++20 ).
  • ื‘ื“ื™ืงื•ืช ื—ื“ืฉื•ืช ื ื•ืกืคื• ืœื ืชื— ื”ืกื˜ื˜ื™: alpha.cplusplus.PlacementNew ื›ื“ื™ ืœืงื‘ื•ืข ืื ื™ืฉ ืžืกืคื™ืง ืฉื˜ื— ืื—ืกื•ืŸ, fuchsia.HandleChecker ืœืื™ืชื•ืจ ื“ืœื™ืคื•ืช ื”ืงืฉื•ืจื•ืช ืœืžื˜ืคืœื™ ืคื•ืงืกื™ื”, security.insecureAPI.decodeValueOfObjCType ื›ื“ื™ ืœื–ื”ื•ืช ื”ืฆืคืช ืžืื’ืจ ืคื•ื˜ื ืฆื™ืืœื™ืช ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-[NSCoder decodeValueOfObjCTypeOf :at:] .
  • ื”-Undefined Behavior Sanitizer (UBSan) ื”ืจื—ื™ื‘ ืืช ื‘ื“ื™ืงื•ืช ื”ืฆืคืช ื”ืžืฆื‘ื™ืขื™ื ืฉืœื• ื›ื“ื™ ืœืชืคื•ืก ืืช ื”ื™ื™ืฉื•ื ืฉืœ ืงื™ื–ื•ื–ื™ื ืฉืื™ื ื ืืคืก ืขืœ ืžืฆื‘ื™ืขื™ NULL ืื• ื”ืชื•ืกืคืช ื›ืชื•ืฆืื” ืžื›ืš ืฉืœ ื”ื™ืกื˜ ืžืฆื‘ื™ืข NULL.
  • ื‘ืœื™ื˜ืจ ืฆืœืฆืœ ืžืกื•ื“ืจ ื”ื•ืกื™ืฃ ื—ืœืง ื’ื“ื•ืœ ืฉืœ ืฆ'ืงื™ื ื—ื“ืฉื™ื.

ื”ืขื™ืงืจื™ ื—ื™ื“ื•ืฉื™ื LLVM 10.0:

  • ืœืžืกื’ืจืช ืžื™ื™ื—ืก ื ื•ืกืคื• ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ื•ืžื ืชื—ื™ื ื‘ื™ืŸ-ื”ืœื™ื›ื™ื ื—ื“ืฉื™ื. ืžืฆื‘ื ืฉืœ 19 ืชื›ื•ื ื•ืช ืฉื•ื ื•ืช ืฆืคื•ื™, ื›ื•ืœืœ 12 ืชื›ื•ื ื•ืช 12 LLVM IR ื•-7 ืชื›ื•ื ื•ืช ืžื•ืคืฉื˜ื•ืช ื›ื’ื•ืŸ ื—ื™ื•ื ื™ื•ืช.
  • ื ื•ืกืคื• ืคื•ื ืงืฆื™ื•ืช ืžืชืžื˜ื™ื•ืช ืžื˜ืจื™ืฆื•ืช ื—ื“ืฉื•ืช ื”ืžื•ื‘ื ื•ืช ื‘ืžื”ื“ืจ (ืคื ื™ืžื™ื•ืช), ื”ืžื•ื—ืœืคื•ืช ื‘ื”ื•ืจืื•ืช ื•ืงื˜ื•ืจื™ื•ืช ื™ืขื™ืœื•ืช ื‘ืžื”ืœืš ื”ื”ื™ื“ื•ืจ.
  • ืฉื™ืคื•ืจื™ื ืจื‘ื™ื ื‘ื•ืฆืขื• ื‘ืงืฆื” ื”ืื—ื•ืจื™ ืขื‘ื•ืจ ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ื•- PowerPC. ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืžืขื‘ื“
    Cortex-A65, Cortex-A65AE, Neoverse E1 ื•-Neoverse N1. ืขื‘ื•ืจ ARMv8.1-M, โ€‹โ€‹ืชื”ืœื™ืš ื™ืฆื™ืจืช ื”ืงื•ื“ ืขื‘ืจ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” (ืœื“ื•ื’ืžื”, ื”ื•ืคื™ืขื” ืชืžื™ื›ื” ื‘ืœื•ืœืื•ืช ืขื ืชืงื•ืจื” ืžื™ื ื™ืžืœื™ืช) ื•ื ื•ืกืคื” ืชืžื™ื›ื” ื‘-autovectorization ื‘ืืžืฆืขื•ืช ืกื™ื•ืžืช MVE. ืชืžื™ื›ืช CPU MIPS Octeon ืžืฉื•ืคืจืช. ืขื‘ื•ืจ PowerPC, ื•ืงื˜ื•ืจื™ื–ืฆื™ื” ืฉืœ ืชืชื™ ืฉื’ืจื•ืช ืžืชืžื˜ื™ื•ืช ื‘ืืžืฆืขื•ืช ืกืคืจื™ื™ืช MASSV (Mathematical Acceleration SubSystem) ืžื•ืคืขืœืช, ื™ืฆื™ืจืช ื”ืงื•ื“ ืžืฉื•ืคืจืช, ื•ื”ื’ื™ืฉื” ืœื–ื™ื›ืจื•ืŸ ืžืœื•ืœืื•ืช ืขื•ื‘ืจืช ืื•ืคื˜ื™ืžื™ื–ืฆื™ื”. ืขื‘ื•ืจ x86, ื”ืฉืชื ื” ื”ื˜ื™ืคื•ืœ ื‘ืกื•ื’ื™ ื”ื•ื•ืงื˜ื•ืจ v2i32, v4i16, v2i16, v8i8, v4i8 ื•-v2i8.

  • ืžื—ื•ืœืœ ืงื•ื“ ืžืฉื•ืคืจ ืขื‘ื•ืจ WebAssembly. ื ื•ืกืคื” ืชืžื™ื›ื” ืขื‘ื•ืจ TLS (ืื—ืกื•ืŸ ืžืงื•ืžื™) ื•ื”ื•ืจืื•ืช atomic.fence. ืชืžื™ื›ืช SIMD ื”ื•ืจื—ื‘ื” ืžืฉืžืขื•ืชื™ืช. ืœืงื‘ืฆื™ ืื•ื‘ื™ื™ืงื˜ WebAssembly ื™ืฉ ื›ืขืช ืืช ื”ื™ื›ื•ืœืช ืœื”ืฉืชืžืฉ ื‘ื—ืชื™ืžื•ืช ืคื•ื ืงืฆื™ื•ืช ืžืจื•ื‘ื•ืช ืขืจื›ื™ื.
  • ื”ื ืชื— ืžืฉืžืฉ ื‘ืขืช ืขื™ื‘ื•ื“ ืœื•ืœืื•ืช MemorySSA, ื”ืžืืคืฉืจ ืœืš ืœื”ื’ื“ื™ืจ ืชืœื•ืช ื‘ื™ืŸ ืคืขื•ืœื•ืช ื–ื™ื›ืจื•ืŸ ืฉื•ื ื•ืช. MemorySSA ื™ื›ื•ืœ ืœื”ืคื—ื™ืช ืืช ื–ืžืŸ ื”ื”ื™ื“ื•ืจ ื•ื”ื‘ื™ืฆื•ืข ืื• ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื• ื‘ืžืงื•ื AliasSetTracker ืœืœื ืื•ื‘ื“ืŸ ื‘ื™ืฆื•ืขื™ื.
  • ืžืืชืจ ื”ื‘ืื’ื™ื LLDB ืฉื™ืคืจ ืžืฉืžืขื•ืชื™ืช ืืช ื”ืชืžื™ื›ื” ื‘ืคื•ืจืžื˜ DWARF v5. ืชืžื™ื›ื” ืžืฉื•ืคืจืช ื‘ื‘ื ื™ื™ื” ืขื MinGW
    ื•ื”ื•ืกืคื” ื™ื›ื•ืœืช ืจืืฉื•ื ื™ืช ืœื ื™ืคื•ื™ ื‘ืื’ื™ื ื‘ืงื•ื‘ืฆื™ ื”ืคืขืœื” ืฉืœ Windows ืขื‘ื•ืจ ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช ARM ื•-ARM64. ื ื•ืกืคื• ืชื™ืื•ืจื™ื ืฉืœ ื”ืืคืฉืจื•ื™ื•ืช ื”ืžื•ืฆืขื•ืช ื‘ืขืช ื”ืฉืœืžื” ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ ืงืœื˜ ืขืœ ื™ื“ื™ ืœื—ื™ืฆื” ืขืœ Tab.

  • ืžื•ึผืจื—ึธื‘ ื™ื›ื•ืœื•ืช ืงื™ืฉื•ืจ LLD. ืชืžื™ื›ื” ืžืฉื•ืคืจืช ื‘ืคื•ืจืžื˜ ELF, ื›ื•ืœืœ ื”ื‘ื˜ื—ืช ืชืื™ืžื•ืช ืžืœืื” ืฉืœ ืชื‘ื ื™ื•ืช ื’ืœื•ื‘ ืขื ืžืงืฉืจ GNU, ื”ื•ืกืคืช ืชืžื™ื›ื” ื‘ืžืงื˜ืขื™ ื ื™ืคื•ื™ ื‘ืื’ื™ื ื“ื—ื•ืกื™ื ".zdebug", ื”ื•ืกืคืช ื”ืžืืคื™ื™ืŸ PT_GNU_PROPERTY ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช ื”ืงื˜ืข .note.gnu.property (ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื• ื‘ืขืชื™ื“ ืœื™ื‘ื•ืช ืœื™ื ื•ืงืก),
    ื”ื•ื˜ืžืขื• ื”ืžืฆื‘ื™ื "-z noseparate-code", "-z separate-code" ื•-"-z separate-separate-segments". ืชืžื™ื›ื” ืžืฉื•ืคืจืช ืขื‘ื•ืจ MinGW ื•-WebAssembly.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”