A Linux kernel fejlesztői levelezőlistáján újraindult hat évvel ezelőtt elkezdett diskurzus a modern C++ kód használatának jövőbeli kilátásairól a Linux kernelben, a jelenlegi C nyelv és assembler beillesztések mellett, valamint a Rust nyelv előmozdításának keretében. Eredetileg a C++ kernel fejlesztésének témáját 2018 áprilisában vetette fel egy Red Hat mérnök, aki április elsején viccként közzétett egy 45 patch-ből álló gyűjteményt, amely a C++ sablonokat, öröklődő osztályokat és függvények túlterhelését célozta meg a kernel kódjában.
A diskurzus folytatásának kezdeményezője Hans Peter Anvin, az Intel egyik kulcsfontosságú kernel fejlesztője, aki olyan projekteket hozott létre, mint a syslinux, klibc és LANANA, valamint aki kifejlesztette a Linux kernel számára az automount rendszert, a RAID 6 implementációt, a CPUID drivert és az x32 ABI-t. Anvin véleménye szerint, aki számos makrót és assembler beillesztést készített a kernelben, a C és C++ nyelvek 1999 óta jelentős fejlődésen mentek keresztül, és a C++ nyelv jobban alkalmas az operációs rendszerek kernelfejlesztésére, mint a C.
Azok a lehetőségek, amelyekhez nemrég még specifikus GCC-kiterjesztéseket kellett használni, most könnyen megvalósíthatók a standard C++-ban, és sok esetben a C++ használata lehetővé teszi az infrastruktúra javítását anélkül, hogy globális kódmódosításra lenne szükség. Minimálisan említik a C++14 specifikáció használatát, amely tartalmazza a szükséges metaprogramozási eszközöket, míg kívánatosnak tekintik a C++20 specifikáció használatát, amelyben bevezették a koncepciók támogatását, amelyek képesek kizárni számos hiba megjelenését.
Anvin szerint a C++ kedvezőbb, mint a Rust, mivel az utóbbi szintaxisában lényegesen eltér a C-től, ami szokatlan a jelenlegi kernel fejlesztők számára, és nem teszi lehetővé a kód fokozatos átírását (C++ esetén a kód részletekben átírható C-ről, mivel a C-kódot C++-ként lehet fordítani). A C++ kernelben történő használatának támogatói között van Jiri Slaby a SUSE-től és David Howells a Red Hat-től.
Forrás: opennet.ru
