Π‘Π»Π΅Π΄ ΡΠ΅ΡΡ ΠΌΠ΅ΡΠ΅ΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, 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, Ρ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ. Π’ΠΎΠΊΠ΅Π½ΠΈΡΠ΅ Π·Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° heap-Π°, ΠΎΠΏΡΠΎΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΠΎΠ²Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΡΡΡ Π½ΠΎΡΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ (Π½Π°ΠΏΡ. ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅ Π½Π° βΠ³ΠΎΡΠ΅ΡΠΈβ ΠΎΡ βΡΡΡΠ΄Π΅Π½ΠΈβ Π΄Π°Π½Π½ΠΈ). ΠΠ° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠ»Π°Π³Π° β-fsanitize=alloc-tokenβ.
- Π€ΡΠ½ΠΊΡΠΈΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π΅Π·ΠΈΠΊΠ° C:
- ΠΠ½Π΅Π΄ΡΠ΅Π½Π° Π΅ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π·Π° ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ βdeferβ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΈ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΎΡ ΡΠ΅ΠΊΡΡΠΈΡ ΠΎΠ±Ρ Π²Π°Ρ. ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΡΠ»Π°Π³ΡΡ β-fdefer-tsβ, Π·Π° Π΄Π° ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° βdeferβ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²Π³ΡΠ°Π΄Π΅Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ __builtin_stack_address(), ΠΊΠΎΡΡΠΎ ΠΎΡΡΠ°Π·ΡΠ²Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π² GCC. Π’Π°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΡΡΠ° Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΡΡΠ΅ΠΊΠ°, ΡΠ°Π·Π΄Π΅Π»ΡΠΉΠΊΠΈ ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° ΡΡΠ΅ΠΊΠ° Π½Π° ΡΠ΅ΠΊΡΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΡΠΎ Π΅ ΠΈΠ·Π²ΠΈΠΊΠ°Π»Π° __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 ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π·Π° ΡΠΈΠΏΠΎΠ²Π΅ float, double ΠΈ long double.
- ΠΡΡΡΡΠ°Π½Π΅Π½Π° Π΅ Π³ΡΠ΅ΡΠΊΠ°, ΠΏΡΠΈ ΠΊΠΎΡΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π΅Π½Π°Π·ΠΎΠ²Π°Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΡΠ΅ ΡΡΠ΅ΡΠΈΡΠ°Ρ Π° ΠΊΠ°ΡΠΎ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΈ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ° Π΅Π΄ΠΈΠ½ΠΈΡΠ° Π·Π° ΠΏΡΠ΅Π²ΠΎΠ΄, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ Π° Π΅Π΄Π½ΠΈ ΠΈ ΡΡΡΠΈ ΠΏΠΎΠ»Π΅ΡΠ°.
- Π€Π»Π°Π³ΡΡ "-MG", ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Π½Π΅ Π½Π° Π»ΠΈΠΏΡΠ²Π°ΡΠΈ Π·Π°Π³Π»Π°Π²Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ Π΄ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΈΡΠ΅ "#embed" ΠΈ Π²Π΅ΡΠ΅ ΠΏΠΎΡΠΈΡΠΊΠ° Π³ΡΠ΅ΡΠΊΠ°ΡΠ° "ΡΠ°ΠΉΠ»ΡΡ Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½", ΠΊΠΎΠ³Π°ΡΠΎ Π»ΠΈΠΏΡΠ²Π° ΡΠ°ΠΉΠ», ΠΏΠΎΡΠΎΡΠ΅Π½ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΡΠ° "#embed".
- Π€ΡΠ½ΠΊΡΠΈΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ C++:
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΈ ΠΎΠ±Π²ΡΡΠ·Π²Π°Π½ΠΈΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° "constexpr", ΠΊΠ°ΠΊΡΠΎ Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ΠΎ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° C++2c (C++26). Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈΡΠ΅ ΠΊΡΠΌ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ Π²Π΅ΡΠ΅ ΠΌΠΎΠ³Π°Ρ ΡΠ°ΠΌΠΈΡΠ΅ ΡΠ΅ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ. Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΌΠ°ΡΠΈΠ²ΠΈ ΠΈ ΠΏΡΠΎΡΡΠΈ ΡΡΡΡΠΊΡΡΡΠΈ (ΠΊΠΎΡΡΠ΅ΠΆΠΈΡΠ΅ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- Π‘ΡΠ³Π»Π°ΡΠ½ΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° C++20, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° Π²Π΅ΡΠ΅ ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Ρ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π° ΡΠΎΡΠΌΠ° ΠΏΡΠ΅Π΄ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΠΎ-ΡΠΎΡΠ½ΠΈ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ Π·Π°ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΡΠ°ΠΌΠΎ Π² concept-ids.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ "__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 Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°ΡΠ΅ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΈ ΠΎΡ ΡΠΏΠΈΡΡΠΊ Ρ ΡΠΈΠΏΠΎΠ²Π΅: using MyTypeList = TypeList<__builtin_dedup_pack β¦>; // ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡΡ ΡΠΈΠΏ ΡΠ΅ Π±ΡΠ΄Π΅ TypeList
- ΠΡΠΈ Π΄Π΅Π±ΡΠ³Π²Π°Π½Π΅ Π½Π° Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ UBSan (-fsanitize=undefined -fsanitize-trap=undefined), ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ° Π·Π° Π³ΡΠ΅ΡΠΊΠ°ΡΠ° Π²Π΅ΡΠ΅ ΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π° Π² Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π΄Π΅Π±ΡΠ³Π²Π°Π½Π΅. ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΡΠ»Π°Π³ΡΡ "-fsanitize-debug-trap-reasons", Π·Π° Π΄Π° ΡΠ΅ ΡΠΊΠ°ΠΆΠ΅ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° Π΄Π΅ΡΠ°ΠΉΠ»Π½ΠΎΡΡ Π² ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π·Π° Π³ΡΠ΅ΡΠΊΠ°ΡΠ°. ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°Π΄Π°Π΄Π΅ Π½Π° "basic" Π·Π° ΠΎΠ±ΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ (Π½Π°ΠΏΡ. "Integer survey overflow") ΠΈ "detailed", Π·Π° Π΄Π° ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (Π½Π°ΠΏΡ. "signed integer survey overflow in '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 ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅.
- Π Π°Π·ΡΠΈΡΠ΅Π½ΠΈ ΡΠ° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π·Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° ΠΈ ΡΡΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ·, Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ (Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄Π΅ΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ°ΡΠ°).
- ΠΡΠΌ X86 backend-Π° ΡΠ° Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ intrinsics Π·Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡΡΠ° SSE, AVX ΠΈ AVX512. ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° ΡΠ΅ΠΆΠΈΠΌΠΈ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ 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
