【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论 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
回复
没有更多了
发现更多内容

SSM框架整合过程总结,书籍+视频+学习笔记+技能提升资源库

Java 程序员 后端

super与this在成员变量,成员方法,构造方法方面的作用

Java 程序员 后端

synchronized 中的 4 个优化,你知道几个?,rocketmq教程教程

Java 程序员 后端

VBA常用语法,操作系统原理与linux实践教程申丰山

Java 程序员 后端

Zookeeper原理篇-Zookeeper启动流程分析,从底层开始带你了解并发编程

Java 程序员 后端

springcloud(三)网关zuul,mybatis工作流程面试

Java 程序员 后端

Spring学习总结:IOC基础(1),java反射面试题及答案

Java 程序员 后端

tomcat优化——并发和Tomcat线程数,mysql集群原理详解

Java 程序员 后端

VIVO一面竟然翻车,含泪整理了这些Java面经,看完我悟了

Java 程序员 后端

Spring面试题整理,springboot视频教程谁的好

Java 程序员 后端

this与super关键字(阿里巴巴面试竟然问道这个了…,ubuntulinux操作系统实用教程

Java 程序员 后端

uniapp props、$ref、$emit,如何保证高可用

Java 程序员 后端

YYDS,瞬间秒杀全网,这套Java面试笔记可以解决90,kafka基础架构消费模式

Java 程序员 后端

SQL:我为什么慢你心里没数吗?,java面试说我基础太差

Java 程序员 后端

ThreadLocal内存泄漏分析与解决方案,java语言程序设计基础篇答案第六章

Java 程序员 后端

String的内存分配与拼接操作,mysql数据库教程课后题答案

Java 程序员 后端

volatile 和原子类的异同,画个图理解一下,面试官让我下周来上班

Java 程序员 后端

springcloud服务与服务之间的调用(Feign),java支付模块架构

Java 程序员 后端

SSM框架-SpringMVC详解,java反射和注解原理

Java 程序员 后端

Spring框架技术总结(二),java自学视频免费

Java 程序员 后端

vivo官网商城开发团队:同城双活与异地多活架构分析,java面试问项目流程

Java 程序员 后端

Web开发基础:JavaScript常用类、面向对象和BOM,java中锁的实现原理

Java 程序员 后端

springcloud(一)注册中心eureka,Mycat和Mysql搭建高可用企业数据库集群

Java 程序员 后端

Spring学习总结:IOC基础,2021Java开发现状分析

Java 程序员 后端

spring源码系列-beanDefinition(子路),mybatis和spring整合原理

Java 程序员 后端

Srping全注解开发---AOP模块,教科书般的排查与分析过程

Java 程序员 后端

Spring中经典的9种设计模式,一定要记牢,springboot热启动原理

Java 程序员 后端

spring源码系列-beanDefinition(子路)(1),壁虎java视频百度网盘

Java 程序员 后端

Spring面试题整理(1),真是经典中的经典

Java 程序员 后端

XML简介,kafka教程尚谷

Java 程序员 后端

Tomcat目录结构,java基础教程第三版

Java 程序员 后端

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