ΠžΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ LLVM 22

По ΡˆΠ΅ΡΡ‚ мСсСци Ρ€Π°Π·Π²ΠΎΡ˜, објавСн Π΅ 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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π΄ΠΎΠ²Π΅Ρ€Π»ΠΈΠ² хостинг Π·Π° ΡΠ°Ρ˜Ρ‚ΠΎΠ²ΠΈ со DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚Π°, VPS VDS сСрвСри πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ сигурСн Π²Π΅Π±-хостинг со DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚Π°, VPS VDS сСрвСри | ProHoster