微软解释为什么 Rust 是系统编程的最佳选择

2019年07月24日

上周,MSRC(微软安全响应中心)透露出拥抱 Rust 的打算,随后他们将这个话题扩展为一个系列,进一步阐述了使用安全的系统编程语言的的必要性,以及选择 Rust 的原因。

在该系列最新一篇文章中,MSRC 团队首席云开发布道师 Ryan Levick 解释了为什么他们认为 Rust 编程语言目前是业界采用的最佳选择,不仅仅是因为它能够以内存安全的方式编写系统级程序。

“首先,已经有很多出色的内存安全语言在微软内外广泛使用,包括 .NET 语言(像是 C# 或 F#)和其他语言(例如 Swift、Go 和 Python)。我们鼓励目前使用 C 或 C++ 的人将其中任意一种语言纳入考虑。不过现在谈论的是对安全的系统编程语言的需求,此类工作负载需要 C、C++ 和 Rust 能够提供的速度和可预测的性能。 通过垃圾回收实现内存安全的语言不是系统编程的理想选择,因为它们的运行时间会导致不可预测的性能和不必要的成本。”

性能和控制

Levick 指出,最好先考虑一下无法从 C 和 C++ 放弃的东西——性能和控制,就能更清楚地明白 Rust 为什么是一个好的选择。像 C 和 C++ 一样,Rust 有一个最小的可选“运行时”。Rust 的标准库同样依赖于 libc,但标准库也是可选的,因此在没有操作系统的平台上运行也是可能的。

仍然像 C 和 C++ 一样,Rust 为程序员在何时分配内存以及分配内存的多少上提供了精细的控制,使程序员能够非常清楚地知道程序每次运行时的确切执行方式。在原始速度、控制和可预测性方面,这对于性能来说意味着什么?那就是,“Rust、C 和 C++ 可以用类似的术语来思考”。

安全

Rust 与 C 和 C++ 的区别在于其强大的安全保障,某种程度上来说 Rust 完全是内存安全(memory safe)的。正如之前那篇文章提到的,微软大约 70% 的安全问题是内存安全问题。如果这些软件用 Rust 编写,那么这 70% 的安全问题很可能就不存在。

在系统编程中,有时程序员必须执行无法静态验证为安全的操作。Rust 为程序员提供了将这些操作封装在安全抽象中的工具,这意味着曾经降级为代码注释或约定的东西可以由 Rust 编译器静态强制执行。

不仅仅是性能与安全

Rust 最初引起 MSRC 的兴趣正是由于上述性能与安全方面的特性。但它的的魅力不止于此,已经有其他微软团队开始采用 Rust,主要出于以下原因:

  • 根据微软内部调查,采用它的最主要原因是“精密性”(correctness)——“if it compiles, then it works”。
  • Rust 静态地强制执行程序的许多属性,已经远超内存安全性,还包括空指针安全性和数据争用安全性(即没有来自两个或多个线程的一块内存的不同步访问)。
  • Rust 的丰富类型系统使编写富有表现力的程序成为可能。 具有相关数据的枚举和强大的 trait 系统等概念进一步强化了 Rust 的目标,即尽可能使程序无错误。
  • Rust 现有的社区对该语言有很大益处。虽然 Rust 仍然是一种年轻语言,但它拥有一个健康的生态系统,既能够促进开源社区发展强大,又能够支持生产用户。

Levick 表示有足够的理由相信 Rust 会有一个光明的未来,“虽然现在大规模采用 Rust 还为时过早,但早期采用 Rust 通常是非常积极且正面的”。他们相信 Rust 在编写安全的系统软件时会改变游戏规则。Rust 提供编写底层系统所需的性能和控制,同时使软件开发人员能够编写更健壮、安全的程序。

不过,MSRC 在研究 Rust 时发现了一些问题,其中包括如何规范 Rust 的“不安全”(unsafe)超集的使用,缺乏与 C++ 的一流互操作性,以及与现有 Microsoft 工具的互操作性。这确实对微软采用 Rust 提出了挑战,但 MSRC 还是满怀期待:“我们对这些可能性感到兴奋。 虽然还有许多关于 Rust 如何适应整个 Microsoft 工程的问题需要弄清楚,但我们鼓励其他人一同加入,认真考虑这门语言,以满足他们的系统编程需求。”

MSRC 博客原文:https://msrc-blog.microsoft.com/2019/07/22/why-rust-for-safe-systems-programming/

展开阅读全文
46 收藏
分享
加载中
精彩评论
微软想借 rust 跟 google 起腻吧?
2019-07-24 08:49
23
举报
这下好了,有个一个好干爹,日子飞黄腾达了要
2019-07-24 08:40
9
举报
mozilla基金会是一个公益组织.我们的使命是确保互联网是一个全球性的公共资源,开放且人人可用。我们追求一个真正以人为本的互联网,每个人都被充分赋权,安全而独立,能塑造出个性的体验. 被微软收了那还是mozilla吗
2019-07-24 09:43
8
举报
要有丰富的配套生态,以及入坑的动力。比如 dart,如果不是 flutter 跨平台以及其他特性,我估计现在没太多人关注它
2019-07-24 08:52
7
举报
我觉得dart设计的很一般,远远不如 ts
2019-07-24 09:23
6
举报
最新评论 (54)
你们以为Rust只是“另一种新语言”? too simple, too naive, Rust是革命性的!会开创一个流派。
https://zhuanlan.zhihu.com/p/90612241
2019-11-14 10:47
0
回复
举报
巨硬只要有vb就够了
2019-07-25 08:23
0
回复
举报
dlang更好一些
2019-07-25 07:43
0
回复
举报
Rust读音不好听:“拉屎忑”
2019-07-25 07:11
2
回复
举报
意思更烂, 铁锈,病毒
2019-07-29 09:12
0
回复
举报
nim最苦B了,没有大神顶。
2019-07-25 01:30
0
回复
举报
直说 Visual Rust 或者 Rust.Net 或者 Rust# 什么时候发行吧,我学习的冲动已经抑制不住了
2019-07-24 23:46
4
回复
举报
有了微软插足,可以放心的选go了!微软涉足的基本没个好下场
2019-07-24 21:53
2
回复
举报
微软搞c++这么多年了,c++不活得挺好的?
2019-07-25 00:32
2
回复
举报
巨硬先后拥抱了linux,chrome和rust等一堆开源热门项目,后宫搞那么大……巨硬确定自己巨硬?
2019-07-24 21:31
0
回复
举报
Rust 是非常安全谨慎系统级语言,但不是万能的语言,Rust 不适合用于构建 C++ 不适合的应用,这个道理很好理解,写 Web 服务还是需要 Java / Asp.Net / DLang 这些可快速构建项目具有生产力和可维护性的架构,至于什么 golang / nodejs 我觉得小打小闹的东西,当然 nodejs 有非常好的发挥空间就是前后端分离场景(服务端渲染),golang 可以说是适合于 Python 对比替换一些运维工具吧,比如 Docker / Gogs 之类的 golang 作品都是站在运维的角度在做项目。
2019-07-24 18:33
1
回复
举报
说得有一些道理,但Gogs是工程支撑工具,不是运维工具
2019-07-25 08:03
1
回复
举报
头一次听说nodejs非常好的发挥空间是前后端分离场景。。。哈哈哈
2019-07-25 09:15
1
回复
举报
等你真的用的时候,发现我草,rust万能的,开发一套居然可以生成安卓应用,windows应用,linux应用!还可以开发网站,速度都是刚刚的!
2019-07-26 08:09
1
回复
举报
dlang 抱谁的大腿啊
2019-07-24 15:07
1
回复
举报
facebook
2019-07-25 00:28
0
回复
举报
Facebook也拥抱Rust,推出了Libra
2019-07-25 06:52
2
回复
举报
微软Azure IOT早就使用Rust开发了,Actix作者就在微软!
2019-07-25 06:58
2
回复
举报
自立自强。
2019-07-25 00:51
0
回复
举报
更多评论
54 评论
46 收藏
分享
返回顶部
顶部