论坛风格切换
正版合作和侵权请联系 sd173@foxmail.com
 
  • 帖子
  • 日志
  • 用户
  • 版块
  • 群组
帖子
购买邀请后未收到邀请联系sdbeta@qq.com
  • 102阅读
  • 0回复

[业界新闻]六年前关于是否将Linux内核从C语言转换为现代C++语言的讨论再次被提及 [复制链接]

上一主题 下一主题
 

发帖
6201
今日发帖
最后登录
2024-09-20
只看楼主 倒序阅读 使用道具 楼主  发表于: 2024-01-11 14:27:49
  关于将Linux内核转换为支持现代C++代码的前景,一个已有六年历史的Linux内核邮件列表讨论再次被点燃。现有的Linux内核主要由C代码和各种手工编写的汇编语言构成,加上Linux内核支持Rust的工作也在不断增加。虽然目前还不清楚是否有足够的力量将其变为现实,但Linux内核社区邮件列表已重启讨论,探讨未来将Linux内核C代码转换为C++的可能性。 (tzAUrC  
@Y(7n/*  
  早在2018年4月1日,红帽工程师大卫-豪威尔斯(David Howells)就提出了一组45个补丁,开始将内核转换为C++。这将允许主线内核使用内联模板函数、内联重载函数、类继承以及其他目前Linux内核的C代码不支持的功能。那天很难进行认真的讨论,最终这些补丁在Linux内核邮件列表上停留了六年,没有引起太多讨论。 xs "\c7pC  
<3=k  
  但昨天,长期从事Linux开发的彼得-安文(H.Peter Anvin)回应了内核邮件列表的主题。Anvin写了一篇长长的LKML帖子,围绕为什么Linux内核的C++最终可能是正确的时机提出了他的理由: ;D4 bxz0ou  
~aL?{kb+  
  "安德鲁-平斯基(Andrew Pinski)最近知道了这个主题。我知道它是在2018年4月1日发布的,要么是个玩笑,要么可能被当成了玩笑。不过,我认为它有其合理性,我将在此尝试激发我的观点。" 5$$]ZMof  
s>>lf&7  
  自1999年以来,C和C++都有了长足的发展,而事实上,在我个人看来,C++终于"长大"了,对于操作系统内核所体现的嵌入式编程而言,它是一种更好的C语言。我是作为内核中大量宏和内联汇编Hacks的作者才这么说的。 RzLeR%O  
OQyZ'  
  让我这么说的真正原因是,我们最近提出的许多针对gcc扩展的要求,其实在标准C++中很容易实现,而且在许多情况下,无需修改全局代码即可改进基础架构。 " 68=dC  
1ahb:Mjv  
  在我看来,C++14是拥有合理元编程支持的"最低"版本,它拥有大部分元编程支持,却没有早期版本的类型地狱(C++11拥有大部分元编程支持,但C++14填补了一些关键缺失)。 [{ A5BE -  
=_2(S6~  
  在我看来,C++20才是真正改变游戏规则的主要因素;虽然早期版本可以使用大量SFINAE hacks,但它们也提供了完全无用的错误信息。C++20增加了一些概念,这使得真正获得合理的错误信息成为可能"。 t +CU  
Ye  >+  
  对于那些可能会提出"用Rust重写C代码!"的人,Anvin在他的信息中主动补充道: !#WJ(zSq  
KDDx[]1Q  
  "现在,为什么不使用Rust呢?首先,Rust使用的是不同的语法(在我看来,往往是无端的),不仅所有内核开发人员都需要非常熟悉,才能获得与C相同的"感觉",而且将C代码转换为Rust并不是一件可以零敲碎打的事情,而现有的C代码经过一些清理就可以编译为C++。" n{c-3w.uD  
_9iF`Q  
  SUSE Lans的Jiri Slaby表示支持Linux内核的C++计划。最初发布内核补丁的红帽公司的David Howells也表示支持这一讨论。 h#|Ac>fz  
Az(J @  
  我们将拭目以待LKML讨论的结果,以及在2024+年是否最终有足够的动力支持现代C++代码--或者至少是一些定义的C++14~20子集--在Linux内核中的应用。Linus Torvalds过去一直热衷于反对C++,但如果他对最近的C++标准更加满意,或者他仍然坚持使用C语言来维护Linux内核,那么我们就能看到潮流是否最终转向了。 zn\$6'"  
z}7U>y6`  
  直到2022年,Linux内核才开始从C89转向C11。特别是如果达成共识,允许在内核中使用C++14/C++20编程子集,那么在提高基本编译器要求之前,可能还需要一段时间才能通过,以便推出更广泛的编译器支持。 oR<;Tr~{q