2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

微软计划使用 Rust 取代 C 和 C++

  • 2019-07-19
  • 本文字数:2465 字

    阅读完需:约 8 分钟

微软计划使用Rust 取代C和C++

昨日,微软安全响应中心(MSRC)团队在官网更新文章,就近日提出的最新计划,即未来将使用Rust作为 C、C++以及其他编程语言的替代方案以改善应用程序的安全性的计划,从空间内存安全、时间内存安全、数据竞争等方面进行了进一步的深入补充。首席安全技术经理 Gavin Thomas 表示,开发人员的核心工作不是担心安全性,而是做好功能开发,首先需要启用一种“不会引入内存安全隐患”的开发语言。显然,这一次的主角是 Rust。

过去 12 年,约 70%的微软补丁针对内存安全漏洞

如今,内存安全漏洞已成为黑客攻击的主要方向。据微软最新调查数据显示,在过去 12 年里,约 70%的微软补丁都是针对内存安全的。


自 2004 年以来,微软安全响应中心(MSRC)已经对每一个报告的微软安全漏洞进行了分类。从所有的分类中,人们得出了一个令人惊讶的事实:正如 Matt Miller 今年在 BlueHat IL 的演讲中所讨论的那样,大多数修复的漏洞和分配的 CVE 都是由开发人员无意中将内存损坏错误插入到其 C 和 C++的代码中造成的。这两种存在内存安全风险的编程语言允许开发人员在代码被执行的地方对内存地址进行细粒度控制。开发人员内存管理代码中的一个错误可能导致大量内存安全漏洞,攻击者便可利用这些错误造成具有危险性和侵入性的后果,比如远程代码执行(RCE)和权限升级漏洞(EoP)。



数据来源:微软安全响应中心网站


近年来,随着微软增加其代码库并在代码中使用更多的开源软件,这一问题并没有得以解决,反而变得更糟,而微软也并不是唯一一个暴露出内存安全漏洞的企业。


在官网发布的最新文章中,微软安全响应中心(MSRC)团队就如何解决内存安全问题进行了如下分析,


为了解决内存安全问题,需要采取几种不同的方式。C++中的“现代”构造(例如 span)能够在一定程度上预防某些内存安全问题。此外,我们应尽可能使用其它现代 C++功能(例如智能指针)。然而,现代 C++仍然不具备全面的内存安全与数据争用机制。更重要的是,如果程序员不加以运用,这些功能本身将毫无意义;而且这些功能在规模较大,且较为模糊的代码库可能也无法奏效。再者,C++缺乏能够在安全抽象当中打包不安全代码的良好工具,这意味着虽然能够在本地级别强制执行正确的编码实践,但开发人员仍很难在 C 或者 C++当中构建出能够安全组合的软件组件。除此之外,我们应尽可能将软件最终迁移至具备全面内存安全特性的语言当中,例如,通过运行时检查以及垃圾回收机制,实现内存保护的 C#或者 F#。毕竟,内存管理是一项极为复杂的功能,最好是确保必要时才与其打交道。

Rust 的优势

多年来,微软始终在寻找更安全的 C 和 C++的替代品。2016 年 6 月,微软曾开源“Checked C”,这是 C 语言的一个扩展,它带来了一些解决安全问题的新特性,但依然没有彻底解决问题。由于自动内存管理,Microsoft 还有其他更安全的编程语言,C#和.NET 系列是一个,编译为 JavaScript 的 TypeScript 是另一个。这些语言被 Microsoft 及其客户广泛使用,但它们无法满足所有需求。对此,微软安全响应中心(MSRC)首席安全技术经理 Gavin Thomas 表示:“如果开发人员能够将确保内存安全的 .NET,C#等语言与高效的 C ++结合起来,那就太好了。也许我们可以。”因此,Rust 成为了这项计划的主角。


据了解,Rust 创建于 2006 年,被创建者 Mozilla 称为“C / C ++的替代品”。最初,它只是 Mozilla 的一个研究项目,旨在开发更安全、快速的编程语言以重写 Firefox 浏览器,大多数开发人员认为它是一个理论项目,而如今 Rust 正在逐步证明自己的实力。2016 年 8 月发布的 Firefox 48 采用了以 Rust 构建的 mp4 轨道元数据解析器,该解析器首次在 Windows 和 32 位 Linux 桌面提供。最近,Brave 浏览器用 Rust 替换了最初用 C ++编写的广告拦截组件。Cloudflare 和 Dropbox 目前也在生产系统中运行 Rust。


Rust 的显著特征包括:


  • 零成本抽象

  • 移动语义

  • 保证内存安全

  • 没有数据竞争的线程

  • 基于特质的泛型

  • 模式匹配

  • 类型推断

  • 最小运行时间

  • 高效的 C 绑定


Rust 团队表示,它具有丰富的系统和所有权模型,可确保内存安全和线程安全。此外,它还提供文档,包含集成的包管理器和其他有助于提高开发人员工作效率的工具。更为重要的是,Rust 从一开始就设计了防止内存损坏的漏洞。它的语法也更为简单,由它编写的应用程序不会产生相同数量的错误,因此开发人员可以专注于扩展其应用程序,而非进行持续的维护工作。


根据StackoverFlow2019年开发者调查报告的数据显示,Rust 是如今最受欢迎的编程语言,因此更容易招募到相关开发人员。相比之下,在这项调查中,受访者将 C 列为第四个最讨厌的编程语言,C++则排名第九。




StackoverFlow2019 年开发者调查报告数据


据了解,目前,除 Mozilla 之外,全球有数百家公司正在使用 Rust,如 Amazon、Atlassian、Dropbox、Facebook、Google、Microsoft、Red Hat 和 Reddit 等。在国内,百度、字节跳动、 PingCAP、蚂蚁金服、知乎、SenseTime 等企业也都在使用 Rust。

Rust 存在的问题

然而,Rust 仍存在一些不足。据先前的一项调查显示,它需要改进的方面包括:


  • 更好的人体工程学

  • 更好的文档

  • 更好的库支持

  • 更简单的学习曲线

  • 更多的 IDE 支持


一些用户在谈及为何不使用 Rust 的原因时表示,“尽管学习曲线和语言的复杂性仍是人们学习 Rust 的阻碍,但令许多人产生共鸣的一个方面是,只是还没有足够活跃的采用 Rust 的商业项目让人们参与其中……对于一些人来说,只要有强烈的动机,他们就可以克服 Rust 的学习曲线。”此外,受缺少 IDE 支持的影响,约 10%的用户正在寻找更好的 IDE 支持,而 5%的老用户因此停用 Rust。


对于这项或将构建新的语言生态的计划,微软安全响应中心(MSRC)首席安全技术经理 Gavin Thomas 表示,“我们是一个响应组织,但我们也发挥积极的作用“,“我们应该从一开始就努力防止开发人员引入问题,而不是为解决问题提供指导和工具“。目前,关于何时在其产品或云服务上使用 Rust,微软还没有具体透露。


相关文章:


A proactive approach to more secure code


We Need a Safer Systems Programming Language


明明很好很强大,Rust 却还是那么小众


2019-07-19 15:0223130
用户头像
王文婧 InfoQ编辑

发布了 126 篇内容, 共 77.5 次阅读, 收获喜欢 277 次。

关注

评论 2 条评论

发布
用户头像
关于Rust的缺陷在本文没有详细展开,欢迎读者批评指正!
2019-07-19 19:22
回复
没有更多了
发现更多内容

语音助手中的复杂语义表达方法

DataFunTalk

AI nlp

Shell简介

入门小站

Shell

引领云原生发展浪潮 阿里云开启云原生大规模落地元年

阿里巴巴云原生

云计算 阿里巴巴 阿里云 最佳实践 云原生

XRP瑞波币系统软件开发|XRP瑞波币APP开发

系统开发

TypeScript | 第三章:函数、泛型和枚举

梁龙先森

typescript 编程 大前端 七日更

夜莺二次开发指南-监控系统(2)

ning

滴滴夜莺 夜莺监控

如何在 20 分钟内给你的 K8s PaaS 上线一个新功能?

阿里巴巴云原生

阿里云 容器 运维 云原生

JDK 16 即将发布,新特性速览!

xcbeyond

Java 七日更

12张图带你彻底理解分布式事务!!

冰河

分布式事务 BASE理论 TCC ACID CAP理论

Spring Cloud 2020.0.0正式发布,再见了Netflix

YourBatman

Spring Cloud Spring Boot netflix 2020.0.0

MySQL字符集修改实战教程

Simon

MySQL 字符集 七日更

Android uni-app实现音视频通话

anyRTC开发者

uni-app android 音视频 WebRTC 跨平台

单点破局思维|技术人应知的创新思维模型(8)

Alan

个人成长 技术人应知的创新思维模型 七日更 28天写作

夜莺二次开发指南-监控系统(1)

ning

滴滴夜莺 夜莺监控

手写线程池,对照学习ThreadPoolExecutor线程池实现原理!

小傅哥

Java 小傅哥 线程池 七日更 ThreadPoolExecutor

任务发布系统软件开发|任务发布APP开发

系统开发

世界之书:《禅与摩托车维修艺术》与发现良质

lidaobing

禅与摩托车维修艺术 28天写作

附PPT丨AWS基于数据湖构建云上的数据分析架构

dbaplus社群

数据湖 AWS

《数据分析》PDF免费下载

计算机与AI

数据分析

Go中的Channel背后的设计哲学

soolaugust

Go Concurrency Patterns 七日更 CSP Go 语言

现代JavaScript:ES6+ 中的 Imports,Exports,Let,Const 和 Promise

葡萄城技术团队

Java ES6

社区一体化综合平台搭建,智慧平安小区建设解决方案

t13823115967

智慧城市 智慧平安社区平台建设

最有技术含量的面试

escray

面试 面经 七日更 十日谈

揭开阿里巴巴复杂任务资源混合调度技术面纱

阿里巴巴云原生

云计算 阿里云 性能优化 云原生 资源调度

打开数“智”化之门,一字之差带来的思考

京东科技开发者

DevOps IoT 新基建 智能

Serverless 落地之痛怎么解?

阿里巴巴中间件

Serverless

揭秘大流量场景下发布如丝般顺滑背后的原因

阿里巴巴中间件

阿里巴巴

代码零改动Serverless架构升级?这家在线编程教育企业是这么做的

阿里巴巴中间件

Python Serverless

生产环境全链路压测建设历程 18:某快递 A 股上市公司的生产压测案例之中篇

数列科技杨德华

全链路压测 七日更

30G 上亿数据的超大文件,如何快速导入生产环境?

楼下小黑哥

Java MySQL 并发编程 线程池

如何破解AI数据困境?京东智联云联邦学习平台有良方

京东科技开发者

人工智能 大数据 学习

微软计划使用Rust 取代C和C++_编程语言_王文婧_InfoQ精选文章