Linux միջուկը 5.18-ը նախատեսում է թույլատրել C լեզվի ստանդարտ C11-ի օգտագործումը

Կապակցված ցուցակի կոդում Spectre-ի հետ կապված խնդիրները շտկելու մի շարք կարկատելների քննարկման ժամանակ պարզ դարձավ, որ խնդիրը կարող է ավելի նրբագեղ լուծվել, եթե միջուկում թույլատրվի C կոդը, որը համապատասխանում է ստանդարտի նոր տարբերակին: Ներկայումս ավելացված միջուկի կոդը պետք է համապատասխանի ANSI C (C89) սպեցիֆիկացիաներին, որոնք ձևավորվել են դեռևս 1989 թվականին:

Կոդի մեջ սպեկտրի հետ կապված խնդիրը առաջացել է օղակից հետո առանձին սահմանված կրկնող սարքի շարունակական օգտագործման պատճառով. սահմանվում է բուն օղակից դուրս և հասանելի է մնում հանգույցից հետո: C99 ստանդարտի օգտագործումը թույլ կտա loop փոփոխականները սահմանել for() բլոկում, որը կլուծեր խնդիրը՝ առանց լուծումներ գտնելու:

Լինուս Տորվալդսը համաձայնել է ավելի նոր բնութագրերի համար աջակցության իրականացման գաղափարին և առաջարկել է տեղափոխել 5.18 միջուկը՝ օգտագործելու C11 ստանդարտը, որը հրապարակվել է 2011 թվականին: Նախնական թեստավորման ժամանակ GCC-ում և Clang-ում նոր ռեժիմով հավաքն անցել է առանց շեղումների։ Եթե ​​ավելի մանրակրկիտ փորձարկման ժամանակ անսպասելի խնդիրներ չառաջանան, 5.18 միջուկի կառուցման սկրիպտներում «--std=gnu89» տարբերակը կփոխարինվի «--std=gnu11 -Wno-shift-negative-value»-ով: Դիտարկվել է նաև C17 ստանդարտի օգտագործման հնարավորությունը, սակայն այս դեպքում անհրաժեշտ կլինի ավելացնել GCC-ի նվազագույն աջակցվող տարբերակը։ C11 աջակցության ներառումը համապատասխանում է GCC տարբերակի (5.1) ընթացիկ պահանջներին:

Source: opennet.ru

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