+8613426109659
webmaster@21cto.com

人们都喜欢 Rust 的哪些方面?

编程语言 0 19 12小时前
图片

各位朋友,自从 2015 年发布 1.0 版本以来,Rust 每年都被 Stack Overflow 评为最受欢迎(现称为最受推崇)的编程语言。

这表示大量 Rust 用户希望继续使用它,而且不仅仅是用于高性能任务或嵌入式开发,还将用于编写 Shell 脚本、Web 应用程序以及各种你意想不到的应用。

一位参与的开发者对此似乎深有体会,他如此说道:“现在,除了 Rust,我不想用任何其他语言来编写代码了。”

让我们坐下来,来分析愿景文档和数据。我们最想了解的问题之一是:是什么激发了人们对 Rust 如此强烈的忠诚度?

根据开发者社区的访谈,答案既简单又复杂。

简而言之,Rust赋予了人们编写可靠高效软件的能力。如果这听起来很熟悉,那是因为它正是我们网页上的标语。更有意思的问题则是,这种能力是如何产生的,以及它对 Rust 的发展意味着什么。

人们喜欢Rust的哪些方面?

我们首先注意到的是,在每一次对话中,无论一个人是第一次编写 Rust 程序,还是已经使用 Rust 多年,无论他们是在构建大型数据集群、嵌入式设备,还是只是在随意尝试,他们都会提到一些喜欢 Rust 的共同点。

图片

(一)可靠性

首先便是可靠性。人们特喜欢那种“只要能编译通过,就能运行”的感觉:

“我真正喜欢 Rust 的一点是,只要编译通过,通常就能运行。这点太棒了,而这正是我在 Java 中从未体验过的。”


——汽车嵌入式系统高级软件工程师

“Rust 就像一股清流,让你省心省力。你会睡得更香,而且实际上也不需要那么绞尽脑汁。”


——Rust 顾问兼开源框架开发者

(二)效率

当然,另一个重要因素还是效率

这一点上,特别在极端情况下,Rust的能力开始突出,无论是超大规模(比如数据中心)还是超小规模(比如嵌入式系统):

“我希望把机器资源留给核心计算,而不是让监控程序占用资源。”

——一位从事数据科学平台开发的软件工程师如此说道

“使用 Rust 还能带来速度上的优势。例如,仅仅将 Python 组件替换为 Rust 组件,就使速度提升了 100 倍。”

——一家医疗器械初创公司的 Rust 开发工程师

在与运行“大规模”工作负载的客户交谈时,效率问题尤其经常被提及,因为即使是微小的性能提升也能转化为巨大的成本节约:

“我们有一个库,实际上它就像一个嵌入式数据库——部署在许多机器上。它最初是用 Java 编写的,最近我们把它从 Java 重写成了 Rust,性能提升了近 9 到 10 倍。”

——一位从事云基础设施服务的杰出工程师

“我发现,在同一个模块中,用 Java 代码加载虚拟机与用 Rust 代码加载虚拟机,效率相差 4 倍+。这将节省大量的数据中心成本。”

——一家专注于金融服务的后端工程公司创始人

另一方面,从事嵌入式开发的开发人员则强调了 Rust 能够提供对系统细节的底层控制和访问

“Rust 正是我一直在寻找的 C 语言替代品。”

——一家专注于金融服务的后端软件公司创始人

“如果你要编写一些新的东西,而且是做一些底层系统性的工作,我认为Rust真的是唯一的选择。”

——位杰出软件工程师

许多人还提到 Rust 的辅助工具的重要性,这些工具能够帮助他们快速上手,尤其是编译器的错误信息:

“我认为我能够成功学习 Rust 的一个重要原因,在于它的工具链。对我来说,Rust 语言本身很有挑战性,但它的工具链却非常易于使用。”

——某开发者工具软件公司技术总监

“这套工具对我以及我们来说都非常实用。我认为使用 Rust 的主要方式就是通过它的工具生态系统。我用 Cargo 构建代码,也用 Cargo 进行测试。我们所有工作都依赖 Clippy。”

—— 一位从事安全关键型机器人项目的嵌入式系统工程师

“我认为 Rust 编译器提供的错误信息与建议也超级有用。”

——一位专门研究形式化验证的自动化系教授

(三)可扩展性

最后,Rust 最重要的优点之一是它的可扩展性

无论是编程语言本身还是通过 crates.io 生态系统,Rust 的设计宗旨都是让最终用户能够创建满足自身需求的库与抽象层:

“Crate 生态系统结合稳定性保证和语义化版本控制,使其成为我见过的最佳即用型生态系统。”

——计算机科学教授兼编程语言设计师

“我认为过程宏是 Rust 的一项非常强大的功能。”

——一位Rust 网络库的创建者与维护者说

“Rust 的一大优点是上手极其容易,代码复用非常便捷,可以快速尝试新工具、新库等等……所以对我来说,它作为一个实验平台非常棒。”

——一位专注于嵌入式和实时系统的 Rust 专家和顾问

但是实际上,人们所热爱的是Rust给的那种掌控感与多才多艺的感觉。


可靠性、效率、工具、生态系统,这些都是人们欣赏Rust 的地方。但他们真正热爱的并非其中任何一项,而是这些优点的完美结合,这使 Rust 成为一款值得信赖、功能全面的工具,几乎可以解决任何问题

“当我了解到Rust的时候,我就想‘没错,这就是我一直在寻找的语言’。有了它,我就不用再考虑C和Python了。所以我必须用Rust,因为有了它,我可以实现从底层到顶层的各种功能。”

——非洲软件工程师兼开发者社区组织者

“我想要一种能够从底层到架构都能良好运行的语言,无论是嵌入式应用还是非常复杂的应用程序都能轻松应对。”

——计算机科学教授兼编程语言设计师

“如果 Rust 要以某种特定方式推销自己,我会说它是一种高性能、高表达力的通用语言,其最大的优势在于你可以用它编写从底层到顶层的所有代码。”

——一位专注于嵌入式和实时系统的 Rust 专家和顾问

是的,Rust语言的每个部分对于整体运作都是必不可少的。

如果可靠性下降,你就不会信任它:你会对每次部署都犹豫不决,不敢重构,也不愿意让初级开发人员接触关键路径。

“Rust 降低了门槛。编写正确的 Rust 代码要容易得多。作为团队负责人,当经验较少的工程师参与到这些关键应用程序的开发中时,我感到更加安心。”

——一位从事云基础设施服务的杰出软件工程师

“我编写 Rust 软件的经验是,一旦程序运行起来,它就能一直稳定运行。这得益于我们对语言向后兼容性的精心设计,以及对整个生态系统的悉心维护。”

——一位专注于嵌入式和实时系统的 Rust 专家和顾问

有良好可靠性还能提供保障,帮助人们进入新的领域——无论你是正在学习入门知识的新手,还是冒险进入陌生领域的专家:

“Rust 会带你接触到所有这些东西,比如 match 以及所有这些非常棒的函数式编程方法。”

—— 一位拥有 Rust 生产经验的软件工程师

我认为 Rust 的所有权机制对普通 Rust 程序员和产品验证人员都很有用。它能让你在函数范围内非常清楚地知道你修改了什么、没有修改什么、哪些使用了别名、哪些没有使用别名。

—— 一位专门研究形式化验证的教授

“我发现了 Rust语言……基本上就是用它来增强自己作为独立固件开发人员的信心。”

——一位从事汽车数字座舱系统开发的软件工程师

如果去掉效率和底层控制,有些领域你就进入不了:例如嵌入式系统、实时应用,以及任何对每个周期成本都很在意的地方。

“Rust 的性能简直太棒了。它不仅性能卓越,而且非常安全。当我们把 C++ 和 C 库或 C 应用程序重写成 Rust 时,它们最终都会运行得更快,因为 Rust 在内存布局方面做得更好。”

—— 一位负责消费者购物体验的首席软件工程师

“十次里有九次,我编写的微控制器代码只进行单元测试。我把它放到实际硬件上,一次就能成功。”

——一位从事安全关键型机器人技术的嵌入式系统工程师

“我有信心构建可扩展的系统。”

——一位在媒体和流媒体平台拥有20年经验的工程经理

如果没有工具和生态系统,你就无法开始;或者你也可以开始,但这会非常艰难,而且你永远不会感到有成效。

“对我来说,Rust 语言本身很有挑战性,但它的工具链却极其简单易用……我可以直接开始编写代码,它就能编译运行,这对我来说意义重大。”

——开发者工具公司创始人兼首席执行官

“Cargo 是一款非常棒的包管理器。它可能是我使用过的最好的包管理器。我几乎没遇到过 Cargo 的问题。它真的很好用。”

—— 拥有 Rust 生产环境开发经验的软件工程师

“Rust 编译器在错误处理方面非常出色。它生成的错误类型非常实用。不仅如此,它还能捕获其他语言可能无法捕获的错误。”

——一位从事云基础设施服务的杰出研发工程师

结果:Rust 成为通往新领域的超级门户

当我们把所有这些要素结合在一起时,有趣的事情发生了——Rust 已经成为通往原本无法触及领域的门户

我们听到了许多这样的故事:Rust 让许多人重拾信心,从而改变了人们的职业生涯,使他们能够应对以前无法解决的问题。

“我原本是学习土木工程专业的,后来自学了前端开发。我没有任何计算机基础。我对 Rust 以及围绕它设计的分布式系统产生了浓厚的兴趣。于是我转了专业,同时学习计算机科学和 Rust。”

——一位转型从事密码学研究的软件工程师

“过去25年,我一直在一家跨国工程技术公司的子公司工作,主要从事Java软件开发……两年前,我开始涉足汽车行业。在这种情况下,自然而然地出现了两个选择:要么开始使用C++(但我并不想这么做),要么抓住机会深入探索新兴的Rust生态系统。”

——汽车嵌入式系统高级软件工程师

“我最初从事区块链领域。目前我的日常工作是做其他事情。实际上,Rust 为我进入这个领域铺平了道路。”

——Rust 开发者兼航空航天社区领袖

“在此之前,我从事动态编程语言(尤其是 Ruby)的开发工作长达十年,主要开发 Web 应用程序。我想选择一种专注于系统编程的语言,所以我选择了 Rust。这对我来说是一次职业转型。”

——Rust 顾问兼作家,从事汽车系统和区块链基础设施相关工作多年

语言的一些平衡特性亦至关重要。

Rust 的每个属性对于其跨领域的通用性都非常重要。但是,如果过度使用某些属性,或者缺少其他属性,它们会成为某种障碍。

例如:复杂的 API 和类型复杂性


Rust 最强大的特性之一是其类型系统能够对应用程序领域的各个方面进行建模。这不仅可以防止 bug 的出现,还能让新手更容易上手

“有人没有直接使用原始位字段,而是将其编码到了类型系统中。因此,当你有一个类似‘开门’的函数时,如果门已经打开,你就不能再传递‘开门’这样的值。类型系统会直接将其排除并拒绝。”

——一位从事汽车数字座舱系统开发的软件工程师如是说

“你可以创建合约。例如,规定何时允许你按什么顺序使用锁。”

——一位从事汽车中间件开发的高级嵌入式系统工程师

然而,问题在于,有时将这些不变量编码到类型中的工作可能会产生比问题本身更复杂的感觉:

“当 Rust 既支持异步又支持泛型,并且还支持生命周期时,这些类型就会变得非常复杂,所以你必须精通 Rust 才能理解或编写出这样的代码。”

——一位拥有生产环境 Rust 经验的软件工程师

“与其说是写意大利面条式代码,不如说是意大利面条式打字”

——汽车半导体公司平台架构师

“我觉Rust更晦涩难懂,更难理解。类型不仅描述了对象的接口,还描述了它的生命周期以及访问方式,无论是在栈上还是堆上,其中包含了不少信息。”

——一位从事数据科学平台开发的软件工程师

一些“复杂特性”让一些开发者主张说,除非你真正需要,否则不要使用 Rust 的一些更复杂的功能:

“我的观点是,Rust 中那些难点——比如 traits、lifetimes 等等,实际上并不一定能提高生产力的实质。我们可以通过调整学习曲线和使用库,让用户更快地上手。”

——Rust 网络库的创建者和维护者

例如:Rust 异步生态系统性能良好,但在支持性方面尚未达到标准。


异步 Rust 极大地推动了 Rust 在网络系统构建领域的应用。但许多评论者都提到,“异步 Rust”似乎比同步 Rust 要难得多:

“我觉得学习Rust就像爬坡,然后是跨越,最后才接触到异步编程。所以我们的目标是激发大家对Rust的热情,让大家能够跨越那道令人沮丧的鸿沟,最终拥抱异步的Rust。”

——一位从事汽车数字座舱系统开发的软件工程师

“我的总体印象其实相当负面。感觉它还不成熟……你需要掌握很多晦涩难懂的知识才能有效使用它,比如 Pin——我根本不知道怎样告诉你 Pin 是怎么工作的,对吧?”

——一位拥有深厚 Rust 专业知识的研究软件工程师

为了让 Rust 真正成为“值得信赖的工具,助你应对全新领域”,用户需要对 Rust 的期望和知识运用到新的领域中。使用异步编程时,不仅存在一些语言特性缺失(例如,async fntrait 直到2024年才推出,且仍存在一些不足),而且用户在其他领域赖以“弥合差距”的支持性工具与生态系统也未能很好地发挥作用:

“我原本不赞成使用异步,因为错误信息太难处理了。”

——一位桌面应用程序开发人员

“很多时候,你觉得某个库很有用,想用它,结果却立刻被锁定在 tokio-rs 或其他运行时环境中,这有点令人失望,因为我本来也想自己写一个库,现在却被锁定在一个运行时环境中。”

——一位从事 Linux 功能安全工作的安全系统工程师

“我们通常用 Rust 编写服务,而且大量使用异步编程,因为很多用于与数据库和其他资源交互的库都是异步的。我们遇到的问题包括,比如无法解释的高 CPU 利用率。唯一直接的排查或诊断方法就是附加 GDB,看看所有线程都在做什么。提到GDB——我的意思是,这显然不是 Rust 的问题——但 GDB 并不是一个很容易使用的工具,尤其是在大型应用程序中。而且使用异步编程时,情况就更加复杂了,因为你看不到代码的运行情况,它实际上只是占用了堆内存。一开始,我并没有意识到这一点。”

——一位在一家同时使用 Rust 和 Python 公司的资深 Rust 开发人员

异步操作非常重要,值得我们不断地深入研究。

我们的研究还揭示了许多用户的痛点,但深度不足以提供更具体的见解。这可以作为未来用户研究团队的一项重要任务。

例如:crates.io 上丰富的盒子资源是关键的推动因素,但也可能成为一种障碍。

我们之前提到过,Rust 的可扩展性是其实现多功能性的关键因素之一。诸如可重载运算符、trait 和宏之类的机制,使得库能够为开发者创造丰富的体验;一个精简的标准库加上便捷的包管理,鼓励开发者构建一个涵盖常见和特定需求的丰富 crate 生态系统。

然而,特别是在用户刚开始使用 Rust 时,这种可扩展性可能会以牺牲支持性为代价,因为“强制选择”会让人感到不知所措:

“要用的那些库其实很难发现。关于哪些特定任务该用哪些库,存在着一层隐性知识,需要通过经验和实践才能积累。每个人都在做这方面的研究。”

——一位从事开发者框架开发的Web开发者与会议演讲者

“Crates.io 提供了一些你做决策所需的元数据,但它并非一站式服务,对吧?你不能直接在 crates.io 上问‘我想实现 X,应该用哪个库’——它不会直接回答这个问题。”

—— 一位研究软件工程师

Rust 官方组织历来不愿“认可”生态系统中的特定crate(译为容器或包、包装箱之意,是 Rust 的编译单元)。但现实情况是,有些crate几乎无处不在。这对新用户来说尤其难以驾驭:

“教程里用的是Result>`anyhow-result`,但其他人都不太用。大家都用的是`anyhow-result`……我一开始也用了`anyhow-result`,但我找到的所有资料里的示例代码都是用`anyhow-result`的。这有点不匹配,我不知道该怎么办。”

——数据科学平台软件工程师

“目前对于应该使用哪些第三方库(3P crate)并没有明确的共识。有时真的很难说清楚——到底该用哪个 CBOR crate?也很难看出哪些 crate 仍在积极维护。crates.io 上 crate 的数量如此之多,这带来了一些风险。”

——某大型科技公司的 Rust 团队负责人

建议:列举 Rust 的设计目标并将其融入我们的流程中


我们建议开始时撰写一份 RFC(征求意见稿),明确我们在 Rust 开发过程中要达成的目标。

该 RFC 应该涵盖使用 Rust 的整体体验(包括语言、工具和库)。这份 RFC 可以由拟成立的用户研究团队撰写,但目前尚不清楚应该由谁来审核——或许是用户研究团队本身,或许是语言领导委员会。

这种文档阐述了 Rust 真正的“赋能魔力”,源于它同时实现了多种不同的特性——可靠性、效率、底层控制、支持性等等。如果能有一个规范的、包含这些特性的列表,供我们社区共同参考,并在评估 RFC 或其他设计方案时使用,将会非常有价值。

已有不少方法可供开发者借鉴(例如,Tyler Mandry 的这篇文章、《Rustacean Principles》或《Rust Design Axioms》)。我们研究发现,无需定义哪些值“最重要”。我们发现,Rust 要想真正发挥作用,必须同时兼顾所有因素。与其进行排序,不如描述以下情况或感受:

  • 不要(太少地)达到目标
  • 找到最佳平衡点
  • 做得太过火


这种“恰到好处”的框架,有助于开发者们认识到自己所处的位置并纠正方向,而不会造成虚假的等级制度。

加倍重视可扩展性


我们建议Rust团队将可扩展性作为核心策略加以强化。

Rust 的可扩展性——包括 trait、宏和运算符重载等,这一直是其多功能性的关键。

但目前这种可扩展性主要集中在某些领域:类型系统和早期的 proc 宏。应该将其扩展到支持性接口(更好的诊断与 crate 指导)以及编译工作流程(允许 crate 在构建过程的更多阶段进行集成)。

Rust 的可扩展性,是其实现多功能性的关键所在,而这种多功能性正是人们喜爱 Rust 的重要原因。借助诸如 proc 宏、trait 系统和借用检查器等机制,Rust crate 能够提供高级且优雅的接口,并最终编译成高效的机器代码。

在最佳状态下,Rust会给人们一种神奇的感觉。

可扩展性面临的另一个主要挑战在于构建系统与后端。Rust 目前的扩展机制(例如 build.rs、proc-macros)主要集中在编译过程的早期阶段。但是,从互操作、定理证明、GPU 编程到分布式系统,Rust 的许多扩展功能都受益于能够集成到编译过程的其他阶段。Stable MIR项目和build-std 项目的目标就是这类工作的两个例子。

加强 Rust 的可扩展性不仅能让当前的 Rust 更易于使用,还能使其在新领域得到应用和支持。特别是安全关键型应用,需要大量的自定义代码检查工具和工具来支持相关的标准。编译器可扩展性使 Rust 能够以更通用的方式满足这些特殊需求。

帮助用户更快熟悉 Rust 生态系统


一个建议是,Rust 要找到更多方法帮助用户更好地了解 crates.io 生态系统。

如今的 Rust 编程已经习惯依赖于自定义 crate ,用来实现从错误处理到异步运行时的全部功能。

依赖生态系统有助于 Rust 扩展到更多领域,并催生出更多地创新技术方法。但对于初学者来说,找到合适的 crate 却是一个真正的难题。Rust 官方保持着谨慎的中立立场,这固然是好事,但也意味着用户无法获得关于一套好的“入门级”crate 建议。

所以,这个问题的正确解决方案并不是显而易见。扩展标准库可能会限制进一步的实验;“祝福式”crate 则存在政治风险。但仅仅因为找到正确的解决方案很困难,并不意味着我们应该忽视这个问题。Rust 一直以来都在探索创造性的解决方案来应对旧的权衡取舍,人们应该将这种精力投入到解决这个问题上。

解决方案之一是增强库之间的互操作性。这可以通过添加关键的互操作特性(如针对异步操作的特性)或认可标准构建模块(例如,http为 HTTP 库提供类型定义的 crate)来实现。

结语

本文有一些长,似乎还有一些抽象,以下我们将要点总结如下:

  • 人们喜爱 Rust 的原因在于它赋予了开发者解决棘手问题与开拓全新领域的能力。这并非源于某一项单一特性,而是众多特性之间精心平衡的结果;任何一项特性的缺失都会对语言造成显著影响。
  • 我们提出三项建议,以帮助 Rust 继续在各个领域和使用级别上有效扩展:
    • 列举并描述 Rust 的设计目标,并将它们融入我们的流程中,以帮助确保未来的语言设计者和更广泛的生态系统能够遵守这些目标。
    • 加倍重视可扩展性,引入 crate 对开发体验和编译流程的影响。
    • 帮助用户浏览 crates.io 生态系统并实现更顺畅的互操作性


在2025年,72%的Rust用户表示他们想继续使用它。


过去的日子,Rust的得分高于其他任何语言,但是今年Gleam紧随它其后,达到了70%!它也很棒!而且Gleam关键词也选得很好:)

 

那么,我们怎样才能确保不搞砸呢


接下来,我以一句常用语来结束本文:


……对于睡眠不足的经验丰富的开发者来说,他们的行为往往很像新手

作者:场长

参考:

https://blog.rust-lang.org/2025/12/19/what-do-people-love-about-rust/

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。