Linux 内核大转变:是否将迈入现代 C++ 的时代?

news2024/10/7 10:22:13

Linux开发者 H. Peter Anvin 在邮件列表中重启了关于 Linux内核C代码转换为C++的讨论,并陈述了自己的观点。说之前先看一下这个话题的历史背景。

198e83c36a97cc49e06f75d32a24a3a0.png

早在2018年4月1日,Andrew Pinski提议将 Linux 内核源码转为 C++,在文中写道之所以引入是由于以下优点:

(1) 内联模板函数,使得诸如 cmpxchg() 和 get_user() 这样的功能的实现更加清晰。

(2) 内联重载函数,使得诸如 static_branch_likely() 这样功能的实现更加清晰。

(3) 类继承。例如,所有那些需要包含基本 inode 结构并且必须通过类似以下方式访问的 inode 封装器:

inode->vfs_inode.i_mtime

当你可以改为:

inode->i_mtime

本次重新开启这个话题,Anvin提到:

  • 自 1999 年以来,C 和 C++ 都有了很大的发展,事实上,在我个人看来,C++ 最终"成长"为一种更好的C,适合操作系统那样的嵌入式编程内核的缩影。我是说,作为内核中大量宏和内联汇编黑客的作者。

  • 真正让我这么说的是,我们最近要求的 gcc 特定扩展的很多东西实际上是在标准 C++ 中相对容易实现,并且在许多情况下,允许在无需全局代码更改的情况下改进基础设施。

  • 在我的选择中,C++14 是具有合理元编程支持的“最低”版本。没有早期版本的类型地狱(C++11 拥有大部分,但 C++14 填补了一些关键的缺失部分)。

  • 然而,在我看来,C++20 确实是主要的游戏规则改变者;尽管早期版本可以玩很多 SFINAE hacks,但它们也给出了绝对无用的信息作为错误消息。C++20 添加了概念,这使得实际上获得合理的错误成为可能。

从上面可以看出几个关键点:

  • C++成熟性

  • 标准C++的易用性

  • C++14和C++20的增强支持

  • 元编程的便利性

当然除了以上的内容之外,还有陈述了不选用Rust的原因,相比Rust,C++的语法更加熟悉,而且通过一些清理,现有的C代码可以逐步转换为C++。作者认为Rust的语法不仅不必要,而且内核开发人员需要花费大量时间来适应。

SUSE Lans的Jiri Slaby表示支持Linux内核采用C++的倡议。最初发布内核补丁的Red Hat的David Howells也回应,支持这次讨论。

我们将看到LKML(Linux内核邮件列表)上的这次讨论是否能够取得足够的进展,以支持现代C++代码——或者至少是Linux内核中的某个定义的C++14~20子集——在2024年及以后。过去,Linus Torvalds曾对C++表示强烈反感,但我们将看到是否潮水终于已经转变,他是否对最近的C++标准更为满意,或者他是否仍然坚决主张将Linux内核保持在C语言中。

直到2022年,Linux内核才开始从C89过渡到C11。特别是如果有共识允许在内核中使用C++14/C++20的子集,可能在将更广泛的编译器支持推出之前,还需要一些时间,然后才能提高基础编译器的要求。即使得到Torvalds的神奇认可,也不是一个轻率的决定。


相关引用:

https://lore.kernel.org/lkml/152261521484.30503.16131389653845029164.stgit@warthog.procyon.org.uk/ https://lore.kernel.org/lkml/1681813.1704843645@warthog.procyon.org.uk/ https://lore.kernel.org/lkml/3465e0c6-f5b2-4c42-95eb-29361481f805@zytor.com/ https://www.zhihu.com/question/639186621

往期干货:

未来已来:C++17 并行STL性能测评

热度更新,手把手实现工业级线程池

7cd1955452e9b514e2070c606ee05cfc.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1385311.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安全生产管理平台——革新传统安全生产管理方式,重塑企业安全文化

安全生产管理在现代企业中占据着至关重要的地位。传统的安全生产管理方式虽然在一定程度上能够保障企业的生产安全,但随着企业规模的不断扩大和生产环境的日益复杂,其局限性也愈发凸显。而安全生产管理平台的出现,正是为了解决这一问题。 平台…

相信我,努力真的有用!

2023年对很多人来说都是异常艰辛的一年,大环境下的每个人都面对着或多或少的挑战,在这一年的时间里,身边的朋友陆陆续续的跳槽、创业、再就业,结婚,生娃,回老家,每个人渐渐的在时代面前或妥协或…

基于物联网设计的智能储物柜(4G+华为云IOT+微信小程序)

一、项目介绍 在游乐场、商场、景区等人流量较大的地方,往往存在用户需要临时存放物品的情况,例如行李箱、外套、购物袋等。为了满足用户的储物需求,并提供更加便捷的服务体验,当前设计了一款物联网智能储物柜。 该智能储物柜通…

Embedding Watermarks into Deep Neural Networks

将水印嵌入深度神经网络 ABSTRACT 最近在深度神经网络领域取得了显著的进展。分享深度神经网络的训练模型对于这些系统的快速研究课并发进展至关重要。与此同时,保护共享训练模型的权利也变得十分必要。为此我们提议使用数字水印技术来保护知识产权,并…

手把手教你学会接口自动化系列十三-将所有的crm用例由json改为excel

本篇汇总我写接口自动化用到的所有excel数据如下: 登录模块 添加线索模块 添加场景模块

docker部署私人云盘nextcloud

首先查看效果 1.拉取镜像 docker pull nextcloud 2.创建目录 mkdir -p /data/nextcloud/{config,data,apps} 3.创建实例 docker run -itd --name yznextcloud -v /data/nextcloud/config:/var/www/html/config -v /data/nextcloud/data:/var/www/html/data -v /data/nextc…

交流插座电器漏电断路器的低功耗控制芯片D4140,内置桥式整流器漏电灵敏度可调,采用SOP8和DIP8 的封装形式

D4140 是一种用于交流插座电器漏电断路器的低功耗控制器。这些设备可以检测到接地的危险电流路径,例如设备掉进水中。在发生有害或致命的电击之前,断路器会断开线路。内置有整流桥,齐纳管稳压器,运算放大器,电流基准&a…

基于python的深度神经网络原理与实践

理论基础 什么是神经网络 我们知道深度学习是机器学习的一个分支,是一种以人工神经网络为架构,对数据进行表征学习的算法。而深度神经网络又是深度学习的一个分支,它在 wikipedia 上的解释如下: 深度神经网络(Deep N…

2024最新婚恋交友系统,PHP书写,前端UNI,前后端源码交付,支持二开,APP小程序H5,三端都有!

如何开发婚恋交友的软件 1、实名认证:每个申请注册用户必须提交真实可信的个人身份信息内容,并且必须通过平台的核查,然后才能正常使用。 2、用户量大:该平台汇聚了来自全国各地的未婚男女。用户可以线上发送私人信息&#xff0…

流程图用什么软件做?五款优质在线绘制工具看一看

流程图用什么软件做?现在,流程图已经成为了我们工作中不可或缺的工具。它能够清晰地展示各个步骤之间的关系,使我们更好地理解并优化流程。那么,在众多的流程图绘制工具中,哪一款最适合你呢?下面就给大家介…

C++输入输出和文件

文章目录 一. 流, 缓冲区和iostream文件二. 使用cout进行输出1. 用cout进行格式化2. 刷新输出缓冲区 三. 使用cin进行输入1. cin>>如何检查输入2. 流状态3. 其他istream类方法 四. 文件输入和输出1. 简单的文件I/O2. 文件模式3. 随机存取4. 内核格式化 To be continue...…

说说你对贪心算法、回溯算法的理解?应用场景?

一、贪心算法 贪心算法,又称贪婪算法,是算法设计中的一种思想 其期待每一个阶段都是局部最优的选择,从而达到全局最优,但是结果并不一定是最优的 举个零钱兑换的例子,如果你有1元、2元、5元的钱币数张,用…

odoo 一日一技 odoo去除业务模块的基础框架

基础介绍​​​ 为了单纯使用odoo基础框架,我将源码整理成四个版本,分为社区版、企业版、社区基础版(去除非必要的业务模块)、企业基础版(去除非必要的业务模块)。如图还可以这样创建四个对应配置文件。 这边以社区基础版为例 下面简单介绍一下这些模…

【Python数据可视化】matplotlib之绘制三维图形:三维散点图、三维柱状图、三维曲面图

文章传送门 Python 数据可视化matplotlib之绘制常用图形:折线图、柱状图(条形图)、饼图和直方图matplotlib之设置坐标:添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值matplotlib之增加图形内容&#x…

爬虫案例—爬取豆瓣电影最受欢迎的影评

爬虫案例—爬取豆瓣电影最受欢迎的影评 豆瓣影评网址:https://movie.douban.com/review/best/ 目标:爬取第一页的影评封面标题、评论内容、完整的评论内容 第一页页面截图如下: import requests from lxml import etree import re from bs…

前端开发必备:掌握正则表达式,轻松应对复杂的表单验证

前言 在前端开发中,经常需要处理 URL 地址、校验手机号合法性、提取域名等。正则表达式是一种常用的工具。通过使用正则表达式,我们可以对用户输入进行有效的验证,确保数据的合法性和完整性。本文将介绍一些常见的正则表达式,帮助…

【C#】当重复使用一段代码倒计时时,使用静态类和静态方法,实现简单的this扩展方法

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…

控制网页的灰度显示

1.代码&#xff1a; 普通网页 <style>html {filter: grayscale(100%);}</style> 或是:webkit内核浏览器写法 <style>html {-webkit-filter: grayscale(100%)}</style> 2.说明&#xff1a; grayscale(amount) :进行灰度转换。 amount转换值的大小&…

C#编程-实现文件输入和输出操作

实现文件输入和输出操作 所有程序接受用户的输入、处理输入并且产生输出。所以,所有的编程语言都支持输入和输出操作。例如,您需要为教师开发程序以接受学生的结果信息。您的程序应该将信息保存在硬盘的Result.xls文件中。您可以在程序中使用文件输入和输出操作以接受来自教…

应急管理蓝皮书 |《应急预案数字化建设现状和发展建议》下篇

导读 《应急预案数字化建设现状和发展建议》&#xff1a;297-313页 《中国应急管理发展报告》系列蓝皮书由中央党校&#xff08;国家行政学院&#xff09;应急管理培训中心&#xff08;中欧应急管理学院&#xff09;联合社会科学文献出版社研创出版&#xff0c;本着“权威前沿…