QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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:518632

评论 1 条评论

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

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

原生APP外包开发流程

北京木奇移动技术有限公司

APP开发 软件外包公司 APP外包公司

NFT市场回暖:蓝筹项目成为复苏主力,空投潮助推价格上涨

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

膜拜!阿里自爆十万字Java面试手抄本,脉脉一周狂转50w/次

程序员高级码农

Java 编程 程序员 java面试 Java面试题

集成自然语言理解服务,让应用 “听得懂人话”

不在线第一只蜗牛

人工智能

鸿蒙开发之不申请权限写入图片到相册

猫林老师

鸿蒙 HarmonyOS 鸿蒙应用开发 鸿蒙原生应用开发 HarmonyOS NEXT

微店API接口深度解析:如何高效获取商品详情及简短代码示例

代码忍者

微店商品详情API接口

Java程序员如何高效学习Spring Cloud Alibaba?

了不起的程序猿

微服务 架构师 SpringCloud java面试 springcloudAlibaba

Microsoft Remote Desktop for Mac:跨平台远程桌面连接利器

小玖_苹果Mac软件

淘宝图片搜索接口(Taobao.item_search_img)

tbapi

淘宝API接口 淘宝拍立淘接口 淘宝图片搜索商品接口

考核数据管理系统(源码+文档+部署+讲解)

深圳亥时科技

如何在 Apifox 中发布多语言的 API 文档?

Apifox

前端 接口文档 swagger API接口文档 API 文档

面试官:DNS解析都整不明白,敢说你懂网络?我:嘤嘤嘤!

EquatorCoco

面试

Java程序员如何高效学习分布式系统设计?

了不起的程序猿

后端 分布式系统 架构师 分布式架构 java面试

Microsoft Office LTSC 2021 for Mac:稳定高效的办公软件套件

小玖_苹果Mac软件

【论文速读】| FirmRCA:面向 ARM 嵌入式固件的后模糊测试分析,并实现高效的基于事件的故障定位

云起无垠

webGL外包开发的技术难点

北京木奇移动技术有限公司

数字孪生 软件外包公司 webgl开发

深入了解京东API接口:高效获取商品SKU与价格信息

代码忍者

京东API接口

接口自动化测试中切换多套被测环境方法

测试人

软件测试

鸿蒙开发之无须申请权限访问相册图片

猫林老师

鸿蒙 HarmonyOS 鸿蒙应用开发 鸿蒙原生应用开发 HarmonyOS NEXT

阿里架构师耗时一个月肝出这份26W字Java面试手册,在Github标星30K+

架构师之道

编程 计算机 java面试

闪迪品牌预告全新企业品牌形象,宣布即将焕新启程

Geek_2d6073

MaxCompute Bloomfilter index在蚂蚁安全溯源场景大规模点查询的最佳实践

阿里云大数据AI技术

大数据 数据处理 布隆过滤器 数据检索 MaxCompute

霸榜GitHub周榜!Java面试福音,逼自己一周背完上岸大厂!

程序员高级码农

Java 编程 程序员 java面试 Java面试题

Java程序员的编程能力要如何进阶?

了不起的程序猿

程序员 后端 架构师 java面试 Java进阶

原生APP外包开发的费用

北京木奇移动技术有限公司

软件外包公司 APP外包公司 APP外包开发

阿里巴巴1688 API接口深度解析:如何高效获取商品详情与关键词搜索商品数据

代码忍者

1688API接口

SD云端部署哪个好?适合SD部署的桌面云工作站

青椒云桌面

云桌面 sd云端部署 云工作站

实战技巧 DevEco Profiler 性能调优 Time

万少

鸿蒙

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