ΠŸΡƒΡΠΊΠ°Π½Π΅ Π½Π° компилаторния ΠΏΠ°ΠΊΠ΅Ρ‚ 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, с ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π’ΠΎΠΊΠ΅Π½ΠΈΡ‚Π΅ Π·Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ позволяват структуриранС Π½Π° информация Π·Π° 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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с DDoS Π·Π°Ρ‰ΠΈΡ‚Π°, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ ΡƒΠ΅Π± хостинг със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS Π°Ρ‚Π°ΠΊΠΈ, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster