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

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

时间:2022-09-22 22:56:26浏览次数:92  
标签:微软 高管 C++ 安全 Russinovich Azure Rust

Azure CTO 呼吁不要使用 C/C++ 创建新项目,C++ 之父回应:你们这些高管就爱喜新厌旧 投递人 itwriter 发布于 2022-09-21 20:44 评论(0) 有661人阅读 原文链接 [收藏] « »

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

11 2     来自: www.infoq.cn    

标签:微软,高管,C++,安全,Russinovich,Azure,Rust
From: https://www.cnblogs.com/sexintercourse/p/16721133.html

相关文章

  • C++ 第44课判断最大公约数
    //枚举#include<iostream>usingnamespacestd;intmain(){ intn; cin>>n; inta[n],i; for(intj=1;j<=n;j++){ cin>>a[j]; if(a[j]<i){i......
  • C++排序程序
      今天,有点感冒。粘贴个图片,有空再写代码。   ......
  • 【代码片段】Qt6.2.4 C++ 执行CMD命令
    参考https://blog.csdn.net/vample/article/details/78872587https://blog.csdn.net/liuyukuan/article/details/5974517环境环境版本windows10QT6.2.......
  • 【代码片段】Qt6.2.4 C++ 获取目录与排除指定文件夹
    参考https://www.bilibili.com/video/BV14t411b7EL环境环境版本windows10QT6.2.4QtCreator8.0.1(Community)qmake代码QStringphpD......
  • Dev C++中窗口输出中文问题解决
    1、window+R+regedit调出注册表  2、点击Dec_Dev-Cpp_ConsolePauser.exe 3、鼠标左键双击“CodePage”,弹出设置页面。选择“十进制”,输入65001  4、右键点......
  • 07(C++二级)
    1.指向数组的指针     int(*P)[10]     的初始化......
  • C/C++ 使用四种方法交换两个数(包括不使用第三个变量)
    #include<iostream>#include<string>#include<windows.h>usingnamespacestd;//方式一使用指针voidswap1(int*a,int*b){//指针作为函数的参数intt......
  • C++自定义的工具函数
    my_function.h1#pragmaonce2#include<iostream>3#include<cstdarg>4#include<list>5#include<vector>6#include<bitset>7#include<c......
  • UEC++编程规范
    UEC++中类的命名规范Axxx继承自AActorUxxx继承自UObjectFxxx原生C++Ixxx接口类Sxxx为slate 枚举的定义:1.加反射宏UENUM()2.自定义enumclassECustomColorType:......
  • C++ void类型指针
    void  =>空类型void*=>空类型指针,只存储地址的值,丢失类型,无法访问,要访问其值,我们必须对这个指针做出正确的类型转换,然后再间接引用指针。所有其它类型的指针都可以......