GCC 13 կոմպիլյատորների փաթեթի թողարկում

Մեկ տարվա մշակումից հետո թողարկվել է անվճար GCC 13.1 կոմպիլյատորների փաթեթը, որը առաջին նշանակալից թողարկումն է նոր GCC 13.x մասնաճյուղում: Թողարկման համարակալման նոր սխեմայի համաձայն՝ մշակման ընթացքում օգտագործվել է 13.0 տարբերակը, իսկ GCC 13.1-ի թողարկումից քիչ առաջ GCC 14.0 մասնաճյուղն արդեն պատառաքաղված էր, որից կձևավորվի GCC 14.1-ի հաջորդ նշանակալի թողարկումը:

Խոշոր փոփոխություններ.

  • GCC-ն ընդունել է Modula-2 ծրագրավորման լեզվով ծրագրեր ստեղծելու ճակատային ծրագիր: Այն աջակցում է շինարարական կոդը, որը համապատասխանում է PIM2, PIM3 և PIM4 բարբառներին, ինչպես նաև այդ լեզվի համար ընդունված ISO ստանդարտին:
  • GCC Rust նախագծի (GCC Rust) կողմից պատրաստված Rust լեզվի կոմպիլյատորի ներդրմամբ ճակատը ավելացվել է GCC աղբյուրի ծառին: Ընթացիկ տեսքում fortend-ը նշված է որպես փորձնական և լռելյայն անջատված է: Հենց որ ճակատը պատրաստ լինի (ակնկալվում է հաջորդ թողարկումում), ստանդարտ GCC գործիքակազմը կարող է օգտագործվել Rust ծրագրերը կազմելու համար՝ առանց LLVM մշակումների միջոցով կառուցված rustc կոմպիլյատորը տեղադրելու անհրաժեշտության:
  • Link-in-Step Optimization-ը (LTO) ավելացնում է աջակցություն աշխատանքի սերվերին (jobserver), որը պահպանվում է GNU make նախագծի կողմից՝ մի քանի շղթաներում զուգահեռ կառուցման կատարումը օպտիմալացնելու համար: GCC-ում jobserver-ը օգտագործվում է LTO-ի օպտիմալացման ընթացքում աշխատանքը զուգահեռացնելու համար ամբողջ ծրագրի համատեքստում (WPA, Ամբողջական ծրագրի վերլուծություն): Անվանված խողովակները (--jobserver-style=fifo) օգտագործվում են լռելյայնորեն՝ jobserver-ի հետ հաղորդակցվելու համար:
  • Ստատիկ անալիզատորը (-fanalyzer) առաջարկում է 20 նոր ախտորոշիչ ստուգումներ, այդ թվում՝ «-Wanalyzer-out-of-bounds», «-Wanalyzer-allocation-size», «-Wanalyzer-deref-pre-check», «-Wanalyzer- անսահման» -recursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak":
  • Իրականացվել է JSON-ի վրա հիմնված SARIF ձևաչափով դիագնոստիկա դուրս բերելու հնարավորությունը: Նոր ձևաչափը կարող է օգտագործվել ստատիկ վերլուծության արդյունքներ (GCC -fanalyzer), ինչպես նաև զգուշացումների և սխալների մասին տեղեկություններ ստանալու համար։ Միացնելը կատարվում է «-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file» տարբերակով, որտեղ «json» ընտրանքները հանգեցնում են JSON ձևաչափի GCC-ին հատուկ տարբերակի: .
  • Իրականացրել է C23 C ստանդարտում սահմանված որոշ առանձնահատկություններ, ինչպիսիք են nullptr հաստատունը զրոյական ցուցիչներ սահմանելու համար, հեշտացնելով ցուցակների օգտագործումը փոփոխական թվով արգումենտներով (variadic), ընդլայնելով enums-ի հնարավորությունները, noreturn հատկանիշը, թույլ տալով օգտագործել constexpr-ը և auto-ը օբյեկտները սահմանելիս, typeof և typeof_unqual, նոր հիմնաբառեր alignas, alignof, bool, false, static_assert, thread_local և true, որոնք թույլ են տալիս նշել դատարկ փակագծերը սկզբնավորման ժամանակ:
  • Իրականացրել է C++23 ստանդարտով սահմանված որոշ առանձնահատկություններ, ինչպիսիք են բարդ արտահայտությունների վերջում նշաններ տեղադրելու հնարավորությունը, համատեղելիությունը char8_t տիպի հետ, #warning նախապրոցեսորային հրահանգը, սահմանազատված (\u{}, \o{}-ով: , \x{}), և անվանված ('\N{LATIN CAPITAL TARTER A}') փախուստի հաջորդականություններ, ստատիկ օպերատոր(), ստատիկ օպերատոր[], արտահայտությունների մեջ հավասարության օպերատոր, բացառությամբ constexpr-ի օգտագործման որոշ սահմանափակումների, աջակցություն UTF-8-ի համար սկզբնաղբյուր տեքստերում:
  • Բարելավված փորձարարական աջակցություն C++20 և C++23 ստանդարտների համար libstdc++-ում, օրինակ՝ վերնագրի ֆայլի աջակցության ավելացում և std::format, ընդլայնված վերնագրի ֆայլի հնարավորություններ , ավելացվել են լրացուցիչ լողացող կետերի տեսակներ, ներդրվել են վերնագրերի ֆայլեր Եվ .
  • Ավելացվել է նոր ֆունկցիայի ատրիբուտներ այն փաստաթղթին, որը ֆայլի նկարագրիչը փոխանցվում է ամբողջ թվով փոփոխականի մեջ. ))»: Նշված ատրիբուտները կարող են օգտագործվել ստատիկ անալիզատորում (-fanalyzer)՝ ֆայլերի նկարագրիչների հետ սխալ աշխատանքը հայտնաբերելու համար:
  • Ավելացվել է նոր հատկանիշ «__attribute__((assume(EXPR)))», որով կարող եք կոմպիլյատորին ասել, որ արտահայտությունը ճշմարիտ է, և կոմպիլյատորը կարող է օգտագործել այս փաստը՝ առանց արտահայտությունը գնահատելու։
  • Ավելացվեց «-fstrict-flex-arrays=[level]» դրոշը՝ կառուցվածքներում ճկուն զանգվածի տարրը մշակելիս վարքագիծ ընտրելու համար (Flexible Array Members, անորոշ չափի զանգված կառուցվածքի վերջում, օրինակ՝ «int b[] »):
  • Ավելացվեց «-Wenum-int-mismatch» դրոշը՝ նախազգուշացումներ տալու համար, եթե թվարկված տիպի և ամբողջ թվի տիպի միջև անհամապատասխանություն կա:
  • Fortran-ի ճակատային հատվածն ունի ամբողջական աջակցություն վերջնականացման համար:
  • Ընդհանուր գործառույթների և տեսակների (գեներիկների) աջակցությունն ավելացվել է Go լեզվի ճակատին, և ապահովվել է Go 1.18 լեզվի փաթեթների հետ համատեղելիությունը:
  • AArch64 backend-ը աջակցում է CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) և Arm Neoverse V2 (neoverse -v2) . «-march=" տարբերակին ավելացվել է «armv9.1-a», «armv9.2-a» և «armv9.3-a» արգումենտների աջակցությունը: Ավելացվել է FEAT_LRCPC, FEAT_CSSC և FEAT_LSE2 պրոցեսորների ընդլայնումների աջակցություն:
  • STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) և Arm Cortex-M85 (cortex-m85) պրոցեսորների աջակցությունն ավելացվել է ARM ճարտարապետության հետին պլանում:
  • Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids և AMD Zen 86 (znver4) պրոցեսորների աջակցությունը ավելացվել է x4 backend-ին: Իրականացվել են AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT և AMX-COMPLEX հրահանգների հավաքածուի ճարտարապետական ​​ընդլայնումները, որոնք առաջարկվել են Intel պրոցեսորներում: C-ի և C++-ի համար SSE2-ով համակարգերի համար տրամադրվում է __bf16 տեսակը:
  • AMD Radeon GPU-ների (GCN) կոդերի ստեղծման հետնախագիծն իրականացնում է AMD Instinct MI200 արագացուցիչներ օգտագործելու հնարավորություն՝ OpenMP/OpenACC-ի աշխատանքը բարելավելու համար: Բարելավված վեկտորացում՝ օգտագործելով SIMD հրահանգները:
  • LoongArch պլատֆորմի backend-ի հնարավորությունները զգալիորեն ընդլայնվել են:
  • Ավելացվել է CPU T-Head-ի XuanTie C906 (thead-c906) աջակցությունը RISC-V backend-ում: Իրականացված աջակցություն վեկտորային մշակիչների համար, որոնք սահմանված են RISC-V Vector Extension Intrinsic 0.11 բնութագրում: Ավելացված է աջակցություն 30 RISC-V բնութագրերի ընդարձակման համար:
  • «-shared» տարբերակով համօգտագործվող օբյեկտներ ստեղծելիս գործարկման կոդը այլևս չի ավելացվում լողացող կետով միջավայր ավելացնելուց հետո, եթե «-Ofast», «-fast-math» կամ «-funsafe-math-optimizations» օպտիմիզացիաները միացված են: .
  • DWARF կարգաբերման ձևաչափի աջակցությունն իրականացվում է գրեթե բոլոր կոնֆիգուրացիաներում:
  • Ավելացվեց «-gz=zstd» տարբերակը՝ Zstandard ալգորիթմի միջոցով վրիպազերծման տեղեկատվությունը սեղմելու համար: Հեռացվել է վրիպազերծման տեղեկատվության սեղմման հնացած ռեժիմի աջակցությունը «-gz=zlib-gnu»:
  • Ավելացվել է OpenMP 5.2-ի (Open Multi-Processing) նախնական աջակցությունը և շարունակվել է OpenMP 5.0 և 5.1 ստանդարտների ներդրումը, սահմանելով API-ներ և մեթոդներ բազմամիջուկային և հիբրիդային (CPU + GPU / DSP) համակարգերի վրա զուգահեռ ծրագրավորման մեթոդներ կիրառելու համար: ընդհանուր հիշողություն և վեկտորացման միավորներ (SIMD):
  • 1980-ականներին ստեղծված և dbx վրիպազերծիչում օգտագործվող «STABS» (միացված է -gstabs և -gxcoff տարբերակների կողմից) աջակցում է հին կարգաբերման տեղեկատվության պահպանման ձևաչափին, դադարեցվել է:
  • Solaris 11.3-ի աջակցությունը հնացած է (այս հարթակին աջակցելու կոդը կհեռացվի ապագա թողարկումում):

Source: opennet.ru

Добавить комментарий