写点什么

Azure CTO 呼吁不要使用 C/C++ 创建新项目,C++ 之父回应:你们这些高管就爱喜新厌旧

  • 2022-09-21
    北京
  • 本文字数:2654 字

    阅读完需:约 9 分钟

Azure CTO呼吁不要使用 C/C++ 创建新项目,C++之父回应:你们这些高管就爱喜新厌旧

微软 Azure CTO 向旧语言猛烈开炮,C++之父对此进行了辩护。

 

微软 Azure CTO Mark Russinovich 呼吁放弃 C 和 C++这两门久经时间考验,被广泛应用于高性能本机应用程序开发的编程语言。C++之父 Bjarne Stroustrup 回应称企业高管就是喜欢新事物,且一些人总爱发表非常片面的言论。

 

本周一,Russinovich 敦促科技行业放弃 C/C++。他强调,“说到编程语言的选择,是时候停止用 C/C++创建新项目了。Rust 才是无垃圾回收语言中的最佳选项。出于安全性和可靠性的考量,整个软件行业都该弃用这两种陈旧的语言。”

 


从 C++专家到“Rust 传播者”

 

Mark Russinovich 本人是著名的黑客和逆向工程大师,2005 年,曾运用逆向工程在索尼 DRM 产品中发现 rootkit 复制保护有害程序。该曝光事件在当时极其有名,因为 rootkit 性质恶劣,它通过修改操作系统,阻止计算复刻 CD 副本,并无法卸载,甚至无法被反病毒和反间谍程序检测到,为其他恶意软件打开了渗透 Windows PC 的大门。另外,他还曾利用闲暇时间写过三本安全相关的小说(堪称摸鱼大师)。

 

在 Reddit 上,他被人誉为“地球上最有才华的 C/C++ 程序员之一”。在加入微软之前,Russinovich 编写并发布了数十个流行的 Windows 管理和诊断实用程序。 2006 年,微软收购了他一手创办起来的企业 Winternals Software,Russinovich 也因此加入微软,成为微软技术研究员——这是它可以授予的最高荣誉之一,随后职位变更为微软 Azure 主架构师以及 CTO。

 


截图来源:https://www.linkedin.com/in/markrussinovich/

 

因其微软 Azure CTO 的身份,Mark Russinovich 的评论值得注意,因为微软的核心产品,如 Windows、Office 和 SQL Server,主要是用 C 和 C++ 编写的。而在 Azure 云平台上得到广泛应用的 Linux 也是如此,主要语言为 C 和 C++。根据报道,Linux 缔造者 Linus Torvalds 已经证实,除非出现不可预见的特殊状况,否则 Linux 6.1 版内核将使用 Rust 代码。作为向来以 C 语言编写,同时包含少量汇编及胶水脚本的传世项目,Linux 对 Rust 的接纳堪称里程碑式事件。

 

Rust 是 Graydon Hoare 出于个人爱好设计的编程语言,于 2006 年在 Mozilla 初步成型,并在 2010 年正式亮相。随着 2015 年 Rust 1.0 的发布,它也逐渐以 C/C++替代选项的姿态得到人们的广泛关注。

 

自那时起,Rust 连续七年成为 Stack Overflow 年度调查中最受欢迎的编程语言。尽管学习难度不低,但它还是被各大科技巨头先后纳入自家项目当中。

 

苹果、亚马逊、谷歌、Meta 乃至微软等等,都已经在功能开发和实际生产中使用 Rust。Cloudflare最近大肆宣传的全新HTTP代理Pingora也是用 Rust 编写而成,据称在提高性能的同时削减了 CPU 与内存用量。

 

Rust 的最大优势在于出现内存损坏 bug 的几率更低,也就让软件变得更加安全。至少自 2019 年以来,微软就一直在讨论放弃 C/C++、转用 Rust 的可能性。微软还在开发自己的云内存安全编程语言,即 Verona 项目。所以,Russinovich 这次提出放弃 C/C++的主张,可以说是早有先例。

 

另外,这也不是微软第一次公开支持 Rust。三年前,微软安全响应中心(MSRC)曾在博客上发表文章表示“ Rust 是目前 C 和 C++ 的最佳替代品”。 MSRC 团队还表示,“大多数修复的漏洞和分配的 CVE 都是由开发人员无意中将内存损坏错误插入到其 C 和 C++ 的代码中造成的。自 2006 年以来,微软修复的 CVE 中约有 70%跟内存安全问题相关。这意味着,如果该软件是用 Rust 编写的,那么这些安全问题很可能会被消除。”

 

外媒 The Register 询问了 Russinovich 的建议是否会在全公司内部推行,但微软方面拒绝置评。

当然,单靠 Rust 本身并不足以保障软件安全。它虽然提供针对内存安全漏洞的防御,但却无法消除其他威胁元素。

 

正如 Rust 说明文档所言,“Rust 是种既安全、又不那么安全的语言。”开发者有可能在某些任务中编写出不安全的 Rust 代码,这是无法单靠语言自身解决的问题。另外,Rust 也解决不了健全软件设计范畴之外的攻击向量(例如社会工程)。但必须承认,Rust 的品质相当过硬,在自己的领地内足以支撑起更强的安全信心。

 

Rust 基金会执行董事兼 CEO Rebecca Rumbul 在采访中表示,“我们希望各方的支持和肯定能推动针对 Rust 基础设施和技术社区的持续投入,确保 Rust 能够在未来的发展道路上延续安全、可靠和可持续等优势。”

 

C++之父:ISO C++已经实现了可靠的内存安全

 

对此,外媒请 C++缔造者 Bjarne Stroustrup 发表了评论。在回复中,Stroustrup 站在 C++的立场做了一番辩护。

 

人们总是迷恋那些看似能让生活更轻松的新事物,这一点在企业高管身上体现得尤其明显。

 

“另外,选择新事物也能激起人们的兴奋之情;相比之下,解决旧有知名工具中的已知问题就显得没那么‘酷’。很遗憾,新语言往往需要多年历练和完善,才能在广泛的应用领域中获得与成熟语言相比肩的水平。但大多数人看不到一点,而且总爱发表一些非常片面的评论。”

 

Stroustrup 表示,“当然,安全性在大多数开发场景下都至关重要,所以多年来我一直致力于提高 C++的安全性。”

 

“我们现在已经在 ISO C++中实现了可靠的完美类型与内存安全。也就是说,每个对象都会根据它的定义类型进行使用。具体而言,我们消除了空指针问题、能够捕捉范围错误,并消除了数据争用。请注意,包括 Rust 在内,任何一种号称‘安全’的语言都无法彻底避免风险代码。”

 

Stroustrup 还以参与编写的 C++ Core 指南为例,提出“这份指南的基本思路,就是定义一组必须遵循的安全规则,而后通过静态分析强制执行这些规则。之所以需要这些规则,是因为任意 C 或 C++代码本身无法自证安全。”

 

“这就是符合 ISO 标准的 C++代码,可以强制要求开发者通过分析器保障代码安全和更新。目前,微软 Visual Studio、Clang Tidy 等都提供类似的分析器实现选项。”

 

“C++正在积极进步,而且已经在实际应用当中发挥出良好的灵活性和性能表现。当前,各类项目中部署的 C++代码多达数十亿行。”

 

“所以无论是直接替换掉这些 C++代码,还是所谓让它们更加‘安全’,都会是一项艰巨的任务。如果没有分期分批、持之以恒的努力,大量不安全的 C 代码和陈旧 C++代码将‘永远’存在。纵观历史,在颠覆性革命出现惨烈失败之后,更温和的演进方式往往能够最终取得成功。”

 

参考链接:

https://www.theregister.com/2022/09/20/rust_microsoft_c/

https://devclass.com/2022/09/20/microsoft-azure-cto-on-c-c/

https://www.csoonline.com/article/2998952/sony-bmg-rootkit-scandal-10-years-later.html

https://news.ycombinator.com/item?id=32905885

https://www.reddit.com/r/programming/comments/xj3muf/mark_russinovich_azure_cto_its_time_to_halt/

2022-09-21 14:518562

评论 1 条评论

发布
用户头像
我们现在已经在 ISO C++中实现了可靠的完美类型与内存安全。

哪个版本的C++。
2022-09-21 19:16 · 广东
回复
没有更多了
发现更多内容

七夕情人节,程序员的表白方式简直太秀了!

程序员生活志

程序员 七夕

知识点:操作系统异常的分类

王坤祥

操作系统 异常

linux入门系列13--磁盘管理之RAID、LVM技术

黑马腾云

Linux centos raid lvm 磁盘挂载

「零代码」搭建简易招聘管理系统

Tony Wu

效率工具 SaaS 招聘管理 HRIS

Docker 最常用的镜像命令和容器命令

哈喽沃德先生

Docker 容器 微服务

追逐影子的人,最终只会是影子

小隐乐乐

java安全编码指南之:基础篇

程序那些事

Java 安全编码 安全编码指南

ARTS 挑战打卡第十二周(200727-200802)

老胡爱分享

ARTS 打卡计划

SpreadJS 纯前端表格控件应用案例:货运代理客户服务平台

葡萄城技术团队

英特尔大小核试水 将推出8+8+1架构酷睿处理器

E科讯

linux入门系列15--文件传输之vsftp服务

黑马腾云

Linux centos linux操作 linux运维

7. Jackson用树模型处理JSON是必备技能,不信你看

YourBatman

json Jackson ObjectMapper 树模型

百度联合发布全球最大中文自然语言处理数据共建计划“千言”

百度大脑

人工智能 百度 nlp 百度大脑

新晋“网红”Cat1 是什么

华为云开发者联盟

后端 物联网 华为云 无线通信 Cat.1

高效程序员的45个习惯:敏捷开发修炼之道(5)

石云升

敏捷开发 熵增 用代码沟通

LeetCode题解:20. 有效的括号,for循环replace,JavaScript,详细注释

Lee Chen

大前端 LeetCode

linux入门系列12--磁盘管理之分区、格式化与挂载

黑马腾云

Linux centos 编辑器 linux运维 vi/vim

Python实现一个计时功能的装饰器

王坤祥

Python 装饰器

ARTS 挑战打卡第十周(200713-200719)

老胡爱分享

ARTS 打卡计划

3.7亿条保单数据怎么分析?这个大数据平台有绝招

华为云开发者联盟

大数据 hadoop 数据湖 FusionInsight Kyligence

七夕节来啦!AI一键生成情诗,去发给你的女朋友吧!

华为云开发者联盟

AI 智能高效 华为云 modelarts 七夕

ARTS 挑战打卡第十一周(200720-200726)

老胡爱分享

ARTS 打卡计划

ARTS 挑战打卡第十三周(200803-200809)

老胡爱分享

ARTS 打卡计划

正向代理与反向代理

王坤祥

nginx 反向代理 代理 正向代理与反向代理 Proxy

linux入门系列11--Centos7网络服务管理

黑马腾云

Linux centos 网络配置 运维工程师

不想做经理的程序员

escray

学习 面试

惠普精灵家族助力IMC上海站,极致体验尽享电竞狂欢

E科讯

一行代码实现简易服务器并共享文件

王坤祥

Python 共享文件

linux入门系列14--ssh服务及主机远程管理

黑马腾云

Linux centos linux运维 红帽认证

13年毕业,用两年时间从外包走进互联网大厂!

小傅哥

成长 小傅哥 经历 工作 入职

【程序员自救指南】一个证书,让我哄好了小师妹

华为云开发者联盟

网络安全 浏览器 华为云 SSL证书 安全证书

Azure CTO呼吁不要使用 C/C++ 创建新项目,C++之父回应:你们这些高管就爱喜新厌旧_语言 & 开发_Tina_InfoQ精选文章