Rust语言记事(202x)
2022-12-17 18:55:02 阿炯

本文主要用于记录Rust发展过程中的可为里程碑的事记,截止到2030年前。

Rust 连续八年蝉联“最受欢迎的编程语言”,它究竟有什么魅力让全球开发者这个新晋编程语言如此着迷?一起来看看正在不断发展和壮大的 Rust 的起源、能力、资源和它的使用场景。

Stack Overflow 2023年度开发者调查中,Rust 已经连续第八年荣登 “最受欢迎编程语言” 榜首。并且超过 80% 的开发者表示明年还想使用 Rust 语言,这不禁让人好奇,一门诞生不到 20 年的语言是如何俘获全球开发者的心。在此将介绍 Rust 的历史、它的常用用途、开发者如此喜爱它的原因。

1.Rust 是什么

它最初是作为 C 和 C++ 的一种更安全的替代语言,是一种系统编程语言,因其强调安全性、性能和生产效率,在开发人员中大受欢迎。Rust 是一种静态类型语言,因此变量和表达式类型会在编译时就被检查并确认,这有助于增强内存安全性和错误检测,从而提高架构的可靠性。

2006 年,软件开发人员 Graydon Hoare 在 Mozilla 工作期间,将 Rust 作为个人项目启动了。根据《麻省理工科技评论》的采访,Rust 的灵感来自 Hoare 公寓楼里一部坏掉的电梯。当时电梯操作系统的软件崩溃了,Hoare 明白,类似的问题大概率来自程序内存的问题。通常这类设备的软件都是用 C 或 C++ 编写的,但这些语言需要大量的内存管理,很容易导致错误,造成系统崩溃。因此Hoare 开始着手研究如何创建一种既紧凑又无内存错误的编程语言。

后来他向一位经理展示了这个项目 -- 这也让 Mozilla 在 2009 年赞助了这个项目,作为将 Rust 语言纳入一项实验性浏览器引擎开发的长期努力的一部分。2010 年,Mozilla Research 正式宣布了 Rust 项目,并将源代码作为开源项目向公众发布。经过几年的开发,Rust 达到了稳定和成熟的状态,于 2015 年 5 月发布了 Rust 1.0。这一里程碑标志着 Rust 已经为生产做好了准备,并为开发人员提供了一个基础。

自 1.0 发布以来,Rust 的受欢迎程度和采用率呈爆炸式增长,微软 Windows 等顶级应用软件纷纷利用 Rust 的内存安全代码重写核心库。在科技巨头之外,Rust 还拥有一个充满活力的开发者社区,即 "Rustaceans",他们致力于让 Rust 体验成为一种活跃的协作体验。


Ferris,Rust 的非官方吉祥物

根据 SlashData 最近的一项调查,到 2023 年,全球大约有 280 万 Rust 开发人员,这一数字在过去两年中几乎翻了三倍。其拥有大量活跃的论坛、文档,以及为各种技能水平的开发者提供支持的社区,因此在最受欢迎语言排行榜上名列前茅也就不足为奇了。

2.Rust有什么特别之处

那么,究竟 Rust 的哪些关键功能使其对开发者如此有吸引力?

简单来讲,Rust 解决了一些令 C 和 C++ 相关的开发者最令人沮丧的内存管理问题,但这并不是它唯一的闪光点。GitHub 的一名软件工程师 Jason Orendorff 在一本关于 Rust 编程的书中谈到:“对我来说,Rust 的伟大之处在于它既快速又可靠,” Orendorff 说道:“它让我能够编写在 16 个内核上运行的多头程序,并保持它们的可读性、可维护性和无崩溃性。它还允许我编写需要控制内存布局的非常低级的算法,并引入一个使 HTTPS 请求变得超级简单的包。正是这些功能的结合使 Rust 如此独特。”

在此基础上,这里还有一些深受喜爱的特性和功能:

并发性。Rust 通过内置其所有权系统和借用模型为并发编程提供支持,所有权系统对数据访问执行严格的规则,借用模型则是允许受控的同时访问来防止数据竞赛。这确保了多个线程可以在共享数据上工作,而不会引入与内存相关的问题。

无垃圾回收。与一些编程语言不同,Rust 不采用垃圾回收。相反它采用所有权和借用规则来管理内存,这有助于开发人员精确控制内存的分配和删除,从而实现高效的资源管理。

Cargo 软件包管理器。Rust 内置的软件包管理器 Cargo, 简化了项目管理、依赖关系跟踪和构建过程,这有助于高效、有序地完成开发工作流程。但这并不能说明 Cargo 生态系统有多疯狂。根据 Orendorff:“我的团队利用高质量的开源软件包进行散列、序列化、多线程、数据结构、压缩等工作。这些都是对性能至关重要的库。如果没有其中的一些,我们在 GitHub 上重新思考代码搜索的项目就不可能实现。” 还有一个有趣的事实:Rust 实际上是第一种拥有标准软件包管理器的系统编程语言,因此 Rust 生态系统非常强大。

零成本抽象。此功能允许开发人员编写高级代码抽象和功能,而不会引入任何运行时性能开销。

模式匹配。这种强大的语言功能使开发人员能够简洁有效地将复杂的数据结构与特定模式进行匹配,以干净且可读的方式提取和处理不同的案例或场景。

类型推断。此功能允许 Rust 编译器在编码时根据上下文自动检测表达式。“许多编程语言都有某种类型推断”, Orendorff 说。“C# 和 C++ 有一些,Rust 有更多,Haskell、Scala 和 ML 这样的语言有更多。”

3.Rust常用于哪些领域

由于可以直接访问硬件和内存,Rust 非常适合嵌入式系统和裸机开发。它也是一种通用语言,因此也可用于各种应用。来探讨几个关键用例:

使用 Rust 构建性能关键型后端系统

性能关键型后端系统是处理需要高速处理、低延迟响应和高效资源利用的任务的软件组件或服务,而 Rust 的性能、线程安全和错误处理使其成为开发这类系统的绝佳选择。事实上,我们在 GitHub 就使用 Rust 构建了这样一些系统。例如,我们的代码搜索功能的后台就是用 Rust 编写的。

使用 Rust 开发操作系统

Rust 最初是为了解决操作系统问题而创建的(还记得电梯问题吗?),因此,毫不奇怪,它经常用于构建操作系统、内核、设备驱动程序或其他低级组件,这其中对于内存和性能的控制至关重要。

Redox,一个类 Unix 操作系统,是用 Rust 编写的,贡献了 Rust 最重要的功能之一:安全性。“Fuchsia 是谷歌构建的另一个例子,”Orendorff 说, “如果你有一个 Google Nest 智能扬声器,它很可能运行 Fuchsia。”

Rust 用于与操作系统相关的代码

Rust 也非常适合编写执行与操作系统密切交互的任务的代码。例如,GitHub 的 Codespaces 团队正在利用 Rust 来提高 GitHub Codespaces 中虚拟磁盘的启动速度并优化 Azure 存储的利用率。Coursera 还在其在线评分系统中采用了 Rust,因为它在 Docker 中运行,并且需要一种依赖性极小的语言来编译机器代码。

使用 Rust 进行 Web 开发

Rust 越来越多地用于 Web 开发,尤其是在服务器端。Rust 的异步编程模型和性能特征使其适合构建高性能 Web 服务器、API 和后端服务。另外,Rust 的 Web 框架不断涌现,比如 Rocket,它们可以帮助人们开始编写安全的 Web 应用程序。这些框架的出现凸显了 Rust 作为一种成熟语言的地位,也有助于增加对希望在前端或后端工作中使用 Rust 的人们的支持。

使用 Rust 进行加密和区块链开发

Rust 的速度、内存管理和安全性都有助于其参与加密货币和区块链技术。例如,Polkadot 旨在以安全和去中心化的方式共享信息和资产,实现多个区块链之间的互操作性和交互,便是利用 Rust 构建其核心基础设施。Polkadot 的运行时逻辑控制区块链的行为和规则,也是用 Rust 编写的。

使用 Rust 构建 CLI 工具

Rust 可编译高效的机器代码的能力及其富有表现力的语法,使其成为构建命令行工具和应用程序强有力的选择。另外,编写命令行应用程序是学习和熟悉 Rust 的好方法。

使用 Rust 进行嵌入式系统和物联网开发

Rust 的最小运行时间和对内存布局的控制使其对于开发嵌入式系统和物联网 (IoT) 设备非常有用。它能够防止与内存相关的错误、管理并发以及生成小型高效的二进制文件,从而满足物联网的安全性、实时性和效率需求。

4.为什么开发人员喜欢Rust

尽管 Rust 的用户群远不如 Java 或 Python 那样大,但 Rust 仍在活跃在互联网上最受欢迎的编程语言的大热门竞争榜单中。甚至还有一个完整的网站,其中包含开发人员对 Rust 的赞扬。但究竟为什么 Rust 如此受到开发者的推崇呢?如果你将非要总结开发人员如此喜爱 Rust 的几个原因,那么它们必须是该语言的速度、安全性和性能。此外,Rust 正在通过新的框架、工具和资源不断发展和成长。你可以在 Awesome-rust 存储库中密切关注对该语言的贡献,该存储库包含令人印象深刻的 Rust 代码和资源列表。

欣赏 Rust 不仅仅是采用一种语言,而是拥抱一种优先考虑创新的心态,同时又不损害稳定性和安全性的核心原则。


Rust 语言 2019年调查报告

从 2019 年下半年至今,不到一年的时间内,Rust 语言确实接二连三地掀起过一些波澜。从微软探索将 Rust 作为 C 和 C++ 的安全替代方案开始,Rust 吸引了越来越多的目光:内核维护者表示愿意接受用 Rust 开发 Linux 驱动;AWS 也伸出橄榄枝,宣布赞助 Rust;微软更进一步,在今年年初开发并开源了受 Rust 启发的新编程语言 Verona;最近苹果也站出来拥抱它,将 C 代码移植到 Rust。此外,Rust 连续四年在 StackOverflow 开发者调查中蝉联“最受开发者喜爱的编程语言”。有意思的是,其中 97% 的受访者并未使用过 Rust,他们对 Rust 语言的喜爱,仍停留在“想学习”的阶段。Rust 官方博客发布了 2019 年度的 Rust 语言调查报告。其中有些问题也许能够解释为什么 Rust 语言如此被关注,却一直没有真正流行起来。

该调查共收到以 14 种不同语言完成的 3,997 份回复,使用英语的受访者人数占比最高,为 69.6%,其次是 10.8% 的中文受访者。调查报告中特地指明,非英语受访者希望有自己所使用语言的 Rust 文档,在中文使用者中,这一要求占比尤其高。对此,官方也正着手进行翻译工作。在所有受访者中,有 82.8% 的人使用过 Rust;7.1% 的受访者曾经使用过,但现在已停用;另有 10.1% 的受访者表示从未使用过 Rust。与上一年的调查结果相比,用过 Rust 的受访者比例显著增加(75%→82.8%)。其中,绝大多数使用 Rust 的受访者是后端开发人员。


调查数据显示,受访者参与的大多数 Rust 项目(43%)较为小型,通常包含 1,000-10,000 行代码。中型到大型(总代码行超过 1 万行)的 Rust 项目也呈上升趋势,从 2016 到 2019 年,这一数据从 8.9% 增长到 16%,到 23%,再到现在的 34%。 使用 Rust 时,Vim 和 VSCode 是最受欢迎的编辑器,其次是 Intellij。在操作系统上,Linux 占据主导,55% 的受访者选择在 Linux 上进行 Rust 开发;Windows 和 macOS 势均力敌,分别占比 24% 和 23%。


上文提到,有 7.1% 的受访者使用过 Rust 后又停用了,对于这部分用户,停止使用 Rust 的最大原因是所在的公司不再采用 Rust,学习曲线、缺少所需的库、缺乏 IDE 支持等也是常见的阻碍因素。关于部分从未使用过 Rust 的受访者,大多数人表示“想学习”,但“公司未采用”。可见公司采用与否对个人的语言学习还是有不小程度的影响。


受访者指出,如果公司愿意采用,且 Rust 有更多的库和更好的 IDE 支持的话,他们愿意更多地使用 Rust。其次,受访者认为 Rust 的学习曲线和互操作性还有待改善。就互操作性而言,更多用户希望 Rust 能与 C 语言有更好的互操作性,R 和 C++ 紧随其后。不止如此,更高的市场渗透率、更稳定的库、更好的平台支持等等,都是开发者所希冀的。对于用户来说,生产力是工作的重要目标,成熟度左右着 Rust 的吸引力,而现在 Rust 显然还不够成熟。

2020 年,Rust 再次被 StackOverflow 评选为最受欢迎的编程语言。2021年2月初,Rust 成立了新的基金会,以更好地建立和维护一个可持续的开源生态系统。一些使用 Rust 的公司已经组建了专门维护和改进 Rust 项目的团队,包括华为、AWS、Facebook 和 Microsoft。越来越多的公司已经在其项目中采用 Rust,并提供官方支持的 Rust API。将来 Rust 的应用领域会更广。比如 Embark 工作室已经发布了 rust-gpu 的初始原型,这是一个新的编译器后端,允许使用 Rust 为 GPU 编写图形着色器;Linux 项目目前正在考虑将 Rust 作为第二种语言加入内核的提议,以便能够编写更安全的驱动和内核空间代码;Google 也已经宣布,支持用 Rust 构建 Android 操作系统的低级组件,并且已经开始用 Rust 重写他们的蓝牙堆栈。

Rust 语言目前唯一的缺点就是学习曲线陡峭。作为补偿,Rust 社区一直致力于提升用户体验,例如编译器会生成特别有用的错误提示,甚至会突出显示有问题的代码并建议开发者如何修复它。此外,Rust 社区还提供了丰富的文档和在线帮助,包括一个受欢迎的在线参考书,用以给开发者提供解决常见问题的方法。

Shopify 拥抱 Rust

Shopify 于2022年12月介绍了他们采用 Rust 进行系统编程的原因,以及未来参与 Rust 的计划。

自成立以来,Shopify 的主要服务器端应用程序编程语言一直是 Ruby。 Ruby 的灵活性和表现力让 Shopify 开发了一个强大的商务系统,可以满足数百万商家和数亿买家的需求。Shopify 称,Ruby 过去是,现在是,将来也是他们在构建现代商业的服务器端组件时使用的首选工具。而对于系统编程,例如编写高性能网络服务器,或使用 “原生” 代码来扩展 Ruby 而不是定义业务逻辑,Shopify 开发者历来使用包括 C 和 Go 在内的语言。现在 Shopify 决定将 Rust 标准化为他们的系统编程语言。因此该团队正努力在开发和部署过程中更好地支持 Rust,并帮助 Shopify 工程师学习 Rust 编程方面的专业知识。

Shopify 表示,Rust 的许多方面使其成为他们系统编程语言的有吸引力选择。这些结合起来让他们相信 Rust 将成为其软件堆栈中一个强大且受欢迎的组件。 在 Shopify 看来,Rust 的一致性、性能、社区生态、生产力、安全和互操作性是他们采用 Rust 用于系统编程的原因。Shopify 目前已加入 Rust 基金会,对 Shopify 而言,其正处于 Rust 之旅的开端。目前需要努力开发教育资源和内部工具,并学习如何最好地参与 Rust 社区和生态,让每个人都能构建可持续的、内存安全的、高效的软件。

微软正在用 Rust 重写核心 Windows 库

2023年4月下旬消息,Windows 操作系统安全总监 David “dwizzle” Weston 3月在以色列特拉维夫的 BlueHat IL 2023 上宣布Rust将进入操作系统内核。"在接下来的几周或几个月内,将在内核中使用 Rust 启动 Windows,这真的很酷。这里的基本目标是将其中一些内部的 C++ 数据类型转换为其 Rust 等价物。"

Windows 的 Rust 革新始于 2020 年的 DWriteCore,它是 Windows 的 DWrite 引擎的 Windows App SDK 实现,用于文本分析、布局和渲染,其中现包含了约 152,000 行 Rust 代码和 96,000 行 C++ 代码。外媒 The Register 称,Microsoft Windows 图形设备接口 (GDI) 正在移植到 Rust,已包含 36,000 行 Rust 代码。最新版本的 Windows 11 也使用 Rust 版本启动,它通过了所有 GDI 测试,但 Rust port 目前在功能标志后面被禁用。且 Weston 透露,Windows 内核中现在有一个 SysCall,是采用 Rust 实现的。但他也表示,用 Rust 重写 Windows 可能不会很快发生。“所以虽然我们喜欢 Rust,但我们需要一种策略,同时保护更多的 native code。”

事实上,早在几年前微软就表现出了对 Rust 的兴趣,他们认为该语言是一种在代码到达用户手中之前捕获和消除内存安全漏洞的方法。现如今,随着谷歌等竞争对手都在大力拥抱 Rust,微软对 Rust 的探索也变得更加热情。去年 9 月,微软 Azure 首席技术官 Mark Russinovich 还曾在社交平台上发布动态呼吁,开发人员应该更多的使用 Rust 而不是 C/C++ 来启动新项目。另一方面,虽然用 Rust 重写 Windows 不会很快发生,但微软对 Rust 的支持或使开源社区受益。开源软件开发者、现任 Sentry 安全工程师 Armin Ronacher 认为,微软对 Rust 的承诺对这门语言来说非常重要。特别是,因为我希望微软重用现有的编译器,我希望这会带来更好的 PDB [程序数据库] 支持。在现如今的 Windows 上,开发人员工具支持要落后于你在基于 DWARF 的 [使用属性记录格式进行调试] 平台上获得的支持。

Pydantic 的创始人兼使用 Python 和 Rust 的开发人员 Samuel Colvin 也表示,“我对微软的这种前瞻性思维印象深刻,但并不感到非常惊讶。我确信他们的工程师在采用 Rust 方面有被施压。如果你今天正在构建一个性能关键或低级别的应用程序,那么 Rust 在这一点上是一个明智的选择。”他还认为,找到优秀的 Rust 工程师比找到优秀的 C/C++ 工程师更容易,因为很多工程师都有兴趣尝试学习该语言。“对于我们这些依赖 Rust 的人来说,微软正在使用它并希望支持它,这真的很令人兴奋。”

Rust 管理结构大改:解散核心团队、成立领委会

Rust 项目于2023年6月下旬宣布成立新的顶级治理机构:领导委员会(Rust Leadership Council)。该领导委员会的成立,标志着此前老是闹幺蛾子的 Rust 核心团队和临时领导者职位都将被取消,此后将由 Rust 理事承担顶级治理问题的责任。

Rust 诞生于 Mozilla ,并在其中演变多年,最初的 Rust 项目治理结构也是从 Mozilla 演变而来。在 2017 年前后, Rust 项目创建了大约六个团队,包括 core、language、mod、library 和 cargo 团队。其中核心(core)团队主要负责监督其他 Rust 团队出现的问题。但随着语言本身的发展和社区的壮大,Rust 核心团队的权限变得越来越高,因为他们对 Rust 语言的动态拥有最高决策权,其他团队无法影响他们。此前我们就报道过 Rust 审核团队为了抗议 Rust 核心团队 (Core Team) 而集体辞职。据审核团队所言,Rust 核心团队并没有和其他成员遵循同样的行为准则 (CoC),Coc 似乎变成了核心团队 “严于律人” 的工具,特别是核心团队中的女性成员 Ashley Williams 使用 CoC 作为 “武器” 来对付男性贡献者,但自己却不遵守。另一方面,除了权限过高, Rust 核心团队的事务又过多且杂。前文提到, Rust 核心团队的主要工作是负责监督其他 Rust 团队,但核心团队既不受其他团队的管理,也没有管理其他团队的权力。这就导致他们既要发现问题,也要自己解决问题,既当裁判又当运动员当然是忙不过来的。

总而言之,旧的治理模型 “并不是一个非常精确的文件”;其粗略的权力划分,也正是导致 Rust 管理团队治理危机的原因之一。

新的治理模式

在经历了多次治理风波后, Rust 各团队成员合力创建了一份新的、名为 “ Rust 领导理事会” 的 RFC 草案,这份草案决定重塑 Rust 的领导者和治理模式。草案主要确立了以下内容:移除 Rust 核心团队,然后由各团队出一个代表,成立一个顶级的治理团队 “领导委员会”。 “领委会”不会亲自下场干活,而是负责一些职责不清的工作安排及其优先次序,然后对这些工作进行精确到子团队或成员的委托。其次,“领委会”还要以跨团队工作、规划和项目的长期成功等为目标,成为团队之间的协调、组织和问责机构。领导委员会还需要协调因项目而导致的团队、结构或流程的变化,确保顶层团队负起责任,并负责展示 Rust 项目的官方态度。

该 RFC 由 @jntrnr(核心团队成员)、@joshtriplett(语言团队负责人)、@khionu(调解团队成员)、@Mark-Simulacrum(基金会核心项目主管,发布团队负责人)、@rylev(基金会核心项目主管)、@technetos(调解团队成员)和 @yaahc(基金会合作项目主管)共同撰写。而 Rust 项目的大部分发展和维护工作(例如编译器和核心工具的维护、语言和标准库的发展、基础设施的管理等)仍由九个顶级团队负责。第一期 Rust 领导委员会由九个顶级团队的代表组成:
Compiler(编译器团队): Eric Holk
Crates.io(Crates.io 团队): Carol (Nichols || Goulding)
Dev Tools(开发工具团队): Eric Huss
Infrastructure(基础设施团队): Ryan Levick
Language(语言团队): Jack Huey
Launching Pad(一个新团队,还没正式成立): Jonathan Pallant
Library(库管理团队): Mara Bos
Moderation(审核团队): Khionu Sybiern
Release(发布团队): Mark Rousskov

目前 Rust 核心团队已被解散,团队成员主动或被动地 “离开了”。接下来的几周内,Rust 团队的主要工作是为新的领导委员会建立基本的基础设施,包括制定定期会议计划、提出议程项目的流程,建立团队存储库,并完成从前 Rust 领导结构的过渡。完整的 RFC  草案可在该 PR 中阅读。

Rust 原生支持龙芯架构 (LoongArch) 指令集

Rust 开源社区在2023年7月发布 1.71.0 版本,实现对龙芯架构(LoongArch)指令集的原生支持。龙芯架构操作系统发行版和开发者可基于上游社区源代码构建或直接下载 Rust 开源社区发布的龙架构二进制版本,开发者将在该平台上获得良好的开发体验。Rust 是近年来新兴的系统级编程语言,专注于安全性、并发性和性能。Rust 拥有丰富的类型系统和所有权模型,可通过在编译时检查内存访问和并发问题,保证内存安全和线程安全;在构建并行和分布式应用程序时具有优良的并发性能,其高性能特性使其适用于编写高效的系统软件,如操作系统内核、嵌入式设备驱动程序和网络服务器。

对芯龙架构的支持

在此前发布的 Rust 1.70.0 版本中,Rust 开源社区合并了 loongarch64-unknown-linux-gnu 编译目标的初始支持补丁集,开始对龙芯架构提供初步的 Tier3 级支持。此次发布的新版本将对龙芯架构的支持提升到 Tier2 级别,这一进展标志着 Rust 开源社区与其它主流指令集架构一样,将原生构建并发布针对龙芯架构的二进制版本。龙芯开源生态建设再次向前迈出坚实一步。近年龙芯团队积极参与 Rust 开源社区建设并贡献代码,累计被接收合并请求(Pull Request)80 余项,团队的积极贡献获得了社区认可,相关维护者已成为 Rust 开源社区团队的成员。未来将在丰富功能、提高质量、优化性能和改善开发体验等方面持续投入,共建开源生态新格局。相关文档可查看此处

微软加大力度在 Windows 11 使用 Rust

Windows 11 在2023年7月发布了新的测试版 (Insider Preview Build 25905)。发布公告提到此版本已经使用 Rust 重写 Windows 11 内核中的部分模块。据介绍,该预览版使用 safe Rust 对关键内核功能进行了早期实现。具体来说,win32kbase_rs.sys 包含 Windows GDI region 的新实现。虽然这是一个小的实验性功能,微软工程师表示将继续增加 Rust 在内核中的使用。2023年3月份,Windows 操作系统安全总监 David “dwizzle” Weston 在以色列特拉维夫的 BlueHat IL 2023 上宣布 Rust 进入操作系统内核 —— 用 Rust 重写核心 Windows 库,并表示在接下来的几周或几个月内,大家将会在内核中使用 Rust 启动 Windows,该项工作的基本目标是将其中一些内部的 C++ 数据类型替换成 Rust。

Rust 2022 年度调查报告

Rust 基金会去年启动的 Rust 2022 年度调查终于于2023年8月中旬发布了报告。

参与情况
此次调查问卷共收到 11,482 份回复,其中 9,433 份完成了所有问题。调查问卷提供了 11 种语言,其中 77% 的受访者使用英语,6% 使用中文(包含简体和繁体)。参与调查的开发者来自世界各地,最多的是美国(25%),其次是德国(12%)和中国(7%)。绝大多数受访者表示,用英语(93%)就技术主题进行交流最舒服,其次是中文(7%)。

Rust 使用情况
超过 90% 的受访者称自己是 Rust 用户,并且其中有 47% 的人每天都会使用 Rust,该比例比上一年增加了 4%。30% 的受访者可以用 Rust 编写简单程序,27% 可以编写用于生产环境的代码,42% 认为使用 Rust 可以提升工作效率。在完成所有调查问题的受访者中,30% 的人认为 “学习难度高” 是放弃使用 Rust 的主要原因,而近 47% 的人则认为是 “无法控制的因素”。

Rust 在工作中的使用情况
29.7% 的受访者表示他们在工作中的大部分编码业务都使用 Rust,与上一年相比,这一数字增加了 51.8%。此外,Rust 也越来越多地被用于专业场景。受访者表示使用 Rust 的主要原因包括:
编写 “无 bug 软件” (bug-free) 的能力 (86%)
Rust 的优秀性能 (84%)
Rust 的安全性和可靠保证 (69%)

还有 76% 的受访者表示使用 Rust 是因为他们觉得它有趣且令人愉快。

对 Rust 未来的担忧和期待
26% 受访者担心 Rust 的开发者和维护者没有得到适当的支持,这比去年下降了 30% 多。38% 担心 Rust “变得太复杂”,只有少数人担心文档、企业干预或演进速度等问题。34% 的受访者根本不担心 Rust 的未来。跟去年相比,对 Rust 在行业中的应用的担忧也下降了 21%,这说明大家对 Rust 的持久发展和通用性有更多的信心。

谷歌宣布正使用 Rust 语言重写 Android 安全关键组件


2023年10月上旬消息,谷歌在2022年声称正在将 Android 原生代码从 C++ 迁移到 Rust,目前谷歌在博客中发布文章,展示了当前使用 Rust 语言的新进展。据悉谷歌正在使用 Rust 语言重写在 Linux 核心之外执行的 Android 关键安全组件,从而进一步减少安全漏洞。Rust 语言考虑了内存安全性,在编译的时候,Rust 就能够捕捉到大多数的内存安全问题,避免相关漏洞在生产环境中出现。谷歌称据2022年调查显示,Android 的安全漏洞从 2019 年的 223 个降低到 2022 年的 85 个,经过分析,谷歌认为内存漏洞减少的情况主要与 Rust 代码的比例增加有关。

在 Android 13 中,就已经有约 21%的新原生代码以 Rust 开发,官方提到,这些组件大多数是在用户层面的系统服务(即 Linux 中运行),但目前还有许多组件依然使用 C++ 进行编写,而其中许多安全关键组件,都在 Linux 核心之外的裸机环境中运行,当下谷歌为了强化 Android 设备的安全性,正逐渐提高在裸机环境使用 Rust 的比例。谷歌声称相关开发人员在 Rust 中重写了 Android 虚拟化框架的受保护虚拟机(pVM)固件,从而为 pVM 信任根提供了安全基础。pVM 的作用与 Bootloader 类似,其建立在开源项目 U-Boot 之上,不过 U-Boot 在设计时有所缺憾,有许多研究人员已经发现 U-Boot 存在整数下溢(Integer Underflow)和内存损坏等安全漏洞,特别是 VirtIO 驱动程序,在“边界检查”方面,其存在许多问题。

谷歌表示其已经修复了在 U-Boot 中发现的问题,而通过转用 Rust,还可以在未来避免出现更多类似的内存安全漏洞。由于谷歌要支持 Rust 语言在裸机环境中使用,也因此贡献一系列新的项目,像是在 pVM 固件的 VirtIO 驱动程序方面,谷歌便修复了现有 virtio-drivers 中的一系列错误问题,还添加了新功能。另外还计划发布更多的 Rust 软件包,并支持各平台的裸机程序开发,谷歌还提到,虽然在裸机上应用 Rust 还有许多限制,但是相对于 C 或 C++ 语言,Rust 可以提供更高的安全性和生产力,谷歌未来还会继续扩大 Rust 的使用。

Vivo发布自研操作系统蓝河 (BlueOS),系统框架采用 Rust 编写

2023年11月初的vivo开发者大会上,vivo 发布了自研操作系统蓝河 (BlueOS)。vivo 称「蓝河操作系统」是面向通用人工智能时代的自研智慧操作系统 —— 底层接入了 AI 大模型,支持基于自然交互方式的应用开发。


vivo 还表示,蓝河操作系统采用 Rust 编写「系统框架」—— 从源头避免了内存使用不当引起的安全漏洞,据称是行业首家。运行要求方面,在低至 200Mhz 主频 32MB 内存,高至 4GHz 主频 24GB 内存的各种设备上,蓝河都能流畅运行。


据了解,蓝河操作系统目前不会在 vivo 手机上提供,首款搭载蓝河操作系统的 vivo 设备是 vivo Watch3 智能手表。此外据称蓝河操作系统是基于 Linux/RTOS 的自研架构,因此不兼容 Android 应用。不过它兼容 hapjs,以获得更好的生态支持。


hapjs项目是由开放原子开源基金会孵化及运营的开源项目,是快应用标准的开源实现,是基于智能硬件平台的轻型应用形态,由多智能硬件厂商组成的快应用联盟联合制定标准共同驱动。

谷歌向Rust基金会捐赠100万美元以改进其与C++的互操作性

谷歌于2024年2月宣布Rust 基金会捐赠 100 万美元,这笔资金将用于支持名为 “Interop Initiative” 的新计划 —— 专注提升 C++ 与 Rust 互操作性。

据介绍,谷歌的核心产品采用了数百万行 C++ 代码进行编写,由于无数的业务相关或技术因素,在合理的时间内用 Rust 重写这些代码并不实际。因此在谷歌的支持下,Rust 基金会创建了新的 "Interop Initiative" 计划,让全世界正在使用 C++ 的组织更顺利地做出采用 Rust 的决策和流程。

谷歌称早已在 Android 和其他产品中广泛使用 Rust 编程语言,并表示 Rust 是他们解决内存安全问题的最强大的工具之一。而且整体来看,谷歌在 Android 中使用 Rust 的增长最为显著。Android 安全与隐私工程副总裁 Dave Kleidermacher 表示,根据历史漏洞密度统计数据,Rust 已主动阻止数百个漏洞影响 Android 生态系统。目前这项投资旨在扩大 Rust 在平台各个组件中的采用。除了 Android,谷歌也积极在其他应用程序和产品中采用 Rust,包括客户端和服务器硬件。

Rust 基金会董事会主席兼谷歌成员总监 Lars Bergstrom 说道:“谷歌相信 Rust 等内存安全语言所发挥的关键作用,以及解决各个领域内存安全问题的迫切需要。我们支持 Rust 基金会的 Interop Initiative 计划,因为与 C++ 更好的互操作性将是 Rust 被采用的关键,并让更多组织和社区从内存安全系统中受益。”

2023 年度 Rust 调查报告

2023 年度 Rust 调查报告现已于2024年2月下旬发布,基于 2023 年 12 月 18 日至 2024 年 1 月 15 日期间进行的调查结果。此次调查问卷共收到 11950 份回复,其中 9710 份完成了所有问题。

参与情况

参与调查的开发者来自世界各地,最多的是美国(22%),其次是德国(12%)、中国(6%)、英国 (6%)、法国 (6) %)、加拿大(3%)、俄罗斯(3%)、荷兰(3%)、日本(3%)和波兰(3%)。92.7% 的受访者更趋向于采用英语交流技术主题,相较 2022 年的 93% 略有下降;中文是第二选择,占比为 6.1%( 2022 年为 7%)。

Rust 使用情况

有 93% 的受访者称自己是 Rust 用户,其中 49% 的人每天(或几乎每天)都会使用 Rust,相较上一年小幅增加 2 个百分点。在没有使用 Rust 的用户中,31% 的人表示主要原因时使用 Rust 有难度;67% 的人表示他们还没有机会优先学习 Rust,这也是最常见的原因。

46% 的受访者表示其不再使用 Rust 的原因在于 “无法控制的因素”(比 2022 年减少了 1 个百分点),31% 的人是因为更喜欢另一种语言(比 2022 年增加了 9 个百分点),还有 24% 是因为难度(比 2022 年减少了 6 个百分点)。


操作系统的选择方面,Linux 是最受 Rust 用户欢迎的选择,其次是 macOS 和 Windows,两者份额相近。IDE 的选择上,Visual Studio Code 仍然是最受欢迎的选择,RustRover(去年发布)也获得了一些关注。

Rust 在工作中的使用情况

34% 的受访者表示他们在工作中的大部分编码业务都使用 Rust,相较 2022 年增加了 5 个百分点。86% 的受访者雇主投资 Rust 的首要原因是能够构建相对正确且无 bug 的软件,第二个原因是 Rust 的优秀性能(83%)。77% 的受访者表示,他们的组织可能会在未来再次使用 Rust。

就技术领域而言,Rust 似乎在创建服务器后端、Web 和网络服务以及云技术方面特别受欢迎。


对 Rust 未来的担忧和期待

共有 9374 名受访者分享了他们对 Rust 未来的主要担忧,其中 43% 的受访者担心 Rust 变得过于复杂,相较 2022 年增加了 5 个百分点。42% 的受访者担心 Rust 在科技行业的使用率过低。32% 的受访者最担心 Rust 开发人员和维护人员得不到适当的支持,相较 2022 年增加了 6 个百分点。另一方面,完全不关心 Rust 未来的受访者明显减少,2023 年为 18%,2022 年为 30%。

就 Rust 用户希望实现、稳定或改进的功能而言,最需要的改进是 traits(trait aliases、associated type defaults 等)、const execution(generic const expressions、const trait methodsconst 等)以及 async(async closures、coroutines)。


可能是出于对复杂度的担忧,还有 20% 的受访者希望 Rust 放慢新功能的开发速度。此外,Rust 中最令用户头疼的似乎是 asynchronous Rust、traits、generics system 以及 borrow checker。


受访者希望 Rust 维护者主要优先考虑修复编译器错误 (68%)、提高 Rust 程序的运行时性能 (57%) 以及缩短编译时间 (45%)。受访者指出,编译时间是需要改进的最重要领域之一;但有趣的是,受访者似乎也认为运行时性能比编译时间更重要。


更多详情可查看完整的调查报告

继放弃 C/C++ 后,微软再新组团队将 C# 代码改写为 Rust

整理 | 苏宓
出品 | CSDN(ID:CSDNnews)

不止外部正在想方设法地基于 Rust 开发微软产品的替代品,就连其内部,也在有意扩大 Rust 编程语言的采用率,以此替业务线上核心的 C# 代码。


微软云服务向 Rust 代码看齐

这一次最新加入 Rust 浪潮的是来自 Microsoft 365 团队。根据其最新发布的招聘启事显示,微软欲聘请全职的 Microsoft 365 首席软件架构师,以此组建一个全新的团队,专注于采用 Rust 编程语言作为现代化全球规模平台服务以及更多领域的基础。在其介绍中,该职位隶属于 Substrate App Platform 组,这是 Microsoft 365 核心平台组织的重要部分,构成了微软云服务的支柱。

“成功的候选人将是具有深厚 Rust 编程语言技能的人,或者愿意在短期内成为 Rust 专家,同时作为倡议领导团队的成员,做出贡献。职责包括指导 Rust 组件库、SDK 的技术方向、设计和实现,以及将现有基于 C# 的全球规模服务重新实现为 Rust”,微软写道。


微软全系列采用 Rust

要知道,这并不是微软第一次拥抱 Rust 这门语言。早些时候,微软 Azure 首席技术官 Mark Russinovich 在推特上发文,呼吁业界淘汰 C / C++,应改用更加安全的 Rust 语言:说到语言,现在是时候停止用 C/C++ 启动任何新项目了,在需要使用非 GC 语言的情况下使用 Rust。为了安全性和可靠性,业界应该宣布这些语言已被淘汰。

在2023年微软举办的 BlueHat 安全大会上,微软宣布计划用 Rust 重写部分 Windows 内核,理由是它的现代性、易用性和整体清晰度。随即微软加快了推进「Rust 重写一切」的步伐,后来也陆续有媒体爆料:微软已经用 3.6 万行 Rust 代码改写了 Windows 内核,放弃了 C/C++;同时其还在 Microsoft Career 网站上发布了多个招聘启事,急需 Rust 精兵强将加入新的团队。

除此之外,2023 年 9 月,微软在发布新的 Azure 量子开发套件(QDK)预览版时,也透露了这一版本主要是用 Rust 编写的,可以轻松地将本机二进制文件定位为 Rust 编译器支持的任何平台,并构建 WebAssembly(通过 wasm-bindgen)以在浏览器中运行,最终该套件速度提高了 100 倍,代码大小减少了 100 倍。同时,微软还是 Rust 基金会的白金会员,进一步巩固了对该语言的承诺。

针对这一趋势,有外媒点评道,尽管微软最近裁了不少人,但近期其在持续的招聘上加大了对 Rust 技术的透露,也向科技行业的工程师和专业人士传递了一个明确的信息:即在竞争日益激烈的就业市场中,适应并获得新技能,如 Rust,变得至关重要。它还预示着行业中的一个重要趋势,即越来越多的公司趋向于更安全、更高效的编程语言,如 Rust,用于其关键服务。


Rust 为什么能成为香饽饽?

当然不止微软,Linux 之父 Linus Torvalds 也曾坚定地分享过:“Rust 还没有真正成为下一个伟大的事物。但我认为,在2024年,我们将开始集成驱动程序,甚至一些主要的子系统也将开始积极使用 Rust。因此要让它成为内核的重要组成部分,还需要数年时间。但它肯定会成为内核的一部分。”

同时,亚马逊的云服务、Google 的 Android、Meta /Facebook 的高性能构建系统....无不没有 Rust 的身影。除去大厂之外,几个月前 Facebook 法国前端工程师、React Native 和 Prettier 的联合创始人 Vjeux 在 Twitter 发帖,寻求有能力的开发者来使用 Rust 重写前端代码格式化工具 Prettier,并悬赏 1 万美元。

从编程语言的关键特性上来看,Rust 受到这些公司青睐的原因主要有几个方面:

内存安全性:Rust 被设计为一种系统级别的编程语言,具有强大的内存安全性。它通过所有权系统、借用检查器和生命周期系统等特性,防止了常见的内存错误,如空指针引用、数据竞争等。这使得 Rust 在开发中更容易编写出安全且可维护的代码,尤其在需要高性能和低级别控制的场景下。

并发性能:Rust 的所有权和借用系统使其在并发编程方面表现优异。它允许开发者在不引入数据竞争的情况下编写高效的并发代码,通过借用检查器(Borrow Checker)在编译时检查并发问题,而不是在运行时发生。

系统编程:Rust 在系统编程领域表现出色,因为它提供了对硬件的低级别控制,并且允许直接访问内存,而且不需要运行时系统。这使得 Rust 成为编写操作系统、嵌入式系统和其他需要高度控制的应用的理想选择。

跨平台性:Rust 具有很好的跨平台支持,可以轻松地在不同的操作系统上进行开发和部署。这使得 Rust 成为构建可移植和高性能应用程序的有力工具。

与 WebAssembly(Wasm)的整合:Rust 对 WebAssembly 有天然的支持,使得它成为构建客户端和服务端的 WebAssembly 应用的良好选择。这使得 Rust 在一些云计算和 Web 开发领域受到欢迎。


用 Rust 重写代码需要付出什么样的代价?

就微软而言,也有不少网友不解,难道仅仅是因为性能问题,微软难道就要大费周章地弃用 C# 代码?但是 C# 也不像 Python/Ruby 那样慢。对此微软官方并未做出任何进一步的技术分享,不过有位开发者的分析获得了高赞,其表示:有趣的事,微软首先决定用 Rust 重写,然后再去聘请一位首席架构师。由于他们的目标是采用 Rust,我有一种感觉,这是对 Rust 进行非核心业务评估的举措。正如其他人所指出的,为什么要用 Rust 替换 C# 呢?他们可能认为在预算内并值得为了评估而重写成 Rust 代码。我怀疑微软没有在不太关键的服务上进行技术评估之前,他们不会在所有业务中大规模转向 Rust。而且这个项目不在美国,对我来说更加确认了这不是业务关键的项目。

总体而言,对于 Rust 社区而言,这是个好消息,因为尽管微软目前没有用 Rust 替换他们的核心技术,但他们已经愿意在重要的底层服务上尝试使用 Rust。

还有用户评论道:性能、无 GC、安全性,是微软采用 Rust 的关键原因。一旦你拥有一个完成任务出色且相对成熟的微服务,优化运行时特性而非实现速度是有道理的。此外,现在有更多的人在使用 Rust 构建项目,因此你有更多有经验的开发人员和一个更加成熟的软件包社区可以利用。
最后,也并不是所有公司都适合用 Rust 来重写业务代码,业务代码迁移也并非一朝一夕可以完成的事情,其中需要综合技术、成本和人力资源等多方面的因素来考虑。

参考:

microsoft_seeks_rust_developers

Principal-Software-Architect

微软工程师发布 Rust Linux 内核补丁,以进行就地模块初始化

微软工程师 Wedson Almeida Filho 于2024年4月上旬发布了一个针对 Rust Linux 内核代码的 Allocation API 的最新补丁,并利用这些提议的 API 来允许 Rust 内核模块进行就地模块初始化。Wedson Almeida Filho 一直是 Rust for Linux 的长期贡献者,最早可以追溯到他在 Google 工作的时候。他解释道:我们目前我们有一个对 Vec 进行了修改的 crate fork;其他更改已被上传到上游(Rust 项目)。本系列删除了分叉并将所有功能公开为扩展特征。此外它还向所有可能导致分配的函数(例如 “Box::new”、“Arc::new”、“Vec::push” 等)引入了不带 try_ 前缀的 allocation flag 参数 -- 这些名称之所以可用,是因为在构建 alloc 时使用了 no_global_oom_handling。最后该系列还消除了我们对 “allocator_api” 不稳定功能的依赖。从长远来看,我们仍然希望在上游 Rust 中提供此类功能,但这使我们现在就能够取得进展并减少维护负担。

总结:删除 alloc 分支、删除使用 allocator_api 不稳定功能、分配时引入标志(例如 GFP_KERNEL、GFP_ATOMIC)。

在内核中为 Rust 提供的 Allocation API 工作的基础上,他还发布了 Rust 内核模块的就地模块初始化补丁;提出的补丁允许对模块进行就地初始化,而不是让模块返回一个被移动到最终内存位置的实例。