Կապակցված ցուցակի կոդում Spectre-ի հետ կապված խնդիրները շտկելու համար նախատեսված թարմացման քննարկման ժամանակ պարզ դարձավ, որ խնդիրը կարող է ավելի նրբագեղ լուծվել, եթե միջուկում թույլատրվի տեղադրել ստանդարտի ավելի նոր տարբերակին համապատասխանող C կոդ։ Ներկայումս միջուկին ավելացված կոդը պետք է համապատասխանի ANSI C (C89) սպեցիֆիկացիային, որը ձևավորվել է դեռևս 1989 թվականին։
Spectre-ի հետ կապված կոդի խնդիրը առաջացել էր ցիկլից հետո առանձին սահմանված իտերատորի շարունակական օգտագործման պատճառով. մակրոն օգտագործվում է կապված ցուցակի վրայով իտերացիայի համար, և քանի որ ցիկլի իտերատորը փոխանցվում է այս մակրոյին, այն սահմանվում է ցիկլից դուրս և մնում է հասանելի ցիկլից հետո: C99 ստանդարտի օգտագործումը թույլ կտա ցիկլի փոփոխականները սահմանել for() բլոկում, ինչը կլուծեր խնդիրը՝ առանց շրջանցիկ լուծում գտնելու անհրաժեշտության:
Լինուս Տորվալդսը համաձայնեց ավելի նոր սպեցիֆիկացիաների աջակցությունը ներդնելու գաղափարի հետ և առաջարկեց անցնել 5.18 թվականին 11 միջուկում հրապարակված C2011 ստանդարտին: Նախնական փորձարկման ընթացքում GCC-ում և Clang-ում նոր ռեժիմում կառուցվածքը ընթացավ առանց շեղումների: Եթե ավելի մանրակրկիտ փորձարկման ընթացքում անսպասելի խնդիրներ չառաջանան, 5.18 միջուկի կառուցվածքի սկրիպտներում '--std=gnu89' տարբերակը կփոխարինվի '--std=gnu11 -Wno-shift-negative-value' տարբերակով: Դիտարկվեց նաև C17 ստանդարտի օգտագործման հնարավորությունը, բայց այս դեպքում անհրաժեշտ կլինի մեծացնել GCC-ի նվազագույն աջակցվող տարբերակը: C11 աջակցության միացումը համապատասխանում է GCC տարբերակի (5.1) ներկայիս պահանջներին:
Source: opennet.ru
