Linukso-kerno 5.18 planas permesi la uzon de la C-lingva normo C11

Dum diskutado de aro da flikoj por ripari Spectre-rilatajn problemojn en la ligita listokodo, evidentiĝis ke la problemo povus esti solvita pli gracie se C-kodo kiu konformas al pli nova versio de la normo estus permesita en la kernon. Nuntempe, la aldonita kernkodo devas observi la specifon ANSI C (C89), formita reen en 1989.

Spectre-rilata problemo en la kodo estis kaŭzita de la daŭra uzo de aparte difinita iteratoro post la buklo—makroo kutimas ripetadi super la elementoj de ligita listo, kaj ĉar la bukloriteratoro estas pasita en tiun makroon, ĝi estas difinita ekster la buklo mem kaj restas havebla post la buklo. Uzi la C99-normon permesus al buklovariabloj esti difinitaj en for() bloko, kiu solvus la problemon sen devi elpensi solvojn.

Linus Torvalds konsentis kun la ideo efektivigi subtenon por pli novaj specifoj kaj proponis movi la kernon 5.18 por uzi la C11-normon, publikigitan en 2011. Dum prepara testado, la asembleo en GCC kaj Clang en la nova reĝimo pasis sen devioj. Se neniuj neatenditaj problemoj aperas dum pli profunda testado, la opcio '--std=gnu5.18' en la 89 kernaj konstruskriptoj estos anstataŭigita per '--std=gnu11 -Wno-shift-negative-value'. La ebleco uzi la C17-normon ankaŭ estis pripensita, sed ĉi-kaze necesus pliigi la minimuman subtenatan version de GCC. La inkludo de C11-subteno konvenas al la nunaj postuloj por la GCC-versio (5.1).

fonto: opennet.ru

Aldoni komenton