V jádru Linux 5.18 se plánuje povolení používání standardu jazyka C11.

Během diskuse o sadě patchů, které opravují problémy související s chybami třídy Spectre v kódu pro práci s propojenými seznamy, se ukázalo, že by bylo možné problém vyřešit elegantněji, kdyby byl do jádra povolen kód v jazyce C, odpovídající novější verzi standardu. V současné době musí přidávaný kód do jádra odpovídat specifikaci ANSI C (C89), která byla formulována již v roce 1989.

Problém spojený se Spectre v kódu byl způsoben pokračujícím používáním samostatně definovaného iterátoru po cyklu – pro procházení prvků propojeného seznamu se používá makro, a protože je iterátor cyklu předáván do tohoto makra, je definován mimo samotný cyklus a zůstává dostupný po cyklu. Použití standardu C99 by umožnilo definovat proměnné pro cyklus v bloku for(), což by problém vyřešilo bez nutnosti vymýšlet oblíbené způsoby.

Linus Torvalds souhlasil s myšlenkou implementace podpory novějších specifikací a navrhl přejít v jádru 5.18 na používání standardu C11, publikovaného v roce 2011. Při předběžné kontrole sestavení v GCC a Clang v novém režimu proběhlo bez odchylek. Pokud během důkladného testování nevzniknou neočekávané problémy, bude v buildovacích skriptech jádra 5.18 volba ‘—std=gnu89’ nahrazena '—std=gnu11 -Wno-shift-negative-value'. Zvažována byla i možnost použití standardu C17, ale v tomto případě by bylo nutné zvýšit minimálně podporovanou verzi GCC. Začlenění podpory C11 spadá do aktuálních požadavků na verzi GCC (5.1).

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster