微软拥有世界上最大的C/C++代码库之一。从Windows、Office到Azure云,微软的全部核心产品都在该代码库上运行。但由于C++不是内存安全的语言,代码库中天然频频出现内存漏洞,大量的时间被耗费在修补漏洞上。编程
微软自去年开始寻找用以替代的编程语言来解决内存安全问题,寻找终有所得——微软开始尝试使用Rust,并在一些情境下将其集成进代码库中。Rust是一种相对较新的编程语言,具备与C和C++相同的底层性能,并具有现代编程语言应有的功能集。安全
微软认为Rust颇具潜力,本文就将介绍微软将其用在产品中的方式。编程语言
用Rust重写Windowside
微软虽然还没有使用Rust全面重写Windows,但正在致力于研究如何使Rust适应其生态系统。据微软估算,在推送给计算机的安全补丁中,有70%都是为了修补内存有关的漏洞,他们认为Rust能够在开发阶段捕获这些漏洞。所以,微软委托一些工程师用Rust重写Windows的部分组件,从而获取开发人员的一些意见。工具
虽然微软没有公开重写哪些组件,但一名工程师称,他正在针对性地改造部分“Windows的底层系统”,这体现出了微软对Rust的潜力颇具信心。微软不只计划重写一些小的服务和Windows本地应用程序,还可能重写操做系统的核心组件。性能
工程师们称涉及Rust的工做“总体前景是乐观的”,但也明确指出Rust不具有C的一些重要功能,不过这些工程师们也认为有必要为Rust开发这些功能。测试
图源:unsplash优化
英特尔已经开始致力于让Rust实现与C相同的功能,微软也或将加入其中。因为Rust缺乏C的一些功能,该团队发现Rust将最适用于新近开发的Windows组件。假如微软将部分代码库迁移到Rust,我也不会感到吃惊。url
微软已经为Rust搭建了一个标准Windows库,它具有C++版本的全部功能;Linux也在考虑将一些内核迁移到Rust。这两大操做系统之间有可能展开竞争,看谁能最早将Rust代码投入生产。spa
将Rust整合进Azure服务
DeisLabs是Azure的孵化器项目之一,它致力于为Kubernetes构建工具。近来,它选取Rust来开发新产品Krustlet,容许开发者在Kubernetes中运行多个WebAssembly模块。
Kubernetes本来由Google开发,以Go语言写成。大多数工程师倾向于使用Go来为Kubernetes编写组件,DeisLabs选择Rust可谓惊人之举。
最终,这一决定彷佛有所成效。虽然员工的确提到了因为Rust独特的全部权概念,转换为Rust的过程十分困难,但该团队仅用了一个月就回到了全速工做状态,他们发现须要为空值写的测试以及调试的问题都愈来愈少。
工程师们也对Rust的编译器印象深入。他们称该编译器可以找到另外一个项目中的安全漏洞,而Go的编译器则未能作到这一点。他们总结说,应该有更多的团队考虑在未来的工做中使用Rust,该语言可能比Go更适合Kubernetes的开发。
图源:zdnet
一种新的编程语言
不久以前,在Rust的启发下,微软开始着手调研创造本身的编程语言。该项目的负责人之一是C#的主要维护人员,所以这一编程语言彷佛是另外一种版本的Rust,但在语法上更相似C类编程语言。
这一语言被称为“Project Verona”,致力于在系统编程中解决内存漏洞。一些人推测ProjectVerona可能将在许多微软主要产品中投入使用,例如Windows、Xbox和Azure。
然而,微软最终仍没有实际应用ProjectVerona。微软的确声称该语言已经“彻底内存安全”,但依旧选择使用Rust。Rust已经拥有了完善的社区,而且获得了Mozilla和英特尔等企业的支持。有了这些企业的合做,Rust将会更迅速地成长为更强大的语言。
图源:unsplash
凭借大型企业的支持和社区的不断发展,Rust的前途不可限量。在接下来的几个月中,即便微软计划以不一样方式将Rust归入企业中也不足为奇。Rust针对微控制器和物联网设备也进行了良好的优化,这些领域的企业有望将Rust投入使用。能够说,Rust的将来一片光明。
【责任编辑:赵宁宁 TEL:(010)68476606】