- 主题:【转】微软正从 C/C++ 改用 Rust 来构建其基础设施软件
微软正从 C/C++ 改用 Rust 来构建其基础设施软件
云头条 今天
不管软件公司在工具和培训开发人员上面投入了多少资金,“C++就其核心而言不是一种安全的语言”,微软的云开发者代言人Ryan Levick在上个月的AllThingsOpen 虚拟会议上表示,当时他解释了为何微软正逐渐从C/C++改用Rust来构建其基础设施软件。微软还鼓励其他软件行业巨头考虑采取同样的做法。
他说:“我们使用的语言很古老,来自不同的年代,无法为我们提供防范种种漏洞的能力。C++不是一种内存安全的语言,没人会真的假装它是内存安全的语言。”
实际上,微软认为C++不再适合编写关键任务软件。业界迫切需要改用一种高性能的、内存安全的语言来完成底层系统工作。Levick表示,而如今市面上的最佳选择就是 Rust。
C/C++无法被修复
如今,C和C++是编写核心系统软件的首选语言。优点是速度快,代码与机器本身之间只隔一层汇编。
但是业界正被这些语言引起的各种内存相关的缺陷(许多缺陷是安全问题)搞得焦头烂额。Levick表示,现在,来自微软的通用漏洞披露(CVE)中70%是内存安全问题。他说:“几乎一直是这种情况,并没有减少的趋势。尽管我们付出了巨大的努力来解决这个问题,但这仍似乎司空见惯。”
鉴于修复这些没完没了的内存相关错误面临不断上升的成本,从财务角度来看,这(注:继续使用C和C++)不无道理。Levick表示,早在 2004 年,每个内存相关错误让业界花费250000美元,微软估计这个数字可能偏低。
当然,许多公司和开发人员在努力提升C++的安全性,虽然各自在某个方面很有效,但没有一个从整体上解决这个问题。
一种长期被奉行的做法是加强针对程序员的培训,以便编写更安全的代码。但是,“没有证据表明,对C和C++开发人员进行全面的培训实际上能卓有成效地解决这个问题”,Levick 说,他提到微软本身很注重培训内部开发人员的工作。
静态分析是被提到的另一种可能的解决方案。但是静态分析带来了太大的开销:它需要被连入到构建系统。Levick说:“所以存在不使用静态分析的诸多动因。如果静态分析默认情况下不启用,就毫无帮助。”
运行时检查也是如此:“想知道什么时候使用了运行时检查合约、什么时候没使用,这不可能或至少极其困难,”他说,而且它们也会带来操作上的开销。
业界的最大希望
为了应对这个内存相关错误问题,微软安全响应中心发起了“安全系统编程语言倡议”。该中心做了一些工作,专门用来提升C/C++的安全性。该中心还开发了Verona,这种新的编程语言是为安全低级编程开发的。但是这个项目策略的第三个部分(也是微软最寄予厚望的部分)旨在支持“业界最有希望直面处理这个问题。”
他说:“而我们认为那第三个部分就是Rust。”
从性能上看,Rust与C/C++不相上下,甚至可能更快一点。Rust 给开发人员带来了工作效率,拥有软件包管理和现代测试框架等功能。广大程序员因此而喜爱 Rust。
但是微软如此钟情Rust 的主要原因是,它是一种内存安全语言,只有极少的运行时检查。Rust 擅长构建正确的程序。大致说来,正确性是指编译器检查程序有无不安全操作,因而减少了运行时错误。不安全的关键字是个选项,但并不是默认的。不安全的 Rust 代码几乎总是一段更庞大的安全代码的子集。不安全的代码对于内存分配型任务(比如编写设备驱动程序)必不可少。但即使在这种情况下,内存中不安全的部分也在API后面被封装起来。
Levick表示,安全编程的这种能力不应该被轻视。实际上,它可以带来逾10倍的提升,因此值得投入心血。这主要是由于几乎所有的C/C++代码都需要接受安全审计、查找有无不安全行为,而用Rust编写的需要接受检查的不安全代码只是大多数代码库的一小部分。
虽然微软看好Rust,但Levick 承认微软核心开发人员短时间内不会停止使用C/C++。
他说:“我们微软有很多的C++代码,这些代码不会被抛弃。实际上,微软在继续用C++编写代码,会继续用它编写一段时间的代码。”
许多工具是围绕C/C++构建的。尤其是,微软的二进制代码现在几乎完全是在Microsoft Visual C++编译器(可生成 MSVC二进制代码)上构建的,而 Rust 依赖 LLVM。
不过可能最大的挑战在于文化层面的。Levick承认:“总有一些人就希望用他们熟悉的语言来完成工作。”
不过,业界似乎正在追捧Rust。AWS使用Rust,除了用于EC2的一些部分外,一方面还用于部署 Lambda Serverless 运行时环境。Facebook 已开始使用 Rust,苹果、谷歌、Dropbox 和 Cloudflare 也已开始使用它。
英文和视频
https://thenewstack.io/microsoft-rust-is-the-industrys-best-chance-at-safe-systems-programming/
--
FROM 125.35.124.*
完了,我们c++码农要失业了
【 在 z16166 (Netguy) 的大作中提到: 】
: 微软正从 C/C++ 改用 Rust 来构建其基础设施软件
: 云头条 今天
: 不管软件公司在工具和培训开发人员上面投入了多少资金,“C++就其核心而言不是一种安全的语言”,微软的云开发者代言人Ryan Levick在上个月的AllThingsOpen 虚拟会议上表示,当时他解释了为何微软正逐渐从C/C++改用Rust来构建其基础设施软件。微软还鼓励其他软件行业巨
: ...................
--
FROM 171.83.6.*
恩,我在02年左右做了几个决定,
一个是彻底抛弃ms的技术路线(ms的东西我从dos 3.3开始,从windows3.0开始,一个不
拉),all in linux。
另一个是彻底抛弃c++,只用c。同时考察了一众新语言,并决定all in python。
在12年左右我考虑过要不要抛弃python做一次技术栈升级,考察了go,scala,rust等等
一众新语言,没有找到满意的,保持不变。
2020年疫情期间all in rust。目前c的部分不少已经用rust替换了,python的部分再
议。
感觉上我好像英明神武的避开了好多天坑呐~
【 在 lwp (再也不跟人吵架了!!!) 的大作中提到: 】
: 完了,我们c++码农要失业了
--
FROM 101.81.86.*
厉害
【 在 lvsoft 的大作中提到: 】
:
: 恩,我在02年左右做了几个决定,
: 一个是彻底抛弃ms的技术路线(ms的东西我从dos 3.3开始,从windows3.0开始,一个不
: 拉),all in linux。
: 另一个是彻底抛弃c++,只用c。同时考察了一众新语言,并决定all in python。
:
: 在12年左右我考虑过要不要抛弃python做一次技术栈升级,考察了go,scala,rust等等
: 一众新语言,没有找到满意的,保持不变。
:
: 2020年疫情期间all in rust。目前c的部分不少已经用rust替换了,python的部分再
: 议。
:
: 感觉上我好像英明神武的避开了好多天坑呐~
:
: --
发自「今日水木 on 诺基亚3310」
--
FROM 117.39.250.*
rust药丸
【 在 z16166 (Netguy) 的大作中提到: 】
: 微软正从 C/C++ 改用 Rust 来构建其基础设施软件
: 云头条 今天
: 不管软件公司在工具和培训开发人员上面投入了多少资金,“C++就其核心而言不是一种安全的语言”,微软的云开发者代言人Ryan Levick在上个月的AllThingsOpen 虚拟会议上表示,当时他解释了为何微软正逐渐从C/C++改用Rust来构建其基础设施软件。微软还鼓励其他软件行业巨
: ...................
--
FROM 123.123.132.*
厉害
【 在 lvsoft 的大作中提到: 】
:
: 恩,我在02年左右做了几个决定,
: 一个是彻底抛弃ms的技术路线(ms的东西我从dos 3.3开始,从windows3.0开始,一个不
: 拉),all in linux。
: 另一个是彻底抛弃c++,只用c。同时考察了一众新语言,并决定all in python。
--
FROM 207.81.235.*
rust,go…能不能用类似c的语法设计啊。
【 在 z16166 的大作中提到: 】
:
: 微软正从 C/C++ 改用 Rust 来构建其基础设施软件
:
: 云头条 今天
:
: 不管软件公司在工具和培训开发人员上面投入了多少资金,“C++就其核心而言不是一种安全的语言”,微软的云开发者代言人Ryan Levick在上个月的AllThingsOpen 虚拟会议上
: ..................
发自「今日水木 on SunOS 5.6」
--
FROM 112.65.61.*
俺喜欢swift
【 在 lvsoft 的大作中提到: 】
: 恩,我在02年左右做了几个决定,
: 一个是彻底抛弃ms的技术路线(ms的东西我从dos 3.3开始,从windows3.0开始,一个不
: 拉),all in linux。
: ...................
--
FROM 162.156.156.*
好事情!
【 在 z16166 () 的大作中提到: 】
: 微软正从 C/C++ 改用 Rust 来构建其基础设施软件
:
: 云头条 今天
:
--
FROM 138.19.103.*
不会,rust贼麻烦,除了C++农没人想学…
【 在 lwp () 的大作中提到: 】
: 完了,我们c++码农要失业了
:
:
: 【 在 z16166 (Netguy) 的大作中提到: 】
--
FROM 138.19.103.*