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

ืœืื—ืจ ืฉื™ืฉื” ื—ื•ื“ืฉื™ ืคื™ืชื•ื—, ืฉื•ื—ืจืจื” LLVM 22.1.0. ื”ื™ื ืžืคืชื—ืช ื›ืœื™ื (ืžื”ื“ืจื™ื, ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ื•ืžื—ื•ืœืœื™ ืงื•ื“) ืืฉืจ ืžื”ื“ืจื™ื ืชื•ื›ื ื™ื•ืช ืœืงื•ื“ ื‘ื™ื ื™ื™ื ืฉืœ ื”ื•ืจืื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื“ืžื•ื™ื•ืช RISC (ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื‘ืจืžื” ื ืžื•ื›ื” ืขื ืžืขืจื›ืช ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืžืจื•ื‘ืช ืจืžื•ืช). ื ื™ืชืŸ ืœื”ืžื™ืจ ืืช ื”ืคืกืื•ื“ื•-ืงื•ื“ ืฉื ื•ืฆืจ ืœืงื•ื“ ืžื›ื•ื ื” ืขื‘ื•ืจ ืคืœื˜ืคื•ืจืžืช ื™ืขื“ ื ืชื•ื ื” ืื• ืœื”ืฉืชืžืฉ ื‘ื• ืขืœ ื™ื“ื™ ืžื”ื“ืจ JIT (Just-in-Time) ื›ื“ื™ ืœื™ืฆื•ืจ ื”ื•ืจืื•ืช ืžื›ื•ื ื” ื™ืฉื™ืจื•ืช ื‘ืžื”ืœืš ื‘ื™ืฆื•ืข ื”ืชื•ื›ื ื™ืช. ื‘ื”ืชื‘ืกืก ืขืœ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช LLVM, ื”ืคืจื•ื™ืงื˜ ืžืคืชื— ืืช ืžื”ื“ืจ Clang, ื”ืชื•ืžืš ื‘ืฉืคื•ืช ื”ืชื›ื ื•ืช C, C++ ื•-Objective-C. ื”ื—ืœ ืžืขื ืฃ 18.x, ื”ืคืจื•ื™ืงื˜ ืขื‘ืจ ืœืกื›ื™ืžืช ืžืกืคื•ืจ ื’ืจืกืื•ืช ื—ื“ืฉื”, ืœืคื™ื” ื’ืจืกื” 0 ("N.0") ืžืฉืžืฉืช ื‘ืžื”ืœืš ื”ืคื™ืชื•ื—, ื•ื”ื’ืจืกื” ื”ื™ืฆื™ื‘ื” ื”ืจืืฉื•ื ื” ืžืžื•ืกืคืจืช "N.1".

ืฉื™ืคื•ืจื™ื ื‘-Clang 22 ื›ื•ืœืœื™ื:

  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืืกื™ืžื•ื ื™ ื”ืงืฆืืช ื–ื™ื›ืจื•ืŸ (Allocation Tokens) ืœืกื™ืžื•ืŸ ืคืขื•ืœื•ืช ื”ืงืฆืืช ื–ื™ื›ืจื•ืŸ ื”ืžื‘ื•ืฆืขื•ืช ื‘ืืžืฆืขื•ืช ืคื•ื ืงืฆื™ื•ืช ื›ื’ื•ืŸ malloc ืขื ืžื–ื”ื” ื™ื™ื—ื•ื“ื™. ืืกื™ืžื•ื ื™ ื”ืงืฆืื” ืžืืคืฉืจื™ื ืžื‘ื ื” ืžื™ื“ืข ืขืจื™ืžื”, ืคื™ืฉื•ื˜ ื–ื™ื”ื•ื™ ื“ืœื™ืคื•ืช ื–ื™ื›ืจื•ืŸ ื•ืžืืคืฉืจื™ื ืงื™ื‘ื•ืฅ ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ื ืขืœ ืกืžืš ื™ื™ืขื•ื“ื ืื• ื“ืคื•ืกื™ ืฉื™ื ื•ื™ (ืœืžืฉืœ, ื”ืคืจื“ืช ื ืชื•ื ื™ื "ื—ืžื™ื" ืž"ืงืจื™ื"). ื›ื“ื™ ืœื”ืคืขื™ืœ, ื”ืฉืชืžืฉ ื‘ื“ื’ืœ "-fsanitize=alloc-token".
  • ืชื›ื•ื ื•ืช ื”ืงืฉื•ืจื•ืช ืœืฉืคืช C:
    • ื˜ื™ื•ื˜ืช ืžืคืจื˜ ื”ืžื’ื“ื™ืจื” ืืช ืžื ื’ื ื•ืŸ ื”ื‘ื™ืฆื•ืข ื”ื ื“ื—ื” "defer" ื™ื•ืฉื, ื”ืžืืคืฉืจ ื‘ื™ืฆื•ืข ืคืขื•ืœื•ืช ื›ืืฉืจ ื”ื”ื™ืงืฃ ื”ื ื•ื›ื—ื™ ื™ื•ืฆื. ื”ื“ื’ืœ "-fdefer-ts" ื ื•ืกืฃ ื›ื“ื™ ืœืืคืฉืจ ืชืžื™ื›ื” ื‘-"defer".
    • ื”ืคื•ื ืงืฆื™ื” ื”ืžื•ื‘ื ื™ืช __builtin_stack_address() ื ื•ืกืคื”, ื•ืžืฉืงืคืช ืืช ื”ืคื•ื ืงืฆื™ื” ื”ื“ื•ืžื” ื‘-GCC. ืคื•ื ืงืฆื™ื” ื–ื• ืžื—ื–ื™ืจื” ืืช ื›ืชื•ื‘ืช ื”-stack ื”ืžืคืจื™ื“ื” ื‘ื™ืŸ ืื–ื•ืจ ื”-stack ืฉืœ ื”ืคื•ื ืงืฆื™ื” ื”ื ื•ื›ื—ื™ืช ืฉืงืจืื” ืœ-__builtin_stack_address() ืœื‘ื™ืŸ ื”ืคื•ื ืงืฆื™ื•ืช ื”ื‘ืื•ืช ืฉื”ื™ื ืงื•ืจืืช ืœื”ืŸ.
  • ื™ื›ื•ืœื•ืช ื”ืžืคื•ืชื—ื•ืช ืขื‘ื•ืจ ืชืงืŸ C2y ื”ืขืชื™ื“ื™:
    • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืœื•ืœืื•ืช ื‘ืขืœื•ืช ืฉื, ื”ืžืืคืฉืจืช ืœืš ืœื”ืงืฆื•ืช ืฉืžื•ืช ืœืœื•ืœืื•ืช ื•ืคืงื•ื“ื•ืช switch, ืื•ืชืŸ ื ื™ืชืŸ ืœืฆื™ื™ืŸ ื‘ืคืงื•ื“ื•ืช break ื•-continue ื›ื“ื™ ืœื”ื’ื“ื™ืจ ื‘ืžืคื•ืจืฉ ืืช ื”ืœื•ืœืื” ืžืžื ื” ื™ืฉ ืœืฆืืช. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // ืขื‘ื•ืจ ืืœ CONT1 continue outer; // ืขื‘ื•ืจ ืืœ CONT2 // CONT1 } // CONT2 }
    • ื™ื™ืฉื•ื ื”ืžืืงืจื• ื”ืžื•ื‘ื ื” "__COUNTER__", ืฉื ื•ืขื“ ืœื™ืฆื•ืจ ืฉืžื•ืช ืžื–ื”ื™ื ื™ื™ื—ื•ื“ื™ื™ื, ื”ื•ืจื—ื‘ ื•ื ื›ืœืœ ื‘ืชืงืŸ. ื ืงื‘ืขื” ืžื’ื‘ืœื” ืฉืœ 2147483647 ืงืจื™ืื•ืช ืœืžืงืจื• ื–ื”; ื—ืจื™ื’ื” ืžืžื’ื‘ืœื” ื–ื• ืชื™ืฆื•ืจ ืฉื’ื™ืื”.
    • ื”ื•ืกืจื” ื”ืื–ื”ืจื” (-Wstatic-in-inline) ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืคื•ื ืงืฆื™ื•ืช ืกื˜ื˜ื™ื•ืช ืื• ืžืฉืชื ื™ื ื‘ืชื•ืš ืคื•ื ืงืฆื™ื•ืช ื”ืžื•ื’ื“ืจื•ืช ื›-"extern inline".
  • ื™ื›ื•ืœื•ืช ื”ืžื•ื’ื“ืจื•ืช ื‘ืชืงืŸ C23 C:
    • ืงื•ื‘ืฅ ื”ื›ื•ืชืจืช float.h ืชื•ืžืš ื›ืขืช ื‘ืคืงื•ื“ื•ืช ื”ืžืืงืจื• FLT_SNAN, DBL_SNAN ื•-LDBL_SNAN, ืืฉืจ ืžื™ื™ืฉืžื™ื ืขืจื›ื™ NaN signaled (ื”ื’ื•ืจืžื™ื ืœื—ืจื™ื’ื” ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืคืขื•ืœื•ืช ืืจื™ืชืžื˜ื™ื•ืช) ืขื‘ื•ืจ ืกื•ื’ื™ float, double ื•-long double.
    • ืชื•ืงืŸ ื‘ืื’ ืฉื‘ื• ืกื•ื’ื™ื ืฉื•ื ื™ื ืœืœื ืฉื ื˜ื•ืคืœื• ื›ืชื•ืืžื™ื ื‘ืื•ืชื” ื™ื—ื™ื“ืช ืชืจื’ื•ื ืื ื”ื™ื• ืœื”ื ืื•ืชื ืฉื“ื•ืช.
    • ื”ื“ื’ืœ "-MG" ื”ืžืฉืžืฉ ืœื”ืชืขืœืžื•ืช ืžืงื‘ืฆื™ ื›ื•ืชืจืช ื—ืกืจื™ื ื‘ืžื”ืœืš ืกืจื™ืงืช ืชืœื•ื™ื•ืช ื”ื•ืจื—ื‘ ืœื”ื ื—ื™ื•ืช "#embed" ื•ื›ืขืช ืžื“ื›ื ืืช ื”ืฉื’ื™ืื” "ื”ืงื•ื‘ืฅ ืœื ื ืžืฆื" ื›ืืฉืจ ืงื•ื‘ืฅ ืฉืฆื•ื™ืŸ ื‘ื”ื•ืจืืช "#embed" ื—ืกืจ.
  • ืชื›ื•ื ื•ืช ื”ืงืฉื•ืจื•ืช ืœ-C++:
    • ื ื•ืกืคื” ื”ื™ื›ื•ืœืช ืœื”ืฉืชืžืฉ ื‘ืงื™ืฉื•ืจื™ื ืžื•ื‘ื ื™ื ื‘ื”ืงืฉืจ ืฉืœ "constexpr", ื›ืคื™ ืฉืคื•ืชื— ื‘ืžืคืจื˜ C++2c (C++26). ืžืฉืžืขื•ืช ื”ื“ื‘ืจ ื”ื™ื ืฉื”ืคื ื™ื•ืช ืœื‘ื™ื˜ื•ื™ื™ื ืงื‘ื•ืขื™ื ื™ื›ื•ืœื•ืช ื›ืขืช ืœื”ื™ื•ืช ื‘ื™ื˜ื•ื™ื™ื ืงื‘ื•ืขื™ื ื‘ืขืฆืžืŸ. ืžื™ื•ืฉืžืช ืชืžื™ื›ื” ืขื‘ื•ืจ ืžืขืจื›ื™ื ื•ืžื‘ื ื™ื ืคืฉื•ื˜ื™ื (tuples ืขื“ื™ื™ืŸ ืื™ื ื ื ืชืžื›ื™ื). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • ื›ืคื™ ืฉื ื“ืจืฉ ื‘ืชืงืŸ C++20, ืื™ืœื•ืฆื™ื ืžื•ืžืจื™ื ื›ืขืช ืœืฆื•ืจื” ืกื˜ื ื“ืจื˜ื™ืช ืœืคื ื™ ื”ื‘ื“ื™ืงื”, ืžื” ืฉืžืืคืฉืจ ื”ื•ื“ืขื•ืช ืื‘ื—ื•ืŸ ืžื“ื•ื™ืงื•ืช ื™ื•ืชืจ ื•ื˜ื™ืคื•ืœ ื ื›ื•ืŸ ื‘ืฉื’ื™ืื•ืช ื”ื—ืœืคื” ื‘ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ืชื‘ื ื™ืช ื”ืžืฉืžืฉื™ื ืจืง ื‘ืžื–ื”ื™ ืžื•ืฉื’.
    • ื ื•ืกืคื” ืžืฉืคื—ื” ืฉืœ ืคื•ื ืงืฆื™ื•ืช ืžื•ื‘ื ื•ืช "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" ื›ื“ื™ ืœื‘ืจืจ ื”ืื ืื•ืคืจื˜ื•ืจื™ ื”ื”ืฉื•ื•ืื” "<", ">", "<=" ื•-">=" โ€‹โ€‹ืกื•ื ืชื–ื• ืžื”ืื•ืคืจื˜ื•ืจ "<=>".
    • ื”ืคืจืžื˜ืจ "-Wincompatible-pointer-types" ืฉื•ื ื” ื›ืš ืฉื™ืฆื™ื’ ืฉื’ื™ืื” ื‘ืžืงื•ื ืื–ื”ืจื”. ื›ื“ื™ ืœื—ื–ื•ืจ ืœื”ืชื ื”ื’ื•ืช ื”ืงื•ื“ืžืช, ื”ืฉืชืžืฉ ื‘ืืคืฉืจื•ืช "-Wno-error=incompatible-pointer-types".
  • ื ื•ืกืคื• ืคื•ื ืงืฆื™ื•ืช ืžื•ื‘ื ื•ืช __builtin_bswapg, __builtin_elementwise_ldexp, __builtin_elementwise_fshl, __builtin_elementwise_fshr, __builtin_elementwise_minnumnum, __builtin_elementwise_maxnumnum, __builtin_masked_load, __builtin_masked_expand_load, __builtin_masked_store, __builtin_masked_compress_store, __builtin_masked_gather, __builtin_masked_scatter, ื•-__builtin_dedup_pack. ืœื“ื•ื’ืžื”, builtin_dedup_pack ืžืืคืฉืจ ืœืš ืœื”ืกื™ืจ ื›ืคื™ืœื•ื™ื•ืช ืžืจืฉื™ืžืช ืกื•ื’ื™ื: ื‘ืืžืฆืขื•ืช MyTypeList = TypeList<__builtin_dedup_pack ...>; // ื”ืกื•ื’ ืฉื™ืชืงื‘ืœ ื™ื”ื™ื” TypeList
  • ื‘ืขืช ื ื™ืคื•ื™ ืฉื’ื™ืื•ืช ื‘ื”ืชื ื”ื’ื•ืช ืœื ืžื•ื’ื“ืจืช ืขื UBSan (-fsanitize=undefined -fsanitize-trap=undefined), ืžื™ื“ืข ืขืœ ืกื™ื‘ืช ื”ืฉื’ื™ืื” ื ื›ืœืœ ื›ืขืช ื‘ืžื™ื“ืข ื ื™ืคื•ื™ ื”ืฉื’ื™ืื•ืช ืฉื ื•ืฆืจ. ื”ื“ื’ืœ "-fsanitize-debug-trap-reasons" ื ื•ืกืฃ ื›ื“ื™ ืœืฆื™ื™ืŸ ืืช ืจืžืช ื”ืคื™ืจื•ื˜ ื‘ืžื™ื“ืข ื”ืฉื’ื™ืื”. ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืื•ืชื• ืœ-"ื‘ืกื™ืกื™" ืขื‘ื•ืจ ืชื™ืื•ืจื™ื ื›ืœืœื™ื™ื (ืœืžืฉืœ, "ื’ืœื™ืฉืช ื—ื™ื‘ื•ืจ ืžืกืคืจื™ื ืฉืœืžื™ื") ื•ืœ-"ืžืคื•ืจื˜" ื›ื“ื™ ืœื›ืœื•ืœ ืžื™ื“ืข ืžืคื•ืจื˜ (ืœืžืฉืœ, "ื’ืœื™ืฉืช ื—ื™ื‘ื•ืจ ืžืกืคืจื™ื ืฉืœืžื™ื ืขื ื—ืชื™ืžื” ื‘-'a + b'").
  • ื ื•ืกืคื• ื“ื’ืœื™ ืžื”ื“ืจ ื—ื“ืฉื™ื:
    • `-f[no-]sanitize-debug-trap-reasons` ื›ื“ื™ ืœืฉืœื•ื˜ ื”ืื ืกื™ื‘ื•ืช ืœืžืœื›ื•ื“ื•ืช ื—ืจื™ื’ื™ื ืžื•ื˜ืžืขื•ืช ื‘ืžื™ื“ืข ื ื™ืคื•ื™ ืฉื’ื™ืื•ืช ื‘ืขืช ืงื•ืžืคื™ืœืฆื™ื” ื‘ืžืฆื‘ `-fsanitize-trap`.
    • "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", ื•-"-fsanitize-alloc-token-extended" ืœื ื™ื”ื•ืœ ืืกื™ืžื•ื ื™ ื”ืงืฆืืช ื–ื™ื›ืจื•ืŸ.
    • "-fmatrix-memory-layout" ื›ื“ื™ ืœืฉืœื•ื˜ ื‘ืคืจื™ืกืช ื”ื–ื™ื›ืจื•ืŸ ืฉืœ ืกื•ื’ื™ ืžื˜ืจื™ืฆื•ืช (ืœืžืฉืœ, column-major ืขื‘ื•ืจ column-major, row-major ืขื‘ื•ืจ row-major).
  • ืœืคื•ื ืงืฆื™ื•ืช ื™ืฉ ื›ืขืช ืชื›ื•ื ื” "malloc_span", ื‘ื“ื•ืžื” ืœืชื›ื•ื ื” malloc ืืš ืจืœื•ื•ื ื˜ื™ืช ืœืคื•ื ืงืฆื™ื•ืช ืฉืžื—ื–ื™ืจื•ืช ืžื‘ื ื™ื ื“ืžื•ื™ื™ span ื”ืžื›ื™ืœื™ื ืžืฆื‘ื™ืข ื•ืฉื“ื” ืขื ื”ื’ื•ื“ืœ ืื• ืžืฆื‘ื™ืข ืœืกื•ืฃ ื”ื‘ืœื•ืง.
  • ื ื•ืกืฃ ื”ืชื›ื•ื ื” "modular_format" ื›ื“ื™ ืœื‘ื—ื•ืจ ื‘ืื•ืคืŸ ื“ื™ื ืžื™ ืืช ื”ืžื™ืžื•ืฉ ื”ื ื“ืจืฉ ืฉืœ ืคื•ื ืงืฆื™ื™ืช printf ื”ืžืงื•ืฉืจ ืกื˜ื˜ื™ืช ื‘ื–ืžืŸ ื”ืงื™ืฉื•ืจ.
  • ื›ืœื™ ืื‘ื—ื•ืŸ ื•ื ื™ืชื•ื— ืกื˜ื˜ื™ ื”ื•ืจื—ื‘ื•, ื ื•ืกืคื• ื‘ื“ื™ืงื•ืช ื—ื“ืฉื•ืช (ื›ืžื” ืขืฉืจื•ืช ืฉื™ืคื•ืจื™ื ื”ืงืฉื•ืจื™ื ืœืื‘ื—ื•ืŸ).
  • ืชื•ืกืคื•ืช ืคื ื™ืžื™ื•ืช ื ื•ืกืคื•ืช ืขื‘ื•ืจ ื”ืจื—ื‘ื•ืช SSE, AVX ื•-AVX512 ื ื•ืกืคื• ืœืฉืจืช ื”ืื—ื•ืจื™ ืฉืœ X86. ืžืฆื‘ื™ ื‘ื ื™ื™ื” ื ื•ืกืคื• ืขื‘ื•ืจ ืžืขื‘ื“ื™ Intel ื”ืžื‘ื•ืกืกื™ื ืขืœ ื”ืžื™ืงืจื•-ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช ืฉืœ Wildcat Lake (-march=wildcatlake) ื•-Nova Lake (-march=novalake).
  • ืžืขืจื›ืช ื”ื”ืคืขืœื” AArch64 ืชื•ืžื›ืช ื›ืขืช ื‘ืžืขื‘ื“ื™ Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) ื•-Arm C1-Ultra (c1-ultra). ื ื•ืกืคื• ืคื•ื ืงืฆื™ื•ืช ืžื•ื‘ื ื•ืช ื ื•ืกืคื•ืช ืขื‘ื•ืจ ื”ื•ืจืื•ืช FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US] ื•-FCVTA[US]. ื”ืชืžื™ื›ื” ื‘ื ื™ื”ื•ืœ ื’ืจืกืื•ืช ืžืจื•ื‘ื•ืช ืคื•ื ืงืฆื™ื•ืช (FMV) ื”ืชื™ื™ืฆื‘ื”. ืžืฉืชืžืฉื™ื ื™ื›ื•ืœื™ื ื›ืขืช ืœืขืงื•ืฃ ืืช ื”ืขื“ื™ืคื•ืช ืฉืœ ื’ืจืกืื•ืช ืคื•ื ืงืฆื™ื•ืช ืฉื•ื ื•ืช.
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืืจื›ื™ื˜ืงื˜ื•ืจืช LoongArch32 โ€(LA32R, LA32S).
  • ืžืขืจื›ื•ืช ืื—ื•ืจื™ื•ืช ืžืฉื•ืคืจื•ืช ืขื‘ื•ืจ ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly ื•-PowerPC.

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

ืงื ื” ืื™ืจื•ื— ืืžื™ืŸ ืœืืชืจื™ื ืขื ื”ื’ื ืช DDoS, ืฉืจืชื™ VPS VDS ๐Ÿ”ฅ ืงื ื” ืื—ืกื•ืŸ ืืชืจื™ื ืืžื™ืŸ ืขื ื”ื’ื ืช DDoS, ืฉืจืชื™ VPS VDS | ProHoster