写点什么

微软正用 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:534682
用户头像
小智 让所有人认同的文字称不上表达

发布了 408 篇内容, 共 389.6 次阅读, 收获喜欢 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
回复
没有更多了
发现更多内容

有奖活动 | 大咖论道:一同畅聊鸿蒙生态

HarmonyOS开发者

HarmonyOS

10. 数据类型 - 元组详解

茶桁

Python 数据类型 tuple

让三驾马车奔腾:华为如何推动空间智能化发展?

脑极体

全屋智能

CMake中使用vcpkg

梦笔生花

探索式测试-用Scrum的套路做测试

大头

Scrum 敏捷测试 探索测试 敏捷迭代

代码随想录Day41 - 动态规划(三)

jjn0703

SpringBoot3进阶用法

Java 架构 springboot SpringBoot3

JVM内存管理--GC算法精解(五分钟教你终极算法---分代搜集算法)

java易二三

编程 程序员 计算机 科技 技术宅

erp系统都有哪几家,如何选择适合自己企业的erp系统?

优秀

ERP系统

并发中atomic BUG分享

FunTester

TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用

汀丶人工智能

人工智能 自然语言处理 知识蒸馏

Zebec Protocol ,不止于 Web3 世界的 “Paypal”

威廉META

企业轻量应用,云耀云服务器L实例能帮大忙!

YG科技

Zebec Protocol ,不止于 Web3 世界的 “Paypal”

股市老人

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio快速构建React完成点餐H5页面还原

小小白

腾讯云 Cloud Studio

适合自己企业的erp系统怎么选?这8条关键因素缺一不可!

优秀

ERP系统

Zebec Protocol ,不止于 Web3 世界的 “Paypal”

大瞿科技

Zebec Protocol ,不止于 Web3 世界的 “Paypal”

BlockChain先知

深入理解 HDFS(三):HRPC

冰心的小屋

hdfs RPC hadoop rpc

何时使用Elasticsearch而不是MySql

越长大越悲伤

MySQL elasticsearch

吴声年度演讲,关于Notion 的“模版”和 CLG |highlight

B Impact

k8s安装prometheus

tiandizhiguai

k8s Promethues

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio构建SpringSecurity权限框架

小鲍侃java

Java' spring、

AI融入管理软件,是否会是下一个“ERP时代”的前奏?

B Impact

挖掘数据价值,助力企业智能升级丨华为云华为云通用AI解决方案简评

YG科技

梳理日常开发涉及的负载均衡

WizInfo

负载均衡 网关

Zebec Protocol ,不止于 Web3 世界的 “Paypal”

鳄鱼视界

Zebec Protocol ,不止于 Web3 世界的 “Paypal”

西柚子

Go 注释

小万哥

Go 程序员 云原生 后端 开发

Programming abstractions in C阅读笔记:p76-p83

codists

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