เบ›เปˆเบญเบเบŠเบธเบ”เบ„เบญเบกเบžเบตเบงเป€เบ•เบต LLVM 10.0

เบซเบผเบฑเบ‡เบˆเบฒเบเบซเบปเบเป€เบ”เบทเบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ เบ™เบณ เบชเบฐ เป€เปœเบต เบเบฒเบ™เบ›เปˆเบญเบเป‚เบ„เบ‡เบเบฒเบ™ LLVM 10.0 โ€” เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบ—เบตเปˆโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบเบฑเบ™โ€‹เป„เบ”เป‰โ€‹เบเบฑเบš GCC (เบ„เบญเบกโ€‹เบžเบดเบงโ€‹เป€เบ•เบต, optimizers เปเบฅเบฐโ€‹เบชเป‰เบฒเบ‡โ€‹เบฅเบฐโ€‹เบซเบฑเบ”), compiling เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™ bitcode เบฅเบฐโ€‹เบ”เบฑเบšโ€‹เบ›เบฒเบ™โ€‹เบเบฒเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบ„เปเบฒโ€‹เปเบ™เบฐโ€‹เบ™เปเบฒ virtual เป€เบŠเบฑเปˆเบ™ RISC (เป€เบ„เบทเปˆเบญเบ‡ virtual เบฅเบฐโ€‹เบ”เบฑเบšโ€‹เบ•โ€‹เปˆโ€‹เปโ€‹เบฒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ›เบธเบ‡โ€‹เบซเบผเบฒเบโ€‹เบฅเบฐโ€‹เบ”เบฑเบš). เบฅเบฐเบซเบฑเบ” pseudocode เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เปˆเบฝเบ™เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบชเบฑเบ‡เบฅเบงเบก JIT เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเป‚เบ”เบเบเบปเบ‡เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ„เบ‡เบเบฒเบ™.

เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เปƒเปเปˆเปƒเบ™ LLVM 10.0 เบ›เบฐเบเบญเบšเบกเบตเบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบš C++ Concepts, เบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰ Clang เป€เบ›เบฑเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เบฎเบญเบ‡เบฎเบฑเบš CFG (control flow guards) checks เบชเปเบฒเบฅเบฑเบš Windows, เปเบฅเบฐเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ” CPU เปƒเบซเบกเปˆ.

เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡ เปƒเบ™ Clang 10.0:

  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš "เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”", เบ™เบฒเบกเบชเบฐเบเบธเบ™เปเบกเปˆเปเบšเบš C++ เบ—เบตเปˆเบˆเบฐเบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ•เปเปˆเป„เบ›, เบกเบตเบฅเบฐเบซเบฑเบ”เบŠเบทเปˆ C++2a (เป€เบ›เบตเบ”เป‚เบ”เบเบ—เบธเบ‡ -std=c++2a).
    เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบเปเบฒเบ™เบปเบ”เบŠเบธเบ”เบ‚เบญเบ‡เบ‚เปเป‰เบเปเบฒเบ™เบปเบ”เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ‚เบญเบ‡เปเบกเปˆเปเบšเบšเบ—เบตเปˆ, เปƒเบ™เป€เบงเบฅเบฒเบฅเบงเบšเบฅเบงเบก, เบˆเปเบฒเบเบฑเบ”เบŠเบธเบ”เบ‚เบญเบ‡ arguments เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบเบญเบกเบฎเบฑเบšเป„เบ”เป‰เป€เบ›เบฑเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เปเบกเปˆเปเบšเบš. เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบ„เบงเบฒเบกเบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเปƒเบŠเป‰เบžเบฒเบเปƒเบ™เปเบกเปˆเปเบšเบšเปเบฅเบฐเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™.

    เปเบกเปˆเปเบšเบš
    เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ„เบงเบฒเบกเบชเบฐเป€เปเบตเบžเบฒเบšเบ›เบฝเบšเบ—เบฝเบš = เบ•เป‰เบญเบ‡เบเบฒเบ™(T a, T b) {
    { a == b } -> std::boolean;
    { a != b } -> std::boolean;
    };

  • เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ (โ€œclang -cc1โ€) เป€เบŠเบดเปˆเบ‡เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเป„เบ”เป‰เบ–เบทเบเบขเบธเบ”เป€เบŠเบปเบฒ. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเปเบกเปˆเบ™เป€เบฎเบฑเบ”เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เบปเป‰เบ™เบ•เป, เปเบฅเบฐเบ—เบฒเบ‡เป€เบฅเบทเบญเบ "-fno-integrated-cc1" เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบŸเบทเป‰เบ™เบŸเบนเบžเบถเบ”เบ•เบดเบเปเบฒเป€เบเบปเปˆเบฒ.
  • เป‚เปเบ”เบงเบดเบ™เบดเบ”เป„เบชเปƒเปเปˆ:
    • "-Wc99-designator" เปเบฅเบฐ "-Wreorder-init-list" เป€เบ•เบทเบญเบ™เบšเปเปˆเปƒเบซเป‰เปƒเบŠเป‰ C99 initializers เปƒเบ™เป‚เปเบ” C++ เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบžเบงเบเบกเบฑเบ™เบ–เบทเบเบ•เป‰เบญเบ‡เปƒเบ™ C99 เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ C++20.
    • "-Wsizeof-array-div" - เบˆเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เป€เบŠเบฑเปˆเบ™ "int arr[10]; โ€ฆsizeof(arr) / sizeof(short)โ€ฆโ€ (เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™ โ€œsizeof(arr) / sizeof(int)โ€).
    • "-wxor-used-as-po" - เป€เบ•เบทเบญเบ™เบ•เปเปˆเบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ "^" (xor) เปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบชเบฑเบšเบชเบปเบ™เบเบฑเบš exponentiation (2^16).
    • "-Wfinal-dtor-non-final-class" - เป€เบ•เบทเบญเบ™เบเปˆเบฝเบงเบเบฑเบšเบŠเบฑเป‰เบ™เบฎเบฝเบ™เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบซเบกเบฒเบเบ”เป‰เบงเบเบ•เบปเบงเบฅเบฐเบšเบธ "เบชเบธเบ”เบ—เป‰เบฒเบ", เปเบ•เปˆเบกเบตเบ•เบปเบงเบ—เปเบฒเบฅเบฒเบเบ—เบตเปˆเบกเบตเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ "เบชเบธเบ”เบ—เป‰เบฒเบ".
    • "-Wtautological-bitwise-compare" เปเบกเปˆเบ™เบเบธเปˆเบกเบ‚เบญเบ‡เบ„เปเบฒเป€เบ•เบทเบญเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบดเบ™เบดเบ”เป„เบชเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš tautological เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบšเบดเบ”เบšเบดเบ”เปเบฅเบฐเบ„เบปเบ‡เบ—เบตเปˆ, เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบชเบฐเป€เบซเบกเบตเบ—เบตเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” bitwise OR เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบฅเบปเบš.
    • "-Wbitwise-conditional-parentheses" เป€เบ•เบทเบญเบ™เบšเบฑเบ™เบซเบฒเป€เบกเบทเปˆเบญเบ›เบฐเบชเบปเบกเบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ•เบฒเบกเป€เบซเบ”เบœเบปเบ™ AND (&) เปเบฅเบฐ OR (|) เบเบฑเบšเบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ•เบฒเบกเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚ (?:).
    • "-wmisleading-indentation" เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ‚เบญเบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบŠเบทเปˆเบ”เบฝเบงเบเบฑเบ™เบˆเบฒเบ GCC, เป€เบŠเบดเปˆเบ‡เป€เบ•เบทเบญเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเบซเบเปเป‰เบซเบ™เป‰เบฒเบ„เบทเบเบฑเบšเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ if/else/for/while block, เปเบ•เปˆเบ„เบงเบฒเบกเบˆเบดเบ‡เปเบฅเป‰เบงเบžเบงเบเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบšเบฅเบฑเบญเบเบ™เบตเป‰. .
    • เป€เบกเบทเปˆเบญเบฅเบฐเบšเบธ "-Wextra", เบเบฒเบ™เบเบงเบ”เบชเบญเบš "-Wdeprecated-copy" เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰, เป€เบ•เบทเบญเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเบชเป‰เบฒเบ‡.
      "เบเป‰เบฒเบ" เปเบฅเบฐ "เบชเปเบฒเป€เบ™เบปเบฒ" เปƒเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ—เบตเปˆเบกเบตเบ„เปเบฒเบ™เบดเบเบฒเบก destructor เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™.

    • เบเบฒเบ™เบเบงเบ”เบชเบญเบš "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-analysis" เป„เบ”เป‰เบ–เบทเบเบ‚เบฐเบซเบเบฒเบเบญเบญเบ.
    • เบเบฒเบ™เบเบงเบ”เบชเบญเบš "-Wbitwise-op-parentheses" เปเบฅเบฐ "-Wlogical-op-parentheses" เบ–เบทเบเบ›เบดเบ”เปƒเบŠเป‰เบ‡เบฒเบ™เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.
  • เปƒเบ™เบฅเบฐเบซเบฑเบ” C เปเบฅเบฐ C++, เบ„เบณเบชเบฑเปˆเบ‡เป€เบฅเบเบ„เบฐเบ™เบดเบ”เบ‚เบญเบ‡เบ•เบปเบงเบŠเบตเป‰เปเบกเปˆเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบขเบนเปˆเปƒเบ™เบญเบฒเป€เบฃเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เป€เบ„เบทเปˆเบญเบ‡เบญเบฐเบ™เบฒเป„เบกเบžเบถเบ”เบ•เบดเบเบณเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบเบณเบ™เบปเบ”เป„เบงเป‰เปƒเบ™เป‚เปเบ” "-fsanitize=pointer-overflow" เบ•เบญเบ™เบ™เบตเป‰เบˆเบฑเบšเบเปเบฅเบฐเบ™เบตเป€เบŠเบฑเปˆเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบ„เปˆเบฒเบŠเบปเบ”เป€เบŠเบตเบเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบชเบนเบ™เปƒเบชเปˆเบ•เบปเบงเบŠเบตเป‰ null เบซเบผเบทเบชเป‰เบฒเบ‡เบ•เบปเบงเบŠเบตเป‰ null เป€เบกเบทเปˆเบญเบฅเบปเบšเบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบกเบˆเบฒเบเบ•เบปเบงเบŠเบตเป‰เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™ null.
  • เป‚เบซเบกเบ” "-fsanitize=implicit-conversion" (Implicit Conversion Sanitizer) เปเบกเปˆเบ™เบ–เบทเบเบ›เบฑเบšเบ•เบปเบงเป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™ เปเบฅเบฐเบเบฒเบ™เบซเบผเบธเบ”เบฅเบปเบ‡เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบกเบตเบ‚เบฐเปœเบฒเบ”เบ™เป‰เบญเบเบเบงเปˆเบฒเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ” "int".
  • เป€เบกเบทเปˆเบญเป€เบฅเบทเบญเบเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ x86 "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" เปเบฅเบฐ "-march = cooperlake" เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™ vectorized The เบฅเบฐเบซเบฑเบ”เป„เบ”เป‰เบขเบธเบ”เป€เบŠเบปเบฒเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ 512-bit zmm เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™, เบเบปเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบŠเบตเป‰เบšเบญเบเป‚เบ”เบเบเบปเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปƒเบ™เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡. เป€เบซเบ”เบœเบปเบ™เปเบกเปˆเบ™เบงเปˆเบฒเบ„เบงเบฒเบกเบ–เบตเปˆ CPU เบซเบผเบธเบ”เบฅเบปเบ‡เป€เบกเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ 512-bit, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบœเบปเบ™เบเบฐเบ—เบปเบšเบ—เบฒเบ‡เบฅเบปเบšเบ•เปเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบฅเบงเบก. เป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™เบžเบถเบ”เบ•เบดเบเปเบฒเปƒเบซเบกเปˆ, เบ—เบฒเบ‡เป€เบฅเบทเบญเบ "-mprefer-vector-width=512" เปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰.
  • เบžเบถเบ”เบ•เบดเบเปเบฒเบ‚เบญเบ‡เบ—เบธเบ‡ "-flax-vector-conversions" เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš GCC: เบเบฒเบ™เปเบ›เบ‡เบšเบดเบ” vector implicit เบฅเบฐเบซเบงเปˆเบฒเบ‡ integer เปเบฅเบฐ vector-เบˆเบธเบ”เบฅเบญเบเปเบกเปˆเบ™เบซเป‰เบฒเบก. เป€เบžเบทเปˆเบญเบฅเบปเบšเบฅเป‰เบฒเบ‡เบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบ™เบตเป‰, เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เปƒเบŠเป‰เบ—เบธเบ‡
    "-flax-vector-conversions=all" เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

  • เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš CPUs MIPS เบ‚เบญเบ‡เบ„เบญเบšเบ„เบปเบง Octeon. เป€เบžเบตเปˆเบก "octeon+" เปƒเบชเปˆเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ” CPU เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.
  • เป€เบกเบทเปˆเบญเบ›เบฐเบเบญเบšเป€เบ‚เบปเป‰เบฒเปƒเบ™เบฅเบฐเบซเบฑเบ”เบ•เบปเบงเบเบฒเบ‡เบ‚เบญเบ‡ WebAssembly, wasm-opt optimizer เบˆเบฐเบ–เบทเบเป€เบญเบตเป‰เบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เบ–เป‰เบฒเบกเบตเบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบš.
  • เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ RISC-V, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ„เปˆเบฒเบˆเบธเบ”เบฅเบญเบเปเบกเปˆเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบขเบนเปˆเปƒเบ™เบ•เบฑเบ™เบ—เบตเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบเบญเบš inline inserts.
  • เป€เบžเบตเปˆเบกเบ—เบธเบ‡ compiler เปƒเบซเบกเปˆ: "-fgnuc-version" เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเบชเบฐเบšเบฑเบšเบชเปเบฒเบฅเบฑเบš "__GNUC__" เปเบฅเบฐ macro เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™; "-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=..."))) , เบœเบปเบ™โ€‹เบเบฐโ€‹เบ—เบปเบšโ€‹เบ‚เบญเบ‡โ€‹เบ—เบตเปˆโ€‹เบ„เป‰เบฒเบโ€‹เบ„เบทโ€‹เบเบฑเบ™โ€‹เบเบฑเบšโ€‹เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบ -branch-protect.
  • เปƒเบ™เป€เบงเบ—เบต Windows, เป€เบกเบทเปˆเบญเบฅเบฐเบšเบธเบ—เบธเบ‡ "-cfguard", เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป„เบซเบผเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” (Control Flow Guard) เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบฒเบ‡เบญเป‰เบญเบกเปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เป€เบžเบทเปˆเบญเบ›เบดเบ”เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบš, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ—เบธเบ‡ "-cfguard-nochecks" เบซเบผเบทเบ•เบปเบงเปเบเป‰เป„เบ‚ "__declspec(guard(nocf))".
  • เบžเบถเบ”เบ•เบดเบเปเบฒเบ‚เบญเบ‡เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ gnu_inline เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš GCC เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบกเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป‚เบ”เบเบšเปเปˆเบกเบตเบ„เปเบฒเบซเบฅเบฑเบ "extern".
  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ OpenCL เปเบฅเบฐ CUDA เป„เบ”เป‰เบ–เบทเบเบ‚เบฐเบซเบเบฒเบเบญเบญเบ. เป€เบžเบตเปˆเบกเบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบšเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ” OpenMP 5.0 เปƒเปเปˆ.
  • เบ•เบปเบงเป€เบฅเบทเบญเบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™ utility เบฎเบนเบšเปเบšเบš clang, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เป€เบงเบตเบŠเบฑเบ™เบ‚เบญเบ‡เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ C++ เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เป€เบงเบฅเบฒเบงเบดเป€เบ„เบฒเบฐเปเบฅเบฐเบเบฒเบ™เบˆเบฑเบ”เบฎเบนเบšเปเบšเบšเบฅเบฐเบซเบฑเบ” (เบฅเปˆเบฒเบชเบธเบ”, เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, c ++03, c ++ 11, c ++ 14, c++17, c++20).
  • เบเบฒเบ™เบเบงเบ”เบชเบญเบšเปƒเปเปˆเป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”: alpha.cplusplus.PlacementNew เป€เบžเบทเปˆเบญเบเบงเบ”เบชเบญเบšเบงเปˆเบฒเบกเบตเบžเบทเป‰เบ™เบ—เบตเปˆเบˆเบฑเบ”เป€เบเบฑเบšเบžเบฝเบ‡เบžเปเบซเบผเบทเบšเปเปˆ, fuchsia.HandleChecker เป€เบžเบทเปˆเบญเบเบงเบ”เบซเบฒเบเบฒเบ™เบฎเบปเปˆเบงเป„เบซเบผเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™ Fuchsia, security.insecureAPI.decodeValueOfObjCType เป€เบžเบทเปˆเบญเบเบงเบ”เบซเบฒเบเบฒเบ™เบฅเบปเป‰เบ™เบšเบฑเบšเป€เบŸเบตเบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เป€เบงเบฅเบฒเปƒเบŠเป‰ [NSCoderjocderbOVOV. :at:].
  • เป€เบ„เบทเปˆเบญเบ‡เบญเบฐเบ™เบฒเป„เบกเบžเบถเบ”เบ•เบดเบเบณเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบเบณเบ™เบปเบ”เป„เบงเป‰ (UBSan) เป„เบ”เป‰เบ‚เบฐเบซเบเบฒเบเบเบฒเบ™เบเบงเบ”เบเบฒเบเบฒเบ™เบฅเบปเป‰เบ™เบ•เบปเบงเบŠเบตเป‰เบ‚เบญเบ‡เบกเบฑเบ™เป€เบžเบทเปˆเบญเบˆเบฑเบšเบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบเบฒเบ™เบŠเบปเบ”เป€เบŠเบตเบเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบชเบนเบ™เป„เบ›เบซเบฒเบ•เบปเบงเบŠเบตเป‰ NULL เบซเบผเบทเบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบ„เปˆเบฒเบŠเบปเบ”เป€เบŠเบตเบเบ•เบปเบงเบŠเบตเป‰ NULL.
  • เปƒเบ™ linter clang-tidy เป€เบžเบตเปˆเบก เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ‚เบญเบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเปƒเบซเบกเปˆ.

เบ•เบปเป‰เบ™โ€‹เบ•เป เบ™เบฐเบงเบฑเบ”เบ•เบฐเบเปเบฒ LLVM 10.0:

  • เบเบฑเบšเบเบญเบš เบ•เบปเบงเปเบ—เบ™ เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบฅเบฐเบซเบงเปˆเบฒเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เปเบฅเบฐเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเปƒเบซเบกเปˆเป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบก. เบฅเบฑเบ”เบ‚เบญเบ‡ 19 เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปเบกเปˆเบ™เบ„เบฒเบ”เบ„เบฐเป€เบ™, เบฅเบงเบกเบ—เบฑเบ‡ 12 เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ 12 LLVM IR เปเบฅเบฐ 7 เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™เป€เบŠเบฑเปˆเบ™: เบŠเบตเบงเบดเบ”.
  • เป€เบžเบตเปˆเบกเบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบฒเบ‡เบ„เบฐเบ™เบดเบ”เบชเบฒเบ”เบ‚เบญเบ‡ matrix เปƒเบซเบกเปˆเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ compiler (เบžเบฒเบเปƒเบ™), เป€เบŠเบดเปˆเบ‡เบ–เบทเบเปเบ—เบ™เบ—เบตเปˆเบ”เป‰เบงเบเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ vector เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก.
  • เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบซเบผเบฒเบเบขเปˆเบฒเบ‡เป„เบ”เป‰เบ–เบทเบเป€เบฎเบฑเบ”เบเบฑเบš backends เบชเปเบฒเบฅเบฑเบš X86, AArch64, ARM, SystemZ, MIPS, AMDGPU เปเบฅเบฐเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐ PowerPC. เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ CPU
    Cortex-A65, Cortex-A65AE, Neoverse E1 เปเบฅเบฐ Neoverse N1. เบชเปเบฒเบฅเบฑเบš ARMv8.1-M, โ€‹โ€‹เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เปƒเบซเป‰เป€เบซเบกเบฒเบฐเบชเบปเบก (เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš loops เบ—เบตเปˆเบกเบต overhead เบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”เป„เบ”เป‰เบ›เบฒเบเบปเบ”) เปเบฅเบฐเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš auto-vectorization เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบ MVE. เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบš CPU MIPS Octeon. เบชเปเบฒเบฅเบฑเบš PowerPC, vectorization เบ‚เบญเบ‡ subroutines เบ„เบฐเบ™เบดเบ”เบชเบฒเบ”เป‚เบ”เบเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” MASSV (Mathematical Acceleration SubSystem) เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰, เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡, เปเบฅเบฐเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบˆเบฒเบ loops เปเบกเปˆเบ™ optimized. เบชเปเบฒเบฅเบฑเบš x86, เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™ vector เบ›เบฐเป€เบžเบ” v2i32, v4i16, v2i16, v8i8, v4i8 เปเบฅเบฐ v2i8 เป„เบ”เป‰เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡.

  • เบ›เบฑเบšเบ›เบธเบ‡เบ•เบปเบงเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบš WebAssembly. เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš TLS (Thread-Local Storage) เปเบฅเบฐเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ atomic.fence. เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ SIMD เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ. เป„เบŸเบฅเปŒเบงเบฑเบ”เบ–เบธ WebAssembly เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบฅเบฒเบเป€เบŠเบฑเบ™เบ‚เบญเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบกเบตเบ„เปˆเบฒเบซเบผเบฒเบ.
  • เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเปเบกเปˆเบ™เปƒเบŠเป‰เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ›เบฐเบกเบงเบ™เบœเบปเบ™ loops MemorySSA, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. MemorySSA เบชเบฒเบกเบฒเบ”เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเปเบฅเบฐเป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบทเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปเบ—เบ™ AliasSetTracker เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบชเบนเบ™เป€เบชเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.
  • เบ•เบปเบงเบ”เบตเบšเบฑเบ LLDB เป„เบ”เป‰เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบšเบฎเบนเบšเปเบšเบš DWARF v5 เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ. เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ”เป‰เบงเบ MinGW
    เปเบฅเบฐเป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปƒเบ™เบเบฒเบ™เปเบเป‰เบšเบฑเบ™เบซเบฒ Windows executable เบชเปเบฒเบฅเบฑเบš ARM เปเบฅเบฐ ARM64 architectures. เป€เบžเบตเปˆเบกเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป‚เบ”เบเบเบฒเบ™เบเบปเบ”เปเบ–เบš.

  • เบ‚เบฐเบซเบเบฒเบ เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ LLD. เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบฎเบนเบšเปเบšเบš ELF, เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเบ‚เบญเบ‡เปเบกเปˆเปเบšเบš glob เบเบฑเบšเบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ GNU, เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบžเบฒเบเบชเปˆเบงเบ™เบ”เบตเบšเบฑเบเบ—เบตเปˆเบ–เบทเบเบšเบตเบšเบญเบฑเบ” ".zdebug", เป€เบžเบตเปˆเบกเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ” PT_GNU_PROPERTY เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบชเปˆเบงเบ™ .note.gnu.property (เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”. Linux kernels),
    เป‚เบซเบกเบ” โ€œ-z noseparate-codeโ€, โ€œ-z เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ-codeโ€ เปเบฅเบฐ โ€œ-z เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ-loadable-segmentsโ€ เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš MinGW เปเบฅเบฐ WebAssembly.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™