挥别C/C++,微软开始用Rust重写Windows组件

挥别C/C++,微软开始用Rust重写Windows组件

Rust是过去一年时间里,热度持续增加的一门新兴语言。2006年,“职业编程语言工程师” Graydon Hoare设计了这门语言,它的设计初衷是可以提供高的开发效率,代码容易维护,性能还能与 C/C++ 媲美,还得保证安全性的一门语言。

虽然历史发展的规律告诉我们,为了解决一门语言的问题而创造的新语言,最终也将带来新的问题。但就目前来看,Rust上述的这些特性在其迅猛的发展势头中得到了体现。

今年2月初,微软一次演讲中提到,70%的安全漏洞都是内存安全问题。此后7月份,微软安全响应中心(MSRC)发文表示:微软需要更安全的系统编程语言。此后的系列文章中,微软对自己为什么认为 Rust 语言目前是业界的最佳选择做了阐述。而在近日,微软透露了使用 Rust 代替 C/C++ 编写 Windows 组件的实验感受,工程师们直言使用Rust语言的感受妙不可言。

我的任务是对 Windows 代码库的一个低级别系统组件进行实验性重写(目前不能透露是哪个组件),虽然这个项目还没有完成,但总的来说,在 Rust 方面的试验体验是非常好(generally positive)。新的组件或现有的具有干净接口的组件移植到 Rust 是很容易的。

爽翻了的开发体验

对于习惯于编写复杂系统的c++开发人员来说,使用Rust作为开发语言就像是呼吸一股清新的空气。Rust编译器提供的内存和数据安全保证给了开发人员更大的信心,开发人员花在调试琐碎问题上的事件更少了。

挥别C/C++,微软开始用Rust重写Windows组件

Rust的编译器的警告和错误消息编写得非常好,从而使Rust新手程序员可以快速识别并解决代码中的问题。VSCode已经具有有用的扩展(RLS),可提供了智能感知建议和语法高亮显示。另外,Cargo构建工具在测试、文档生成和自动格式化方面提供了非常有用的功能。

学习曲线

Rust具有大量的在线文档和非常有用的编译器错误消息,对于常年使用C++的开发人员来说,Rust的学习曲线非常简单。此外,Rust还有专门针对C/ C++系统工程师的教程。Facebook的Jeremy Fitzhardinge在RustConf 2019年的演讲中指出,他发现有经验的C/ C++开发人员在大约四周内就可以熟练地使用Rust,熟练使用只需要八周。

微软的开发者也表示,自己参加了一年一度的微软内部“One Week”黑客马拉松,同行的有一个经验丰富的Rust开发者和一个完全的Rust新手开发者。三天之内,Rust的新手开发人员已经写了超过1000行惯用的Rust代码。

挥别C/C++,微软开始用Rust重写Windows组件

除了出色的文档外,还有诸如Clippy之类的有用工具,使经验丰富的C++开发人员可以直接使用Rust进行编码,而无需那些具有Rust经验的人直接的帮助。

随着微软内部扩大对Rust的使用,工程师们相信为包含Rust代码的任何PR创建RustReviewers组都是明智的。无论特定的问题领域是什么,都将有助于不同团队的新手从Rust专家那里获得反馈。

通常,新组件或具有干净接口的现有组件最容易移植到Rust。微软工程师们在重写的组件则充满了挑战,因为从一层到另一层泄漏了许多抽象,需要一些初步的重构才能取得进展。

安全

为了从Rust获得所需的安全保证,必须围绕使用unsafe关键字放置严格的准则。对FFI函数的任何调用都应在包装函数中进行,该包装函数围绕它提供安全的抽象。同样,必须使用unsafe关键字的任何其他代码都应具有提供安全抽象的包装函数或结构。

实际上,除了FFI边界之外,只有非常基本的协议处理才需要unsafe关键词。在这种情况下,编写一些通用的unsafe代码很容易,这些代码可以进行全面的单元测试,并可以在各种情况下使用,从而使代码比C ++更加安全。写惯了Rust代码后,你会发现写C ++更加令人崩溃,因为你不能依靠编译器来确保内存安全。

除了确保安全性之外,Rust拥有一套内部的编码标准帮助新开发人员充分利用语言。错误处理、日志记录、锁定和其他特定于语言的问题的最佳实践将更快地获得更高质量的代码。

期望的功能和Rust社区

微软工程师在博客中表示,考虑到Rust相对较年轻,它仍然缺少一些非常适合微软开发的语言特性。安全转换、对 C 的安全支持、准确的分配以及对大规模单元测试的支持,是微软庞大的代码测试基础设施所需要的。

Rust 在单片机和诸如内核和虚拟机监控程序等低级系统上有着光明的前景,在这些系统中,一旦成熟,该语言的安全性第一特性将使其具有相当大的吸引力。而目前,在单片机市场上,主要是英特尔在支持和推动,它正在努力使 Rust 达到与 C 相同的功能。

随着Facebook使用Rust构建Libra,微软用Rust重写Windows组件,Rust的未来,似乎前途光明。

您可能还会对下面的文章感兴趣: