- 主题:【转】微软正从 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.*
是宇宙第一IDE,也是调侃的
记得vs2015从sp2似做了大的改动,特别是模板编译。所以用vs 2019的编译器是最好了,守着2015不划算
【 在 GoGoRoger 的大作中提到: 】
: VS不是宇宙第一编译器吗?
: 发自「今日水木 on Mi Note 3」
--
FROM 125.35.124.*
媒体号根据微软那哥们的视频和英文帖子整理的,但多少是有点鼓吹的意味。
只是表明一个趋势,微软在win10上采用Rust肯定是还没规模的,它家为很多漏洞付出的money主要就在windows上
【 在 weign 的大作中提到: 】
: 这是rust社区的人编的吧 :)
:
--
FROM 125.35.124.*
安全和效率/方便本身就是有矛盾的
为了效率,必然是各种优化
为了安全,必然是各种检查
Rust试图在接近c/cpp效率的情况下做到安全, 而且尽可能把工作交给编译器而不是码农, 降低人工风险.
如果效率高于安全,那就用c/cpp甚至汇编好了
顶楼的like里面有人说提高码农智商比提高编译器智商容易.
提高个别码农在某段时间的水平容易, 但是提高大批码农在任何时间的水平难道也很容易?
【 在 Jacqueline 的大作中提到: 】
: 这些个现代语言遇到需要效率的场合全都得unsafe或者搞各种脏技巧,
: 写着写着就发现,我干嘛不用C++!
:
--
修改:z16166 FROM 123.115.134.*
FROM 123.115.134.*
有英文链接,可以自己看视频
MS肯定不会连office乃至整个windows都用Rust来写的
【 在 weign 的大作中提到: 】
: 假消息
:
--
FROM 123.115.134.*
如果一次性就能做到很好, 为什么要选择慢慢修的路走?
【 在 iMx 的大作中提到: 】
: 慢慢修肯定越来越安全,如果能逐级改变就好了
:
--
FROM 123.115.134.*
并不是全都用Rust,只是安全性要求高的特定场景吧,就是被人挖了无数漏洞、付了不少钱的地方用Rust
即便搞,也需要很长很长时间
【 在 tazz 的大作中提到: 】
: 微软自己sb,放弃了c++改推c#
: 导致win平台上,几乎没有优秀的c++开发者和库
: 现在又想换语言了,目测还是坑开发者
--
FROM 125.35.123.*