ΠŸΡƒΡΠΊΠ°Π½Π΅ Π½Π° компилаторния ΠΏΠ°ΠΊΠ΅Ρ‚ LLVM 16.0

Π‘Π»Π΅Π΄ ΡˆΠ΅ΡΡ‚ мСсСца Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° бСшС прСдставСно ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° LLVM 16.0 - GCC-ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌ инструмСнтариум (ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° ΠΊΠΎΠ΄), ΠΊΠΎΠΉΡ‚ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π² ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ Π±ΠΈΡ‚ΠΊΠΎΠ΄ Π½Π° RISC-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ инструкции (Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина ΠΎΡ‚ ниско Π½ΠΈΠ²ΠΎ с систСма Π·Π° многостСпСнна оптимизация). ГСнСрираният псСвдокод ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ Π² машинни инструкции Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°.

Основни подобрСния Π² Clang 16.0:

  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΡŠΡ‚ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ C++/ObjC++ Π΅ gnu++17 (ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° gnu++14), ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π½Π° C++17 с GNU Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. Π—Π° Π΄Π° Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ опцията "-std=gnu++14".
  • Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ със стандарта C++20:
    • Условно Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π½ΠΈ спСциални Ρ‡Π»Π΅Π½-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ,
    • улавянС Π½Π° структурирани ΡΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ Π² Π»Π°ΠΌΠ±Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ,
    • ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π° равСнство Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΈΠ·Ρ€Π°Π·ΠΈ,
    • ΠžΠΏΡ†ΠΈΡ Π·Π° пропусканС Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° typename Π² някои контСксти,
    • Π’Π°Π»ΠΈΠ΄Π½Π° Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Π° инициализация Π² скоби (β€žAggr(val1, val2)β€œ).
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π² Π±ΡŠΠ΄Π΅Ρ‰ΠΈΡ стандарт C++2b, са Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈ:
    • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΅ поставянСто Π½Π° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ Π² края Π½Π° ΡΡŠΡΡ‚Π°Π²Π½ΠΈ ΠΈΠ·Ρ€Π°Π·ΠΈ,
    • статичСн ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€(),
    • статичСн ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ [],
    • ΠžΡΠΈΠ³ΡƒΡ€Π΅Π½Π° Π΅ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с Ρ‚ΠΈΠΏΠ° char8_t,
    • Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΡŠΡ‚ ΠΎΡ‚ Π·Π½Π°Ρ†ΠΈ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² "\N{...}" Π΅ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½
    • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ "static constexpr" във Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ constexpr.
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π² Π±ΡŠΠ΄Π΅Ρ‰ΠΈΡ C-стандарт C2x, са Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈ:
    • Π—Π° Π΄Π° Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ β€ž-Wunused-labelβ€œ, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΡŠΡ‚ β€ž[[maybe_unused]]β€œ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠ»Π°Π³Π° към Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ
    • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΅ Π΄Π° сС поставят Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ навсякъдС Π² ΡΡŠΡΡ‚Π°Π²Π½ΠΈ ΠΈΠ·Ρ€Π°Π·ΠΈ,
    • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ typeof ΠΈ typeof_unqual,
    • Нов Ρ‚ΠΈΠΏ nullptr_t ΠΈ константа nullptr Π·Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Π½ΡƒΠ»Π΅Π²ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚ във всСки Ρ‚ΠΈΠΏ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π» ΠΈ прСдставляват Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° NULL, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ Π΅ ΠΎΠ±Π²ΡŠΡ€Π·Π°Π½ с Ρ‚ΠΈΠΏΠΎΠ²Π΅ integer ΠΈ void*.
    • Π’ Ρ€Π΅ΠΆΠΈΠΌ C2x Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° макроса va_start с ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ² Π±Ρ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ (ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²).
  • Π’ Ρ€Π΅ΠΆΠΈΠΌΠΈΡ‚Π΅ Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ Π½Π° C99, C11 ΠΈ C17 ΠΎΠΏΡ†ΠΈΠΈΡ‚Π΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ "-Wimplicit-function-declaration" ΠΈ "-Wimplicit-int" Π²Π΅Ρ‡Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ Π³Ρ€Π΅ΡˆΠΊΠ° вмСсто ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅.
  • НСпрякото ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° "void *" (Π½Π°ΠΏΡ€. "void func(void *p) { *p; }") Π² Ρ€Π΅ΠΆΠΈΠΌ C++ Π²Π΅Ρ‡Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π³Ρ€Π΅ΡˆΠΊΠ°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ISO C++, GCC, ICC ΠΈ MSVC.
  • Π£ΠΊΠ°Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±ΠΈΡ‚ΠΎΠ²ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π° ΠΊΠ°Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΈ Π½Π° инструкции (Π½Π°ΠΏΡ€. "__asm ​​​​{ mov eax, s.bf }") във Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ асСмблиращи Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π² стил Microsoft Π²Π΅Ρ‡Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π³Ρ€Π΅ΡˆΠΊΠ°.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ диагностика Π·Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ структури ΠΈ обСдинСния с Π΅Π΄Π½Π°ΠΊΠ²ΠΈ ΠΈΠΌΠ΅Π½Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° OpenCL ΠΈ OpenMP, са Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ. ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° диагностика Π·Π° C++ шаблони, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° ядрото Π½Π° OpenCL. ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π·Π° опашка Π·Π° AMDGPU. ΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚ΡŠΡ‚ nounwind сС добавя ΠΈΠΌΠΏΠ»ΠΈΡ†ΠΈΡ‚Π½ΠΎ към всички Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата CLANG_CRASH_DIAGNOSTICS_DIR, Π·Π° Π΄Π° сС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ дирСкторията, Π² която сС записват Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° диагностика Π½Π° сривовС.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° Unicode Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π΄ΠΎ спСцификацията Unicode 15.0. Някои матСматичСски символи са Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ "β‚Š" (Π½Π°ΠΏΡ€. "double xβ‚–β‚Šβ‚").
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° мноТСство ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ (ΠΏΡŠΡ€Π²ΠΎ сС Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π° слСд Ρ‚ΠΎΠ²Π° посочСнитС Ρ‡Ρ€Π΅Π· Ρ„Π»Π°Π³Π° β€ž--config=β€œ, ΠΊΠΎΠΉΡ‚ΠΎ Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π·Π°Π΄Π°Π΄Π΅Π½ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ). ΠŸΡ€ΠΎΠΌΠ΅Π½Π΅Π½ Π΅ Ρ€Π΅Π΄ΡŠΡ‚ Π½Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅: clang сС ΠΎΠΏΠΈΡ‚Π²Π° ΠΏΡŠΡ€Π²ΠΎ Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈ Ρ„Π°ΠΉΠ»Π° - .cfg ΠΈ Π°ΠΊΠΎ Π½Π΅ бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈ Π΄Π²Π° Ρ„Π°ΠΉΠ»Π° .cfg ΠΈ .cfg. Π—Π° Π΄Π° Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ Ρ„Π»Π°Π³ΡŠΡ‚ β€ž--no-default-configβ€œ.
  • Π—Π° Π΄Π° сС осигурят повтарящи сС ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ, Π΅ възмоТно Π΄Π° сС замСнят Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ‚Π΅ стойности Π·Π° Π΄Π°Ρ‚Π° ΠΈ час Π² макроситС __DATE__, __TIME__ ΠΈ __TIMESTAMP__ с Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата SOURCE_DATE_EPOCH.
  • Π—Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (builtin), ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² контСкста Π½Π° константи, Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ ΠΌΠ°ΠΊΡ€ΠΎΡΡŠΡ‚ β€œ__has_constexpr_builtin”.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Π½ΠΎΠ² Ρ„Π»Π°Π³ Π·Π° компилация "-fcoro-aligned-allocation" Π·Π° ΠΏΠΎΠ΄Ρ€Π°Π²Π½Π΅Π½ΠΎ ΡΡŠΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°ΠΌΠΊΠΈ.
  • Π€Π»Π°Π³ΡŠΡ‚ β€ž-fstrict-flex-arrays=β€œ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ‚Ρ€Π΅Ρ‚ΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° гъвкав масив Π² структури (Ρ‡Π»Π΅Π½ΠΎΠ²Π΅ Π½Π° гъвкав масив, масив с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² края Π½Π° структурата). На Ρ‚Ρ€Π΅Ρ‚ΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ само Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ "[]" (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ "int b[]") сС Ρ‚Ρ€Π΅Ρ‚ΠΈΡ€Π° ΠΊΠ°Ρ‚ΠΎ гъвкав масив, Π½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ "[0]" (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ "int b[0]") Π½Π΅ Π΅.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Ρ„Π»Π°Π³ "-fmodule-output" Π·Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° Π΅Π΄Π½ΠΎΡ„Π°Π·ΠΎΠ² ΠΌΠΎΠ΄Π΅Π» Π½Π° компилация Π·Π° стандартни C++ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Ρ€Π΅ΠΆΠΈΠΌ β€ž-Rpass-analysis=stack-frame-layoutβ€œ Π·Π° ΠΏΠΎΠΌΠΎΡ‰ ΠΏΡ€ΠΈ диагностициранСто Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° стСкова Ρ€Π°ΠΌΠΊΠ°.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Π½ΠΎΠ² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ __attribute__((target_version("cpu_features")))) ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π° функционалността Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° __attribute__((target_clones("cpu_features1","cpu_features2",...))) Π·Π° ΠΈΠ·Π±ΠΎΡ€ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ вСрсии Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, прСдоставСни ΠΎΡ‚ AArch64 процСсори.
  • Π Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ инструмСнти Π·Π° диагностика:
    • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ β€ž-Wsingle-bit-bitfield-constant-conversionβ€œ Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΈΠΌΠΏΠ»ΠΈΡ†ΠΈΡ‚Π½ΠΎ ΡΡŠΠΊΡ€Π°Ρ‰Π°Π²Π°Π½Π΅ ΠΏΡ€ΠΈ присвояванС Π½Π° Ρ‚Π°ΠΊΠΎΠ²Π° Π½Π° Π΅Π΄Π½ΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎ Π±ΠΈΡ‚ΠΎΠ²ΠΎ ΠΏΠΎΠ»Π΅ със Π·Π½Π°ΠΊ.
    • Диагностиката Π½Π° Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ constexpr Π΅ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π°.
    • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са прСдупрСТдСния β€ž-Wcast-function-type-strictβ€œ ΠΈ β€ž-Wincompatible-function-pointer-types-strictβ€œ Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΈΠΏ функция.
    • Π”ΠΎΠ±Π°Π²Π΅Π½Π° диагностика Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈ ΠΈΠ»ΠΈ Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π·Π° СкспортиранС.
    • ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° липсващи β€žΠ°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΈβ€œ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ Π΄ΡƒΠΌΠΈ Π² Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ‚Π΅.
    • Π˜Π·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ "-Winteger-overflow" ΠΈΠΌΠ° Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ситуации, ΠΊΠΎΠΈΡ‚ΠΎ водят Π΄ΠΎ ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Π½Π΅.
  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° Π½Π°Π±ΠΎΡ€Π° ΠΎΡ‚ инструкции LoongArch (-march=loongarch64 ΠΈΠ»ΠΈ -march=la464), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π² процСсоритС Loongson 3 5000 ΠΈ внСдряваща новия RISC ISA, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° MIPS ΠΈ RISC-V.

ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ ΠΈΠ½ΠΎΠ²Π°Ρ†ΠΈΠΈ Π² LLVM 16.0:

  • ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° LLVM ΠΈΠΌΠ° ΠΏΡ€Π°Π²ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π² стандарта C++17.
  • Π˜Π·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡ‚Π° към срСдата Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° LLVM са повишСни. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π²Π΅Ρ‡Π΅ трябва Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ стандарта C++17, Ρ‚.Π΅. Π—Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ сС Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅ ΠΎΡ‚ ΠΏΠΎΠ½Π΅ GCC 7.1, Clang 5.0, Apple Clang 10.0 ΠΈΠ»ΠΈ Visual Studio 2019 16.7.
  • Π‘Π΅ΠΊΠ΅Π½Π΄ΡŠΡ‚ Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° AArch64 добавя ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° процСсори Cortex-A715, Cortex-X3 ΠΈ Neoverse V2, асСмблСр Π·Π° RME MEC (контСксти Π·Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°), Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Armv8.3 (комплСксно число) ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎ мултивСрсиранС.
  • Π’ Π±Π΅ΠΊΠ΅Π½Π΄Π° Π·Π° ARM Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π·Π° Ρ†Π΅Π»Π΅Π²ΠΈΡ‚Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ Armv2, Armv2A, Armv3 ΠΈ Armv3M Π΅ прСустановСна, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π΅Π½ ΠΊΠΎΠ΄ Π½Π΅ Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ. Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π·Π° инструкции Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с комплСксни числа.
  • Π‘Π΅ΠΊΠ΅Π½Π΄ΡŠΡ‚ Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° X86 ΠΈΠΌΠ° Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ с Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ инструкции (ISA) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° инструкции RDMSRLIST, RMSRLIST ΠΈ WRMSRNS. Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" ΠΈ "-mcpu=grandridge".
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° LoongArch.
  • ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈ Π±Π΅ΠΊΠ΅Π½Π΄ΠΎΠ²Π΅ Π·Π° MIPS, PowerPC ΠΈ RISC-V Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² 64-Π±ΠΈΡ‚ΠΎΠ²ΠΈ изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° LoongArch към Π΄Π΅Π±ΡŠΠ³Π΅Ρ€Π° LLDB. ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° COFF символи Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ. ΠžΡΠΈΠ³ΡƒΡ€Π΅Π½ΠΎ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄ΡƒΠ±Π»ΠΈΡ€Π°Ρ‰ΠΈ сС DLL Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² списъка със Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π° Windows.
  • Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Libc++ основната Ρ€Π°Π±ΠΎΡ‚Π° бСшС насочСна към внСдряванС Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° стандартитС C++20 ΠΈ C++23.
  • LDD Π»ΠΈΠ½ΠΊΠ΅Ρ€ΡŠΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ намалява Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Ρ‡Ρ€Π΅Π· ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° сканиранС Π½Π° прСмСстванС Π½Π° адрСси ΠΈ инициализация Π½Π° сСкции. Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° компрСсиранС Π½Π° сСкции с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° ZSTD.

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€