ΠΠΎ ΡΠ΅ΡΡ ΠΌΠ΅ΡΠ΅ΡΠΈ ΡΠ°Π·Π²ΠΎΡ, ΠΎΠ±ΡΠ°Π²Π΅Π½ Π΅ LLVM 22.1.0. Π’ΠΎΡ ΡΠ°Π·Π²ΠΈΠ²Π° Π°Π»Π°ΡΠΊΠΈ (ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΈ, ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠΈ ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΈ Π½Π° ΠΊΠΎΠ΄) ΠΊΠΎΠΈ Π³ΠΈ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π²ΠΎ ΡΡΠ΅Π΄Π΅Π½ Π±ΠΈΡΠ΅Π½ ΠΊΠΎΠ΄ Π½Π° Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ»ΠΈΡΠ½ΠΈ Π½Π° RISC (Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ ΡΠΎ ΡΠΈΡΡΠ΅ΠΌ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ° Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ Π½ΠΈΠ²ΠΎΠ°). ΠΠ΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈΠΎΡ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ° Π²ΠΎ ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΈ ΠΊΠΎΠ΄ Π·Π° Π΄Π°Π΄Π΅Π½Π° ΡΠ΅Π»Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ βΡΠΎΡΠ½ΠΎ Π½Π° Π²ΡΠ΅ΠΌΠ΅β (JIT) Π·Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°. ΠΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° 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. ΠΠ²Π°Π° ΡΡΠ½ΠΊΡΠΈΡΠ° ΡΠ° Π²ΡΠ°ΡΠ° Π°Π΄ΡΠ΅ΡΠ°ΡΠ° Π½Π° ΡΡΠ΅ΠΊΠΎΡ, ΠΎΠ΄Π΄Π΅Π»ΡΠ²Π°ΡΡΠΈ ΡΠ° ΠΎΠ±Π»Π°ΡΡΠ° Π½Π° ΡΡΠ΅ΠΊΠΎΡ Π½Π° ΡΠ΅ΠΊΠΎΠ²Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡΠ° ΡΡΠΎ ΡΠ° ΠΏΠΎΠ²ΠΈΠΊΠ°Π»Π° __builtin_stack_address() ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠΎ Π³ΠΈ ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°.
- ΠΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΠΎ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°Π°Ρ Π·Π° ΠΈΠ΄Π½ΠΈΠΎΡ C2y ΡΡΠ°Π½Π΄Π°ΡΠ΄:
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ ΡΠ°ΠΌΠΊΠΈ, ΡΡΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° Π΄ΠΎΠ΄Π΅Π»ΠΈΡΠ΅ ΠΈΠΌΠΈΡΠ° Π½Π° ΡΠ°ΠΌΠΊΠΈ ΠΈ Π½Π°ΡΠ΅Π΄Π±ΠΈ Π·Π° ΠΏΡΠ΅ΡΡΠ»ΡΠ²Π°ΡΠ΅, ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ΅ Π½Π°Π²Π΅Π΄Π°Ρ Π²ΠΎ Π½Π°ΡΠ΅Π΄Π±ΠΈΡΠ΅ 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, ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π°ΡΠ°ΡΠ° ΡΠ΅Π³Π° ΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π°Ρ Π²ΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π° ΡΠΎΡΠΌΠ° ΠΏΡΠ΅Π΄ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠ°Ρ, ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°ΡΡΠΈ ΠΏΠΎΡΠΎΡΠ½ΠΈ Π΄ΠΈΡΠ°Π³Π½ΠΎΡΡΠΈΡΠΊΠΈ ΠΏΠΎΡΠ°ΠΊΠΈ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΡΠ°ΠΊΡΠ²Π°ΡΠ΅ ΡΠΎ Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ Π²ΠΎ Π·Π°ΠΌΠ΅Π½Π°ΡΠ° Π²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΠ°ΠΌΠΎ Π²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΏΡ-ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
- ΠΠΎΠ΄Π°Π΄Π΅Π½ΠΎ Π΅ ΡΠ΅ΠΌΠ΅ΡΡΡΠ²ΠΎ Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ β__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β Π·Π° Π΄Π° ΡΠ΅ ΠΎΠ΄ΡΠ΅Π΄ΠΈ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° Π΄Π΅ΡΠ°Π»ΠΈ Π²ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈΡΠ΅ Π·Π° Π³ΡΠ΅ΡΠΊΠ°ΡΠ°. ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈ Π½Π° βbasicβ Π·Π° ΠΎΠΏΡΡΠΈ ΠΎΠΏΠΈΡΠΈ (Π½Π° ΠΏΡ., βInteger coupling overflowβ) ΠΈ βdetailedβ Π·Π° Π΄Π° Π²ΠΊΠ»ΡΡΠΈ Π΄Π΅ΡΠ°Π»Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ (Π½Π° ΠΏΡ., βsigned integer coupling 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 Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅.
- ΠΠ»Π°ΡΠΊΠΈΡΠ΅ Π·Π° Π΄ΠΈΡΠ°Π³Π½ΠΎΡΡΠΈΡΠΊΠ° ΠΈ ΡΡΠ°ΡΠΈΡΠΊΠ° Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ΅Π½ΠΈ, Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ ΡΠ΅ Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ (Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π΄Π΅ΡΠ΅ΡΠΈΡΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ° ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ Π΄ΠΈΡΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ°ΡΠ°).
- ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΈΠ½ΡΡΠΈΠ½Π·ΠΈΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π·Π° Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΠΈΡΠ΅ 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
