写点什么

微软正用 Rust 重写 Windows 组件

  • 2019-11-13
  • 本文字数:1796 字

    阅读完需:约 6 分钟

微软正用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 编译器提供的内存和数据安全保证给了开发人员更大的信心,开发人员花在调试琐碎问题上的事件更少了。



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 代码。



除了出色的文档外,还有诸如 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 的未来,似乎前途光明。


2019-11-13 13:534673
用户头像
小智 让所有人认同的文字称不上表达

发布了 408 篇内容, 共 388.7 次阅读, 收获喜欢 1980 次。

关注

评论 2 条评论

发布
用户头像
从18年开始Rust团队也加大了语言推广的力度,毕竟一门语言要有人用才有价值,Rust团队推出的《The Rust Programming Language》是不错的了解上手Rust的书籍,前几天我也刚好开始在虎牙直播打卡读这本书,欢迎大家一起加入,一起推动技术普及https://v.huya.com/play/233318972.html
2019-11-14 13:25
回复
用户头像
无论如何Rust都是值得学习的,它的设计很新颖,大胆的尝试了一些新东西,我们太需要点新的尝试了
2019-11-14 12:25
回复
没有更多了
发现更多内容

软件要想做的好,测试必定少不了

华为云开发者联盟

测试 开发 华为云 企业号十月 PK 榜

JUC 浅析(四)

Andy

KubeVela 插件指南:轻松扩展你的平台专属能力

阿里巴巴云原生

阿里云 开源 容器 云原生 KubeVela

腾讯前端经典react面试题汇总

beifeng1996

React

每日一题之请描述Vue组件渲染流程

bb_xiaxia1998

Vue

软件测试丨接口测试该怎么做?持证上岗的Charles,可以帮你做什么?

测试人

软件测试 接口测试 charles 测试开发

从React源码来学hooks是不是更香呢

goClient1992

React

react源码中的协调与调度

flyzz177

React

《一条select 语句在TiDB Server层都发生了什么》

TiDB 社区干货传送门

管理与运维

react源码中的生命周期和事件系统

flyzz177

React

TiDB 生产集群与加密通讯TLS的辛酸苦辣 - 开启篇

TiDB 社区干货传送门

集群管理 管理与运维

问:React的useState和setState到底是同步还是异步呢?

beifeng1996

React

一次TiDB GC阻塞引发的性能问题分析

TiDB 社区干货传送门

性能调优 管理与运维 故障排查/诊断

「Go工具箱」go语言csrf库的使用方式和实现原理

Go学堂

golang 开源 程序员 CSRF 10月月更

前端面试指南之JS面试题总结

loveX001

JavaScript

什么是分布式数据库?我不信,看完这篇你还不懂!

TiDB 社区干货传送门

数据库架构设计 数据库前沿趋势

从React源码角度看useCallback,useMemo,useContext

goClient1992

React

嵌入式 Linux 入门(七、Linux 下的环境变量)

矜辰所致

Linux 环境变量 10月月更

阿里是如何使用分布式架构的?阿里内部学习手册分享

Java全栈架构师

架构 分布式 微服务 后端 高并发

问:你是如何进行react状态管理方案选择的?

beifeng1996

React

JVM 组成结构分析

Andy

【web 开发基础】PHP 循环结构之 for 循环 -PHP 快速入门 (19)

迷彩

for循环 10月月更 web开发基础 PHP基础

前端面试中小型公司都考些什么

loveX001

JavaScript

深入理解JS作用域链与执行上下文

loveX001

JavaScript

JVM 浅析(二)

Andy

一面高频vue面试题

bb_xiaxia1998

Vue

每日一题之Vue的异步更新实现原理是怎样的?

bb_xiaxia1998

Vue

手把手教你从安装CentOS7.4镜像开始,搭建IoT视频监控系统

华为云开发者联盟

后端 开发 华为云 企业号十月 PK 榜

在世界舞台MBBF一骑绝尘:永远更快一步的北京5G是怎样炼成的?

脑极体

云小课|MRS基础原理之Hudi介绍

华为云开发者联盟

大数据 华为云 企业号十月 PK 榜

区块链≠绿色?波卡或成Web3“生态环保”标杆

One Block Community

区块链 环保 波卡生态

微软正用Rust重写Windows组件_编程语言_小智_InfoQ精选文章