2024年又讨论是否将Linux内核从C转换为现代C++


Phoronix上的Linux内核邮件列表讨论重新引发了将Linux内核转换为支持现代C++代码的可能性。

早在2018年,就有人提出了将内核转换为C++的补丁,但一直没有太多的讨论。

然而,最近一位资深Linux开发人员表示支持这一想法,并认为现代的C++可以更好地适应操作系统内核的需求。他还提到了C++14和C++20的一些特性,认为它们可以提高内核的基础设施。一些开发者也表示支持这个计划。

  • 一些资深的Linux开发人员认为,在现代C++中使用一些特性可以改进内核基础设施,并且C++20的概念可以提供更好的错误消息。
  • 尽管过去Linus Torvalds强烈反对C++,但是现在有人支持将Linux内核转换为C++代码的讨论,并且在2024年后可能会最终实现。

现在,我们将继续看看这个讨论的发展,以及是否会有足够的支持来在Linux内核中使用现代的C++代码。

C++已经成熟?
Anvin写了一篇冗长的 LKML 文章,阐述了为什么 C++ 用于 Linux 内核可能最终是正确的时机:

自 1999 年以来,C 和 C++ 都有了长足的发展,而事实上,在我个人看来,C++ 终于 "长大 "了,对于操作系统内核所体现的嵌入式编程而言,它是一种更好的 C 语言。我是内核中大量宏和内联汇编黑客的作者。

让我这么说的真正原因是,我们最近提出的许多针对 gcc 扩展的要求,其实在标准 C++ 中很容易实现,而且在许多情况下,无需修改全局代码即可改进基础架构(见下文)。

在我看来,C++14 是拥有合理元编程支持的 "最低 "版本,它拥有大部分元编程支持,却没有早期版本的类型地狱(C++11 拥有大部分元编程支持,但 C++14 填补了一些关键缺失)。

在我看来,C++20 才是真正改变游戏规则的主要因素;虽然早期版本可以使用大量 SFINAE hacks,但它们也提供了完全无用的错误信息。C++20 增加了一些概念,这使得真正获得合理的错误信息成为可能"。

为何不用 Rust 重写 C 代码
首先,Rust 使用不同的语法,不仅所有内核开发人员都需要非常熟悉,才能获得与 C 相同的 "感觉",而且将 C 代码转换为 Rust 并不是一件可以零敲碎打的事情,必须经过一些清理,而现有的 C 代码可以很快编译为 C++。

请注意,没有一个正常人会期望使用 C++ 的所有功能。就像我们有 "内核 C"(目前是 C11 的一个子集,包含一组相对较大的允许编译器特定扩展)一样,我们也会有 "内核 C++",我建议它是 C++20 的一个严格定义的子集,包含一组类似的编译器扩展。)我意识到,由于显而易见的原因,C++20 对编译器的支持仍然很新,所以至少其中有一些是前瞻性的。