Linux ядросу 5.18 C тилинин C11 стандартын колдонууга уруксат берүүнү пландаштырууда

Шилтемеленген тизме кодундагы Spectre менен байланышкан көйгөйлөрдү оңдоо үчүн жаңыртуулардын топтомун талкуулап жатып, ядрого стандарттын жаңыраак версиясына туура келген C коду уруксат берилсе, маселе жакшыраак чечилиши мүмкүн экени айкын болду. Учурда, кошулган ядро ​​коду 89-жылы түзүлгөн ANSI C (C1989) спецификациясына ылайык келиши керек.

Коддогу Spectre менен байланышкан көйгөй циклден кийин өзүнчө аныкталган итератордун үзгүлтүксүз колдонулушунан келип чыккан — макро шилтемеленген тизменин элементтерин кайталоо үчүн колдонулат жана цикл итератору ошол макроско өткөндүктөн, ал циклден тышкары аныкталат жана циклден кийин жеткиликтүү бойдон калат. C99 стандартын колдонуу цикл өзгөрмөлөрүн for() блогунда аныктоого мүмкүндүк берет, бул маселени чечүү жолдорун таппастан чечет.

Линус Торвалдс жаңы спецификацияларды колдоону ишке ашыруу идеясына макул болуп, 5.18-жылы жарыяланган C11 стандартын колдонуу үчүн 2011 ядросун жылдырууну сунуштады. Алдын ала тестирлөөнүн жүрүшүндө GCC жана Clang жаңы режимде чогултуу эч кандай четтөөлөрсүз өттү. Эгер кылдат тестирлөө учурунда күтүлбөгөн көйгөйлөр жаралбаса, '--std=gnu5.18' опциясы 89 ядро ​​куруу скрипттеринде '--std=gnu11 -Wno-shift-negative-value' менен алмаштырылат. C17 стандартын колдонуу мүмкүнчүлүгү да каралды, бирок бул учурда GCCдин минималдуу колдоого алынган версиясын көбөйтүү керек болот. C11 колдоосун киргизүү GCC версиясынын (5.1) учурдагы талаптарына туура келет.

Source: opennet.ru

Комментарий кошуу