在本系列文章中,咱们探讨了主动采起一些措施消除一类漏洞的必要性,并介绍了在 Microsoft 的代码中发现的一些内存安全问题的例子,这些问题能够用其余语言避免。如今咱们来看看为何咱们认为 Rust 是目前可用的 C 和 C++ 最好的替代品。程序员
虽然,已经有许多很是好用的内存安全语言,普遍应用于微软内外,包括 .NET 语言(如 C# 和 F#)和其余语言(如 Swift, Go, and Python)。 咱们鼓励正在使用 C 或 C++ 的人考虑使用这些语言中的一种。然而,咱们正在讨论对安全的系统编程语言的需求(即,能够构建其余软件运行的系统的语言,如OS内核)。此类工做负载须要 C,C ++ 和 Rust 提供的速度和可预测的性能。经过垃圾回收实现内存安全的语言不是系统编程的理想选择,由于它们的运行时会致使不可预测的性能和没必要要的开销。编程
在考虑为何Rust是一个很好的替代方案时,最好考虑一下咱们不能由于从 C 或 C++ 转换而放弃什么——即性能和控制。 Rust,就像 C 和 C++ 同样,有一个最小的和可选的“运行时”。Rust 的标准库依赖于 libc 来支持它的平台,就像 C 和 C++ 那样,可是标准库也是可选的,因此在没有操做系统的平台上也是能够运行的。安全
Rust 与 C 和 C++ 同样,也为程序员提供了对什么时候分配内存以及分配多少内存的细粒度控制,从而使程序员可以很是清楚地了解程序运行时将如何执行。这对于原始性能,控制和可预测性的性能意味着什么,Rust,C 和 C ++能够用相似的术语来思考。编程语言
Rust 与 C 和 C++ 的区别在于其强大的安全保障。除非经过使用“unsafe”关键字明确选择使用,不然Rust彻底是内存安全的,这意味着咱们在上一篇文章中说明的问题是没法表达的。 在之后的文章中,咱们将从新讨论这些示例,以了解 Rust如何在不添加任何运行时开销的状况下防止这些问题。正如咱们所看到的,MSRC 分配给 CVE 的大约70%的安全问题是内存安全问题。 这意味着若是软件是用 Rust 编写的,那么70%的安全问题极可能已经消除。咱们并非惟一一家报道这一发现的公司。工具
在系统编程中,有时程序员必须执行没法静态验证为安全的操做。Rust 为程序员提供了将这些操做包装在安全抽象的工具中,这意味着Rust编译器能够静态地强制执行那些曾经属于代码注释或约定的操做。必须显式地标记内存不安全操做,从而极大地减小了安全专家必须仔细检查内存安全漏洞的面积。性能
虽然 Rust 最初由于上述缘由引发了 MSRC 的兴趣,可是微软的其余团队已经由于其余缘由开始采用 Rust:学习
根据一项内部调查,采用的首要缘由是“正确性”——这是 Rust 安全保障的延伸,能够实现“if it compiles, then it works”的格言。
Rust 静态地强制执行程序的许多特性,这些特性超出了内存安范围,包括空指针安全性和数据竞争安全性(即,不容许从两个或多个线程非同步地访问一块内存)。
微软的许多团队都发现 Rust 的丰富类型系统使编写富有表现力的程序成为可能。具备相关数据的枚举和强大的特征系统等概念进一步强化了 Rust 的目标,即尽量使程序减小 BUG。
Rust 现有的社区对该语言有巨大的好处。语言的大部分功能来自于其核心以外的库、工具和学习资料。 Rust 仍然是一个年轻的语言,可是它拥有一个健康的生态系统,拥有一个活跃的、开放的编译器和语言的开发过程,而且它显示出了强大的促进开源社区和支持用户生产力的能力。这给了咱们更多的理由相信该语言有一个光明的将来。
全部这些都解释了Rust过去四年在Stack Overflow最受欢迎的语言列表中高居榜首的记录。 虽然如今说采用 Rust 的规模和微软的工程组织同样大还为时过早,但早期采用 Rust 一般是很是积极的。操作系统
咱们相信 Rust 会改变编写安全的系统软件的游戏规则。Rust 提供编写低级系统所需的性能和控制,同时容许软件开发人员编写健壮、安全的程序。线程
在研究 Rust 的过程当中,咱们发现了一些问题,这些问题一直困扰着咱们。其中一些问题包括如何规范Rust的“不安全”超集的使用,缺少与 C ++ 一流的互操做性,以及与现有Microsoft工具的互操做性。 咱们将在之后的博客中讨论其中的许多问题,由于它们对微软的大规模采用构成了挑战,咱们但愿让 Rust 和更普遍的软件社区参与进来,帮助咱们找到适合全部人的解决方案。翻译
但咱们对这些可能性感到兴奋。虽然还有许多问题有待解决,好比 Rust 如何融入微软的整个工程设计中,可是咱们鼓励其余人加入咱们的行列,认真研究这种语言,以知足他们的系统编程需求。
Ryan Levick, Principal Cloud Developer Advocate
本文翻译于:Why Rust for safe systems programming