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

Մեկ տարվա մշակումից հետո թողարկվել է GCC 12.1 անվճար կոմպիլյատորների փաթեթը՝ առաջին նշանակալից թողարկումը նոր GCC 12.x մասնաճյուղում: Համաձայն նոր թողարկման համարակալման սխեմայի, մշակման գործընթացում օգտագործվել է 12.0 տարբերակը, և GCC 12.1-ի թողարկումից կարճ ժամանակ առաջ GCC 13.0 մասնաճյուղն արդեն ճյուղավորվել էր, որի հիման վրա հաջորդ հիմնական թողարկումը՝ GCC 13.1-ը: ձեւավորվել։ Մայիսի 23-ին նախագիծը կնշի GCC-ի առաջին հրատարակության ձևավորման 35-ամյակը:

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

  • Ավելացվել է CTF (Compact Type Format) կարգաբերման ձևաչափի աջակցություն, որն ապահովում է C տիպերի մասին տեղեկատվության կոմպակտ պահպանում, գործառույթների միջև կապեր և վրիպազերծման նշաններ: Երբ ներկառուցված է ELF օբյեկտներում, ձևաչափը թույլ է տալիս օգտագործել EFL նիշերի աղյուսակները՝ տվյալների կրկնօրինակումից խուսափելու համար:
  • 1980-ականներին ստեղծված «STABS» վրիպազերծման տեղեկատվության պահպանման ձևաչափի աջակցությունը հնացել է:
  • Աշխատանքները շարունակվում են C և C++ լեզուների համար ապագա C2X և C++23 ստանդարտների աջակցության ընդլայնման ուղղությամբ: Օրինակ՝ ավելացվել է «if consteval» արտահայտության աջակցությունը. թույլատրվում է օգտագործել ավտոմատ ֆունկցիայի արգումենտներում («f(auto(g()))»); Constexpr հայտարարված ֆունկցիաներում թույլատրվում է ոչ բառացի փոփոխականների, goto-ի և պիտակների օգտագործումը. ավելացված աջակցություն բազմաչափ ինդեքսային օպերատորների համար[]; եթե, for և switch, սկզբնականացման բլոկների հնարավորություններն ընդլայնվել են («for (օգտագործելով T = int; T e: v)»):
  • C++ Ստանդարտ գրադարանը բարելավել է աջակցությունը C++20 և C++23 ստանդարտների փորձարարական բաժիններին: Ավելացվել է աջակցություն std::move_only_function, , std::basic_string::resize_and_overwrite, , և std::invoke_r համար: Թույլատրվում է std::unique_ptr, std::vector, std::basic_string, std::ընտրովի և std::variant օգտագործել constexpr ֆունկցիաներում:
  • Fortran frontend-ը լիարժեք աջակցություն է տրամադրում TS 29113 հստակեցմանը, որը նկարագրում է Fortran-ի և C կոդի միջև շարժականություն ապահովելու հնարավորությունները:
  • Ավելացվեց Clang-ին նախկինում ավելացված __builtin_shufflector(vec1, vec2, index1, index2, ...) ընդլայնման աջակցությունը, որն առաջարկում է մեկ զանգ՝ ընդհանուր վեկտորային խառնել և խառնել գործողություններ կատարելու համար:
  • «-O2» օպտիմալացման մակարդակն օգտագործելիս վեկտորացումը լռելյայն միացված է (միացված են -ftree-vectorize և -fvect-cost-model=շատ էժան ռեժիմները): Շատ էժան մոդելը թույլ է տալիս վեկտորացում միայն այն դեպքում, եթե վեկտորային կոդը կարող է ամբողջությամբ փոխարինել վեկտորացված սկալյար կոդը:
  • Ավելացվեց «-ftrivial-auto-var-init» ռեժիմը՝ հնարավորություն ընձեռելու փաթեթի վրա գտնվող փոփոխականների բացահայտ սկզբնավորումը՝ խնդիրները հետևելու և չնախապատրաստված փոփոխականների օգտագործման հետ կապված խոցելիությունները արգելափակելու համար:
  • C և C++ լեզուների համար ներկառուցված __builtin_dynamic_object_size ֆունկցիան ավելացվել է օբյեկտի չափը որոշելու համար, որը համատեղելի է Clang-ի նմանատիպ ֆունկցիայի հետ:
  • C և C++ լեզուների համար ավելացվել է «անհասանելի» հատկանիշի աջակցությունը (օրինակ, կարող եք նշել գործառույթները, որոնք սխալ կառաջացնեն, եթե փորձեք օգտագործել դրանք):
  • C և C++ լեզուների համար ավելացվել է «#elifdef» և «#elifndef» նախնական մշակման հրահանգների աջակցություն:
  • Ավելացվեց «-Wbidi-chars» դրոշը՝ նախազգուշացում ցուցադրելու համար, եթե UTF-8 նիշերը սխալ են օգտագործվում՝ փոխելով երկկողմանի տեքստի ցուցադրման հերթականությունը:
  • Ավելացվեց «-Warray-compare» դրոշը` նախազգուշացում ցուցադրելու համար, երբ փորձում եք համեմատել երկու օպերանդ, որոնք վերաբերում են զանգվածներին:
  • OpenMP 5.0 և 5.1 (Open Multi-Processing) ստանդարտների ներդրումը, որոնք սահմանում են API-ն և զուգահեռ ծրագրավորման մեթոդները բազմամիջուկային և հիբրիդային (CPU+GPU/DSP) համակարգերում՝ ընդհանուր հիշողության և վեկտորացման միավորներով (SIMD) , շարունակվել է։
  • OpenACC 2.6 զուգահեռ ծրագրավորման հստակեցման բարելավված իրականացումը, որը սահմանում է GPU-ների և մասնագիտացված պրոցեսորների վրա գործառնությունների բեռնաթափման գործիքներ, ինչպիսիք են NVIDIA PTX-ը:
  • Ընդլայնված հրահանգների աջակցություն Intel AVX86-FP512 և _Float16 տիպը ավելացվել է x16 ճարտարապետության կոդի ստեղծման հետին պլանում:
  • x86 ճարտարապետության համար ավելացվել է պաշտպանություն պրոցեսորների խոցելիություններից, որոնք առաջացել են հրահանգների սպեկուլյատիվ կատարման հետևանքով անվերապահ թռիչքային գործողություններից հետո: Խնդիրն առաջանում է հիշողության մեջ ճյուղային հրահանգին անմիջապես հաջորդող հրահանգների կանխարգելիչ մշակման պատճառով (SLS, Straight Line Speculation): Պաշտպանությունը միացնելու համար առաջարկվում է «-mharden-sls» տարբերակը:
  • Փորձարարական ստատիկ անալիզատորին ավելացվել է չնախապատրաստված փոփոխականների օգտագործման հայտնաբերում: Ավելացվել է նախնական աջակցություն՝ ներդիրային ներդիրներում հավաքման կոդը վերլուծելու համար: Բարելավված հիշողության հետևում: Անջատիչի արտահայտությունների մշակման կոդը վերաշարադրվել է:
  • Ավելացվել է 30 նոր զանգ libgccjit-ին՝ ընդհանուր գրադարան՝ կոդերի գեներատորն այլ գործընթացներում ներդնելու և այն օգտագործելու համար՝ JIT բայթկոդը մեքենայական կոդի մեջ կազմելու համար:
  • CO-RE (Compile Once - Run Everywhere) մեխանիզմի աջակցությունը ավելացվել է backend-ին՝ BPF բայթկոդ ստեղծելու համար, որը թույլ է տալիս միայն մեկ անգամ կազմել eBPF ծրագրերի կոդը Linux միջուկի համար և օգտագործել հատուկ ունիվերսալ բեռնիչ, որը հարմարեցնում է բեռնված ծրագիրը ընթացիկ միջուկում և BPF տեսակների ձևաչափով): CO-RE-ն լուծում է կոմպիլացված eBPF ծրագրերի տեղափոխելիության խնդիրը, որոնք նախկինում կարող էին օգտագործվել միայն միջուկի այն տարբերակում, որի համար դրանք կազմվել էին, քանի որ տվյալների կառուցվածքներում տարրերի դիրքը փոխվում է տարբերակից տարբերակ:
  • RISC-V backend-ն ավելացնում է նոր հրահանգների հավաքածուի ճարտարապետական ​​ընդլայնումների zba, zbb, zbc և zbs, ինչպես նաև ISA ընդլայնումներ վեկտորային և սկալյար ծածկագրման գործողությունների համար: Լռելյայնորեն տրամադրվում է RISC-V ISA 20191213 հատկորոշման աջակցություն: -mtune=thead-c906 դրոշն ավելացվել է T-HEAD c906 միջուկների օպտիմալացումն ընձեռելու համար:
  • __int128_t/integer(kind=16) տիպի աջակցությունն ավելացվել է AMD GPU-ների համար կոդերի ստեղծման հետին պլանում՝ հիմնված GCN միկրոճարտարապետության վրա: Հնարավոր է օգտագործել մինչև 40 աշխատանքային խումբ յուրաքանչյուր հաշվողական միավորի (CU) և մինչև 16 հրահանգի ճակատի (ալիքի ճակատ, SIMD շարժիչի կողմից զուգահեռ իրականացվող թելերի մի շարք) յուրաքանչյուր խմբի համար: Նախկինում մեկ ՄՄ-ի համար թույլատրվում էր միայն մեկ հրահանգի եզր:
  • NVPTX backend-ը, որը նախատեսված է NVIDIA PTX (Parallel Thread Execution) հրահանգների հավաքածուի ճարտարապետության միջոցով կոդ ստեղծելու համար, ավելացրել է «-march», «-mptx» և «-march-map» դրոշակները օգտագործելու հնարավորություն: Իրականացված աջակցություն PTX ISA sm_53, sm_70, sm_75 և sm_80: Նախնական ճարտարապետությունը sm_30 է:
  • PowerPC / PowerPC64 / RS6000 պրոցեսորների հետին պլանում ներկառուցված գործառույթների իրականացումը վերաշարադրվել է: Ներկառուցված __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar և __builtin_set_tfhar և __t.
  • ARM/AArch64 ճարտարապետության հետին պլանն ավելացրել է աջակցություն Arm Ampere-1 (-mcpu/-mtune ampere1), Arm Cortex-A510 (cortex-a510), Arm Cortex-A710 (cortex-a710) և Arm Cortex-X2 ( կեղև- x2): Ավելացվեց ARMv8 ճարտարապետության նոր տարբերակների աջակցություն՝ «-մարշ» տարբերակով օգտագործելու համար՝ armv8.7-a, armv8.8-a, armv9-a: Ավելացվել է կոմպիլյատորում ներկառուցված C ֆունկցիաների իրականացում (Intrinsics)՝ ատոմային բեռնման և հիշողության մեջ տվյալները պահելու համար՝ հիմնված ARM ընդլայնված հրահանգների օգտագործման վրա (ls64): Ավելացվել է աջակցություն memcpy, memmove և memset ֆունկցիաները արագացնելու համար՝ օգտագործելով mopsoption ARM ընդլայնումը:
  • Ավելացվեց ստուգման նոր ռեժիմ «-fsanitize=shadow-call-stack» (ShadowCallStack), որը ներկայումս հասանելի է միայն AArch64 ճարտարապետության համար և աշխատում է «-fixed-r18» տարբերակով կոդ կառուցելիս: Ռեժիմը պաշտպանում է ֆունկցիայից վերադարձի հասցեի վերագրանցումից, երբ բուֆերային գերհոսք է տեղի ունենում կույտի վրա: Պաշտպանության էությունը կայանում է նրանում, որ վերադարձի հասցեն պահպանվի առանձին «ստվերային» կույտում՝ կառավարումը ֆունկցիայի վրա փոխանցելուց և այս հասցեն առբերելուց առաջ ֆունկցիայից դուրս գալուց հետո:

Source: opennet.ru

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