ИздадСн Π΅ Π½Π°Π±ΠΎΡ€ΡŠΡ‚ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ LLVM 21

Π‘Π»Π΅Π΄ ΡˆΠ΅ΡΡ‚ мСсСца Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΅ прСдставСн Ρ€Π΅Π»ΠΈΠ·ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° LLVM 21.1.0, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π° инструмСнти (ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° ΠΊΠΎΠ΄), ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‰ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π² ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ Π±ΠΈΡ‚ΠΊΠΎΠ΄ Π½Π° RISC-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ инструкции (ниска Π½ΠΈΠ²ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина с многостСпСнна систСма Π½Π° оптимизация). ГСнСрираният псСвдокод ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ Π² машинСн ΠΊΠΎΠ΄ Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Ρ†Π΅Π»Π΅Π²Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΎΡ‚ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° машинни инструкции Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°. На Π±Π°Π·Π°Ρ‚Π° Π½Π° Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ LLVM ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Ρ€Π°Π·Π²ΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° Clang, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΈ Π΅Π·ΠΈΡ†ΠΈ C, C++ ΠΈ Objective-C. Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΉΠΊΠΈ ΠΎΡ‚ ΠΊΠ»ΠΎΠ½ 18.x, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΏΡ€Π΅ΠΌΠΈΠ½Π° Π½Π° Π½ΠΎΠ²Π° схСма Π·Π° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°Π½Π΅ Π½Π° вСрсии, съгласно която Π½ΡƒΠ»Π΅Π²ΠΎΡ‚ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ (β€žN.0β€œ) сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² процСса Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π° ΠΏΡŠΡ€Π²Π°Ρ‚Π° стабилна вСрсия ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π½ΠΎΠΌΠ΅Ρ€ β€žN.1β€œ.

Π‘Ρ€Π΅Π΄ подобрСнията Π² Clang 21:

  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ със C++:
    • По ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Π½Π° GCC, Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° константни ΠΈΠ·Ρ€Π°Π·ΠΈ Π² асСмблСрни вмъквания, опрСдСляни ΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ‚Π° β€žasmβ€œ: int foo() { asm((std::string_view(β€žnopβ€œ)) ::: (std::string_view(β€žmemoryβ€œ))); }
    • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ β€žnewβ€œ ΠΈ β€ždeleteβ€œ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° β€žstd::type_identityβ€œ, Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС посочи информация Π·Π° Ρ‚ΠΈΠΏΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π°, Π·Π° ΠΊΠΎΠΉΡ‚ΠΎ сС задСля ΠΈΠ»ΠΈ освобоТдава ΠΏΠ°ΠΌΠ΅Ρ‚.
    • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° изчисляванС Π½Π° Π»Π°ΠΌΠ±Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π·Π°Ρ…Π²Π°Ρ‰Π°Ρ‚ структурирани ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ (structured binding), Π½Π° Π΅Ρ‚Π°ΠΏ компилация Π² контСкста Π½Π° константСн ΠΈΠ·Ρ€Π°Π·.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с Π±ΡŠΠ΄Π΅Ρ‰ΠΈΡ стандарт C++2c (C++26):
    • Π’ структурирани ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° синтаксиса β€ž...β€œ Π·Π° ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π·Π°Ρ…Π²Π°Ρ‰Π°Ρ‚ останалитС Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ присвояваната послСдоватСлност. auto [x,y,z] = f(); // Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ x, y, z Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ записани Ρ‚Ρ€ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°, Π²ΡŠΡ€Π½Π°Ρ‚ΠΈ ΠΎΡ‚ f(). auto […xs] = f(); // Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π° xs Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ записани всички Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ, Π²ΡŠΡ€Π½Π°Ρ‚ΠΈ ΠΎΡ‚ f(). auto [x, ...rest] = f(); // Π’ x Ρ‰Π΅ бъдС записан ΠΏΡŠΡ€Π²ΠΈΡΡ‚ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚, Π° Π² rest β€” останалитС. auto [x, y, ...rest] = f(); // Π’ x Ρ‰Π΅ бъдС записан ΠΏΡŠΡ€Π²ΠΈΡΡ‚ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚, Π² y β€” вторият, Π° Π² rest β€” трСтият. auto [x, ...rest, z] = f(); // Π² x β€” ΠΏΡŠΡ€Π²ΠΈΡΡ‚, Π² rest β€” вторият, Π² z β€” трСтият.
    • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Β«Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π½Π°Ρ‚Π° прСмСстванС» (Trivial Relocatability), която позволява ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€Π΅ΠΌeстванията Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ‚ΠΈΠΏ Ρ‡Ρ€Π΅Π· ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π±Π΅Π· ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° конструктори ΠΈΠ»ΠΈ дСструктори. Π—Π° класовСтС са Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ свойствата memberwise_trivially_relocatable ΠΈ memberwise_replaceable, Π° Π·Π° нискоурСдно прСмСстванС Π½Π° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ няколко ΠΎΠ±Π΅ΠΊΡ‚Π° са Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ trivially_relocate_at ΠΈ trivially_relocate.
    • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° структурирано ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ (structured binding) ΠΊΠ°Ρ‚ΠΎ условиС Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ if ΠΈ switch.
    • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° функцията main към Π³Π»ΠΎΠ±Π°Π»Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ» ΠΈ опрСдСлянС Π½Π° функцията main Π² ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ Π·Π° Π±ΡŠΠ΄Π΅Ρ‰ΠΈΡ стандарт C2y:
    • ΠžΡ‚ΡΡ‚Ρ€Π°Π½Π΅Π½ΠΎ Π΅ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΈ с Ρ‚ΠΈΠΏ void Π² някои контСксти, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«(void)(void)1;Β».
    • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΅ Ρ„Π°ΠΉΠ»ΡŠΡ‚ с ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π΄Π° Π½Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° със символа Π·Π° Π½ΠΎΠ² Ρ€Π΅Π΄.
    • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са Π½ΠΎΠ²ΠΈ прСфикси Π·Π° осСмдСсСтични Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΈ β€” 0o ΠΈ 0O, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ осСмдСсСтични ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Π΅ΡΠ΅Ρ‚ΠΈΡ‡Π½ΠΈ escape-послСдоватСлности Β«\o{…}Β» ΠΈ \x{…}. ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° осСмдСсСтични Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΈ 0xxx Π΅ обявСна Π·Π° остаряла. НапримСр, Β«0o123Β» ΠΈ Β«\o{123}Β» вмСсто Β«0123Β».
    • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Β«_CountofΒ» Π·Π° опрСдСлянС Π½Π° броя Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π² масив. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» stdcountof.h, ΠΊΠΎΠΉΡ‚ΠΎ опрСдСля вСрсия Π½Π° макроса Β«countofΒ», Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ Ρ‡Ρ€Π΅Π· Β«_CountofΒ».
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π² стандарта C23 ΠΏΠΎ стандарта C:
    • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΅ прСопрСдСлянСто Π½Π° tag-Ρ‚ΠΈΠΏΠΎΠ²Π΅ (struct, union, enum) Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ Π±Π»ΠΎΠΊ Π½Π° транслация, Π°ΠΊΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΈΡ‚Π΅ опрСдСлСния са структурно Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΈ (ΡΡŠΡ‰ΠΈΡΡ‚ Π±Ρ€ΠΎΠΉ Ρ‡Π»Π΅Π½ΠΎΠ²Π΅, Π΅Π΄Π½Π°ΠΊΠ²ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π° Ρ‚Π΅Π³ΠΎΠ²Π΅).
    • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ΠΎ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΠΏΠΈΡΡŠΡ†ΠΈ с ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ² Π±Ρ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ (variadic). ПозволСно Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° СдинствСн Π²Π°Ρ€ΠΈΠ°Ρ‚ΠΈΠ²Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π² ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΈΠΏΠ°.
    • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠ° с GCC Π²Π³Ρ€Π°Π΄Π΅Π½Π° функция Β«__builtin_c23_va_start()Β», която подобрява ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° диагностиката Π·Π° макроса va_start() Π² Ρ€Π΅ΠΆΠΈΠΌ C23.
  • Π’ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° MSVC Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΡŠΡ‚ inline ΠΏΡ€ΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏ функция Ρ‡Ρ€Π΅Π· typedef, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«typedef int inline Foo(int);Β»
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΡŠΡ‚ Β«restrictΒ» Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ масиви с Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ.
  • Нови прСдупрСТдСния Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π°:
    • Β«-Wdefault-const-init-varΒ» ΠΈ Β«-Wdefault-const-init-fieldΒ» β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π°, ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ΠΈ с const, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π±Π΅Π· явна инициализация.
    • Β«-Wimplicit-void-ptr-castΒ» β€” сС ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΏΡ€ΠΈ нСявно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Β«void*Β» Π² Π΄Ρ€ΡƒΠ³ Ρ‚ΠΈΠΏ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π».
    • Β«-Wc++-keywordΒ» β€” сС ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ Π΄ΡƒΠΌΠΈ Β«C++Β» ΠΊΠ°Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ Π² Β«CΒ».
    • Β«-Wc++-hidden-declΒ» β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Ρ‚Π°Π³ΠΎΠ²Π΅, Π²ΠΈΠ΄ΠΈΠΌΠΈ Π² Β«CΒ», Π½ΠΎ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌΠΈ Π² Β«C++Β» ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±Ρ…Π²Π°Ρ‚Π°.
    • Β«-Wimplicit-int-enum-castΒ» β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π° нСявнитС прСобразувания Π² C ΠΊΠΎΠ΄ ΠΎΡ‚ цСлочислСни Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π² Ρ‚ΠΈΠΏΠΎΠ²Π΅ изброяванС, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ с Β«C++Β».
    • Β«-Wtentative-definition-compatΒ» β€” диагностика Π½Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΈ опрСдСлСния Π² Β«CΒ», с мноТСство опрСдСлСния, Π½Π΅ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ с Β«C++Β».
    • Β«-Wunterminated-string-initializationΒ» ΠΈ Β«-Wc++-unterminated-string-initializationΒ» β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π° ситуации Π½Π° инициализация ΠΎΡ‚ стрингови Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΈ, Π² ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°Π΄ΡŠΡ€ΠΆΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π» със Π½ΡƒΠ»Π΅Π² ΠΊΠΎΠ΄. Π—Π° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠΎΠ»Π΅Ρ‚Π° ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² ΠΊΠΎΠ΄Π° Π½Π° C, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ изискват ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π΅Π½ Π½ΡƒΠ»Π΅Π² символ, Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Β«nonstringΒ».
    • Β«-Wjump-misses-initΒ» β€” диагностика Π½Π° ΠΏΡ€Π΅Ρ…ΠΎΠ΄ΠΈ Ρ‡Ρ€Π΅Π· goto ΠΈΠ»ΠΈ switch/case, ΠΊΠΎΠΈΡ‚ΠΎ пропускат инициализацията Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°.
    • Β«-Wundef-trueΒ» β€” ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π²Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° стойността Β«trueΒ» Π² прСдваритСлния процСсор Π½Π° C Π±Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅.
    • Β«-WnrvoΒ» β€” диагностика Π½Π° пропуснати NRVO (Named Return Value Optimization).
  • Нови Ρ„Π»Π°Π³ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π°:
    • Β«-fprofile-continuousΒ» β€” Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° синхронизация Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° Π² Ρ„Π°ΠΉΠ».
    • Β«-ftime-report-jsonΒ» β€” ΠΈΠ·Π²Π΅ΠΆΠ΄Π° информация Π·Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° компилация Π² JSON Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.
    • Β«-ignore-pchΒ» β€” Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈ заглавия.
    • Β«-fthinlto-distributorΒ» ΠΈ Β«-Xthinlto-distributorΒ» β€” Π·Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° DTLTO (Integrated Distributed ThinLTO).
    • Β«-static-libclosureΒ» β€” Π·Π° статично ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° runtime Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Blocks Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Windows.
  • Π Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ срСдства Π·Π° диагностика ΠΈ статичСн Π°Π½Π°Π»ΠΈΠ·, Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π½ΠΎΠ²ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ (ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ сто подобрСния, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с диагностиката).
  • ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈ Π±Π΅ΠΊΠ΅Π½Π΄ΠΈ Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ ARM, Aarch64, AMDGPU, x86, RISC-V, LoongArch, MIPS ΠΈ PowerPC. Π’ Π±Π΅ΠΊΠ΅Π½Π΄Π° Π·Π° RISC-V Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° СкспСримСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° асСмблСра Π·Π° [[https://llvm.org/docs/RISCVUsage.html Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π° Qualcomm uC, Andes ΠΈ SiFive.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

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