Utjefte fan 'e GCC 9-kompilersuite

Nei in jier fan Γ»ntwikkeling publisearre frijlitting fan in frije set kompilatoren GCC 9.1, de earste grutte release yn 'e nije GCC 9.x branch. Yn oerienstimming mei nij skema release nΓ»mers, ferzje 9.0 waard brΓ»kt tidens de Γ»ntwikkeling proses, en koart foar de frijlitting fan GCC 9.1, de GCC 10.0 tΓ»ke hie al fertakke Γ΄f, op basis fan hokker de folgjende wichtige release, GCC 10.1, soe wurde foarme.

GCC 9.1 ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»Π΅Π½ стабилизациСй ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ стандарта C++17, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ возмоТностСй Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ стандарта C++20 (ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ C++2a), Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π² состав фронтэнда для языка D, частичным обСспСчСниСм ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ OpenMP 5.0, ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ OpenACC 2.5, ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ ΠΌΠ΅ΠΆΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ Π½Π° этапС связывания, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ срСдств диагностики ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, бэкСндами для OpenRISC, C-SKY V2 ΠΈ AMD GCN GPU .

haad feroarings:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° языка программирования D. Π’ основной состав GCC Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ фронтэнд с компилятором GDC (Gnu D Compiler) ΠΈ runtime-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (libphobos), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΉ GCC для сборки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° языкС программирования D. ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ языка D Π² GCC begΓ»n Π΅Ρ‰Ρ‘ Π² 2011 Π³ΠΎΠ΄Ρƒ, Π½ΠΎ затянулся ΠΈΠ·-Π·Π° нСобходимости привСдСния ΠΊΠΎΠ΄Π° ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΡŽ трСбованиям GCC ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ ΠΏΡ€Π°Π² Π½Π° ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Digital Mars, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ язык программирования D;
  • ВнСсСны ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π°. НапримСр, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π½Ρ‹Ρ… стратСгий раскрытия Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Switch (jump table, bit test, decision tree) Π² зависимости ΠΎΡ‚ ситуаций. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ трансформации Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΡ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Switch, с использованиСм ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Β«-ftree-switch-conversionΒ» (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°Π±ΠΎΡ€ условий Π²ΠΈΠ΄Π° Β«case 2: how = 205; break; case 3: how = 305; break;Β» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² Β«100 * how + 5Β»;
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Ρ‹ ΠΌΠ΅ΠΆΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Настройки inline-развёртывания Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для соврСмСнных ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… Π±Π°Π· Π½Π° C++ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns ΠΈ uninlined-thunk-time. ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π° Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ Π°Π³Ρ€Π΅ΡΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ раздСлСния Β«Ρ…ΠΎΠ»ΠΎΠ΄Π½ΠΎΠ³ΠΎΒ» ΠΈ «горячСго» ΠΊΠΎΠ΄Π°. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΌΠ°ΡΡˆΠ°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ для ΠΎΡ‡Π΅Π½ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΅Π΄ΠΈΠ½ΠΈΡ† трансляции (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° этапС связывания ΠΊ большим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ);
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° основС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² профилирования ΠΊΠΎΠ΄Π° (PGO β€” Profile-guided optimization), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° основС Π°Π½Π°Π»ΠΈΠ·Π° особСнностСй выполнСния ΠΊΠΎΠ΄Π°. Бводная опция Β«-fprofile-useΒ» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌΡ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Β«-fversion-loops-for-stridesΒ», Β«-floop-interchangeΒ», Β«-floop-unroll-and-jamΒ» ΠΈ Β«-ftree-loop-distributionΒ». Π£Π΄Π°Π»Π΅Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ»Ρ‹ гистограмм со счётчиками, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»ΠΎΠ² с профилями (гистограммы Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° Π»Π΅Ρ‚Ρƒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ Π²ΠΎ врСмя связывания);
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° этапС связывания (LTO). ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ сущСствСнно ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² LTO, ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти Π½Π° этапС связывания ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ распараллСливаниС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Число Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² (β€”param lto-partitions) ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΎ с 32 Π΄ΠΎ 128, Ρ‡Ρ‚ΠΎ повысило ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° систСмах с большим числом ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² CPU. Для управлСния числом процСссов ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€
    Β«β€”param lto-max-streaming-parallelismΒ»;

    Π’ ΠΈΡ‚ΠΎΠ³Π΅, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с GCC 8.3 внСсённыС Π² GCC 9 ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ tastien ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 5% ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя компиляции Firefox 66 ΠΈ LibreOffice 6.2.3. Π Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² снизился Π½Π° 7%. ВрСмя связывания Π½Π° 8-ядСрном CPU ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΎΡΡŒ Π½Π° 11%. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ стадия ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° этапС связывания Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ выполняСтся Π½Π° 28% быстрСС ΠΈ потрСбляСт Π½Π° 20% мСньшС памяти. ΠŸΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° распараллСливаСмой стадии LTO снизилось Π½Π° 30%;

  • Для языков C, C++ ΠΈ Fortran Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° бо́льшая Ρ‡Π°ΡΡ‚ΡŒ спСцификации ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования OpenACC 2.5, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅ΠΉ срСдства для выноса ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (offloading) Π½Π° GPU ΠΈ спСциализированныС процСссоры, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ NVIDIA PTX;
  • Для Π‘ ΠΈ Π‘++ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° частичная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° стандарта Iepenje MP 5.0 (Open Multi-Processing), ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ API ΠΈ способы примСнСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования для языков Π‘ΠΈ, Π‘ΠΈ++ ΠΈ Π€ΠΎΡ€Ρ‚Ρ€Π°Π½ Π½Π° многоядСрных ΠΈ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹Ρ… (CPU+GPU/DSP) систСмах с ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (SIMD);
  • Для языка Π‘ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ прСдупрСТдСния: Β«-Wadadres-fan-ynpakt-lidΒ» (Π½Π΅Π²Ρ‹Ρ€Π°Π²Π½Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля Π½Π° ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ элСмСнт структуры ΠΈΠ»ΠΈ объСдинСния) ΠΈ
    Β«-Wabsolute-weardeΒ» (ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ функциям вычислСния Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ значСния, Ссли для ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° имССтся Π±ΠΎΠ»Π΅Π΅ подходящая функция, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вмСсто abs(3.14) слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ fabs(3.14)). Для C++ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ прСдупрСТдСния: Β«-Wdeprecated-copyΒ»,
    Β«-Winit-list-lifetimeΒ», Β«-Wredundant-moveΒ», Β«-Wpessimizing-moveΒ» ΠΈ Β«-Wclass-conversionΒ». Π Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π½Π΅Π΅ доступныС прСдупрСТдСния;

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° части Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ стандарта языка Π‘ΠΈ, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΠ²Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ C2x. Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ C2x слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΈ Β«-std=c2xΒ» ΠΈ Β«-std=gnu2xΒ» (для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ GNU). Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ ΠΏΠΎΠΊΠ° Π½Π° Ρ€Π°Π½Π½Π΅ΠΉ стадии развития, поэтому ΠΈΠ· Π΅Π³ΠΎ возмоТностСй поддСрТиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ _Static_assert с ΠΎΠ΄Π½ΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ (_Static_assert c двумя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ стандартизировано Π² C11);
  • ОбъявлСна ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° стандарта C++17. Π’ΠΎ фронтэндС языковыС возмоТности C++17 Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, Π° Π² libstdc++ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π² стандартС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ;
  • Fuortset ymplemintaasje элСмСнтов Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ стандарта C++2a. НапримСр, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° пустых Ρ‡Π»Π΅Π½ΠΎΠ² структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² likely/unlikely, обСспСчСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² условных выраТСниях ΠΈ Ρ‚.ΠΏ.
    Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ C++2a слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΈ Β«-std=c++2aΒ» ΠΈ Β«-std=gnu++2aΒ». Π’ libstdc++ для C++2a Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ bit ΠΈ version, Ρ‚ΠΈΠΏΠ°ΠΆΠΈ std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible ΠΈ std::type_identity, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ std::midpoint, std::lerp, std::bind_front,
    std::visit, std::is_constant_evaluated ΠΈ std::assume_aligned, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚ΠΈΠΏΠ° char8_t, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ прСфикса ΠΈ суффикса строк (starts_with, ends_with);

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½ΠΎΠ²Ρ‹Ρ… процСссоров ARM
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE ΠΈ Neoverse N1. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠΎΡΠ²ΠΈΠ²ΡˆΠΈΡ…ΡΡ Π² Armv8.3-A инструкций для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с комплСксными числами, Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ псСвдослучайных чисСл (rng) ΠΈ тСггирования памяти (memtag), Π° Ρ‚Π°ΠΊΠΆΠ΅ инструкций для блокирования Π°Ρ‚Π°ΠΊ, связанных со спСкулятивным Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ Π±Π»ΠΎΠΊΠ° прСдсказания ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ². Для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ AArch64 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ krusingen fan stack en heap (Β«-fstack-clash-protectionΒ»). Для использования особСнностСй Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Armv8.5-A Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° опция Β«-march=armv8.5-aΒ»

  • Π’ состав Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ бэкСнд для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° для GPU AMD Π½Π° Π±Π°Π·Π΅ ΠΌΠΈΠΊΡ€ΠΎΠ°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ GCN. РСализация ΠΏΠΎΠΊΠ° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° компиляциСй ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π²Ρ‹Π½ΠΎcΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… вычислСний Ρ‡Π΅Ρ€Π΅Π· OpenMP ΠΈ OpenACC Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° ΠΏΠΎΠ·Π΄Π½Π΅Π΅) ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ GPU Fiji ΠΈ Vega 10;
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ бэкСнд для процСссоров OpenRISC;
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ бэкСнд для процСссоров C-SKY V2, выпускаСмых ΠΎΠ΄Π½ΠΎΠΈΠΌΡ‘Π½Π½ΠΎΠΉ китайской ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… устройств;
  • Π’ΠΎ всСх опциях ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ значСниями, обСспСчСна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° суффиксов kb, KiB, MB, MiB, GB ΠΈ GiB;
  • Implementearre опция Β«-flive-patching=[inline-only-static|inline-clone]Β», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ бСзопасной компиляции для систСм горячСго налоТСния ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ (live-patching) Π·Π° счёт ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ управлСния ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΠΆΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Ρ… (IPA) ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ;
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° опция Β«β€”completionΒ» для Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ управлСния Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΡ†ΠΈΠΉ ΠΏΡ€ΠΈ использовании bash;
  • Π’ срСдствах диагностики обСспСчСно отобраТСния ΠΎΡ‚Ρ€Ρ‹Π²ΠΊΠΎΠ² исходных тСкстов с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€Π° строки ΠΈ с наглядной ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΎΠΉ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏΡ‹ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ². Для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Ρ‹Π²ΠΎΠ΄Π° Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² строк ΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ прСдусмотрСны ΠΎΠΏΡ†ΠΈΠΈ Β«-fno-diagnostics-show-line-numbersΒ» ΠΈ Β«-fno-diagnostics-show-labelsΒ»;

    Utjefte fan 'e GCC 9-kompilersuite

  • Utwreide инструмСнты для диагностики ошибок Π² ΠΊΠΎΠ΄Π΅ Π½Π° C++, ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π° Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ свСдСний ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ… ошибок ΠΈ подсвСтка ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²;

    Utjefte fan 'e GCC 9-kompilersuite

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° опция Β«-fdiagnostics-format=jsonΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ диагностичСский Π²Ρ‹Π²ΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (JSON);
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ профилирования Β«-fprofile-filter-filesΒ» ΠΈ Β«-fprofile-exclude-filesΒ» для Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² с исходными тСкстами;
  • Π’ AddressSanitizer обСспСчСна гСнСрация Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° для автоматичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти провСряСмым исполняСмым Ρ„Π°ΠΉΠ»ΠΎΠΌ;
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ Π²Ρ‹Π²ΠΎΠ΄ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Β«-fopt-ynfoΒ» (дСтализация ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… оптимизациях). Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ прСфиксы Β«optimizedΒ» ΠΈ Β«missedΒ», ΠΏΠΎΠΌΠΈΠΌΠΎ Ρ€Π°Π½Π΅Π΅ доступного прСфикса Β«noteΒ». Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π²Ρ‹Π²ΠΎΠ΄ свСдСний ΠΎ принятии Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎ inline-Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΡŽ ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ²;
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° опция Β«-fsave-optimization-recordΒ», ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ GCC сохраняСт Ρ„Π°ΠΉΠ» SRCFILE.opt-record.json.gz с описаниСм Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ. ΠžΡ‚ Ρ€Π΅ΠΆΠΈΠΌΠ° Β«-fopt-infoΒ» новая опция отличаСтся Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ информация ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ ΠΈ inline-Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°Ρ…;
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΎΠΏΡ†ΠΈΠΈ Β«-fipa-stack-alignmentΒ» ΠΈ Β«-fipa-reference-addressableΒ» для управлСния ΠΏΡ€ΠΈ ΠΌΠ΅ΠΆΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Ρ… оптимизациях Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ стСка ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² адрСсации (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ запись ΠΈΠ»ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅) для статичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…;
  • ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для управлСния привязкой Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, связанным с прСдсказаниСм ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ спСкулятивным Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ инструкций: Β«__builtin_has_attributeΒ«,Β«__builtin_expect_with_probabilityΒ» ΠΈ Β«__builtin_speculation_safe_valueΒ«. Для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ copy;
  • Для языка Fortran Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° полноцСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° асинхронного Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°;
  • ОбъявлСна ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ выпускС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ Solaris 10 (*-*-solaris2.10) ΠΈ Cell/B.E (Cell Broadband Engine SPU). ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ Armv2, Armv3, Armv5 ΠΈ Armv5E. ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Intel MPX (Memory Protection Extensions).

Boarne: opennet.ru

Add a comment