17611538698
webmaster@21cto.com

Azure CTO Mark 呼吁弃用 C/C++,C++之父回怼

资讯 0 819 2022-09-23 11:15:32
导读:微软 Azure 首席技术官 Mark Russinovich 昨天在社交媒体上表示,C 和 C++ 不应该再用来开发新项目,它们应当被废弃。

微软 Azure 首席技术官 Mark Russinovich 昨天表示,C 和 C++ 不安全,不应该再应用于新项目(开发):

“现在是时候停止使用 C/C++ 启动任何新项目了,把 Rust 用于那些需要非 GC 语言的场景。为了安全性和可靠性,业界应该宣布C/C++语言已经被弃用,”

这是 Mark Russinoich 在 Twitter 上所说的言论,注意他表达的是个人观点,而不是微软公司官方又搞出了什么新政策。

图片

 Mark Russinoich在推特上的帖子

Russinovich 的此番言论值得我们开发者们注意,因为现在微软的核心产品序列,比如 Windows、Office 和 SQL Server等,这些软件产品大多数用的都是 C 和 C++ 语言编写。广大的开源阵营的 Linux 系统也是如此,Linux 在微软 Azure 云平台上得到了广泛的部署与实际应用。

而且从各个方面显示,很快就有用 Rust 编写的部分 Linux 内核即将发布出来。

我们从最近的Linux开源峰会的报告中,包括 Linux 创建者Linus 给记者 Steven Vaughan-Nichols 的一封电子邮件来看,他这样说道:“除非发生特奇怪的事情,它 (Rust)将进入 6.1。”

相关阅读:Linux 大佬讨论努力将 Rust 引入内核

这不是微软第一次支持 Rust 语言了,这家公司已经将Rust语言作为提高软件安全性的一种重要手段。

3年前,也就是2019年,微软安全响应中心 (MSRC)表示“我们认为 Rust 代表了当前可用的 C 和 C++ 的最佳替代品。” MSRC 团队还表示道,“MSRC 分配 CVE 的安全问题中约有 70% 是内存安全问题。这表示,如果该软件是用 Rust 编写的,那么 70% 的这些安全问题很可能会被消灭掉。”内存安全技术确保当应用程序中的代码从内存中读取数据时,该数据要完整有效。

但这种机制有时也会失效,包括如下几个原因:当编程语言定义了占用特定内存空间的变量。如果为变量分配的内存太小,代码可能会超出内容上限,特别是将随机数据注入应用程序。同样如果代码试图读取内存中已被释放数据,而程序中想用它与其它数据计算,其结果是不可预测的,极易导致崩溃。另一个问题是多线程应用程序有多个线程写入同一个内存区域,而没有使用防止冲突的“锁”。

大多数业务应用程序都是用 JavaScript、Java、Python 和 C# 等高级语言编写,它们比 C 或 C++ 要安全得多。这些编程语言虽然不适合系统编程,但运行时或内存垃圾收集器 (GC) 的开销和不可预测性却是系统级编程不可接受的。

Rust 是专为系统编程而设计的,并且还具有基于编译器强制值所有权的概念,它有着较好的内存安全功能。

Rust 也可以设置为非内存安全。开发者使用unsafe 关键字就可以取消Rust 引用原始点,然后调用不安全函数、写入可变静态变量等操作。有时,程序中这种操作也是必要的,但是Rust会将这些代码隔离到特定的标记块中,保证系统隔离性,因此 Rust 在这方面相当于改进了 C 或 C++。

尽管有很多的声音支持 Rust,但在Redmonk 语言排行榜等权威调查中,Rust语言仍然落后于 C 和 C++,C++排名第7 ,C 排名第10 , 而Rust目前排名第19 。

图片

为什么 Rust 仍然不受到用户追捧?问题包括 Rust 开发人员短缺、工具链不成熟、学习语言的门槛很高,还有与现有代码的互操作性等等原因。

对于Mark Russinovich 的言论,C++ 的创建者 Bjarne Stroustrup 今天以迅雷不及掩耳盗铃之势进行了如下回应:

“人们总是迷恋那些看似能让自己生活更轻松的新事物,这点在企业高管上尤其明显。此外支持新事物远比解决旧工具的已知问题更令人激动。不幸的是,新生语言通常需要很多年时间和重大努力才能在其应用领域与成熟语言相匹配。但大多数开发者看不到这一点,有一些人喜欢发表片面评论。”

Bjarne Stroustru 还指出:”在许多情况下,安全性确实至关重要,这也是我们多年来一直致力于提高 C++ 安全性的原因。我们现在已经在 ISO C++ 中实现了可靠类型与内存安全。具体来讲,我们消除了空指针问题,能够捕捉范围错误,消除了数据争用等。此外需加留意的是,包括 Rust 在内,任何一种号称安全的编程语言都存在着不安全代码的漏洞。“

Bjarne Stroustru 还补充道:“直接替换 C++ 代码,或者让它们变得更加安全,这是一项异常艰巨的任务,需要逐步循序渐地才能做到这一点。否则大量不安全的 C++ 代码将会永恒地存在。”

各位怎么看?欢迎评论区留言~

作者:场长

评论