来自 Rust 官网的王婆卖瓜

这是一篇来自 Rust 官网的文章。

该文章的故事中:

  • 一个土木工程转码的开发者,靠 Rust 闯进了密码学领域;
  • 一个写了 25 年 Java 的工程师,因为它转投汽车嵌入式开发;
  • 甚至有人用它从前端一路写到了底层固件。

当然,不止有好的,也有坏的:

  • 类型系统复杂度高;
  • 异步生态不够成熟;
  • 生态选择成本高。

事实上,自 2015 年以来,Rust 每年都被 Stack Overflow 评为"最受欢迎"的编程语言。

也许,这篇用户心声,能扒透 Rust 让人又爱又恨的真相。

好的,正文开始!(原文在最后)

Rust 用户心声:为何它能收获极致忠诚?

自 2015 年发布 1.0 版本以来,Rust 每年都被 Stack Overflow 评为"最受欢迎"(现更名为"最受推崇")的编程语言。这意味着 Rust 用户不仅愿意继续用它处理高性能任务或嵌入式开发,还希望借助它编写 shell 脚本、Web 应用,以及其他各种意想不到的场景。我们的一位受访者精准概括了这种感受:"到了现在,我再也不想用其他任何语言写代码了,满脑子都是 Rust。"

在分析愿景文档中的数据时,我们真正想弄清的核心问题是:是什么催生了人们对 Rust 如此强烈的忠诚度? 结合访谈内容,答案既简单又复杂。简而言之,Rust 赋予了他们编写可靠且高效软件的能力。如果你觉得这句话很熟悉,那是因为------这正是我们官网的口号。而更值得探究的问题是:这种赋能是如何实现的?它对 Rust 的演进方向又意味着什么?

人们偏爱 Rust 的哪些特质?

我们发现了一个关键现象:每一次访谈中,无论受访者是刚写完第一行 Rust 代码的新手,还是拥有多年经验的老手;无论他们正在构建大规模数据集群、嵌入式设备,还是只是随手尝试,总会提到一些共性的优点------这些正是他们偏爱 Rust 的核心原因。

首先是 可靠性。人们钟爱那种"只要能编译,就能稳定运行"的踏实感:

"我最喜欢 Rust 的一点是,代码只要能编译通过,通常就能正常运行。这种体验太棒了,是我用 Java 时从未有过的。" ------ 汽车嵌入式系统领域高级软件工程师
"Rust 是真正能为你兜底的语言之一。用它写代码,你能睡得更安稳,甚至不需要时刻保持'极致聪明'的状态。" ------ Rust 顾问、开源框架开发者

当然,另一个核心优势是 效率。这一点在极端场景下尤为突出,无论是大规模部署(数据中心)还是极小体量设备(嵌入式系统):

"我希望把机器资源都留给[核心]计算任务,而不是被监控程序占用。" ------ 数据科学平台开发软件工程师
"使用 Rust 还能带来性能飞跃。比如,......我们仅仅把某个 Python 组件替换成 Rust 组件,就实现了百倍的速度提升。" ------ 某医疗设备初创公司 Rust 开发者

在与处理"大规模"工作负载的客户交流时,效率是高频话题------哪怕是微小的性能提升,都可能转化为巨额成本节约:

"我们有一个类似嵌入式数据库的库,部署在大量机器上。它最初是用 Java 编写的,最近我们用 Rust 重写后,性能提升了近 9 到 10 倍。" ------ 云基础设施服务资深工程师
"我观察过同一个模块,用 Java 加载虚拟机的代码和 Rust 相比,效率差了 4 倍。这在数据中心成本上能省下一大笔钱。" ------ 金融服务后端工程公司创始人

而在另一个极端场景中,从事嵌入式开发或底层工作的开发者,则格外看重 Rust 提供的 底层控制能力与系统细节直接访问权限

"Rust 正是我一直找的 C 语言替代品。" ------ 金融服务后端工程公司创始人
"如果要开发新项目,且涉及底层系统级工作,我认为 Rust 确实是唯一真正合适的选择。" ------ 资深工程师

许多人还强调了 Rust 强大的 工具支持 的重要性------这些工具帮助他们快速上手,尤其是编译器给出的错误信息:

"我能成功学会 Rust,很大程度上要归功于它的工具链。对我来说,Rust 语言本身确实有难度,但工具链却异常简单易用。" ------ 某开发者工具公司高管
"这套工具链对我和团队都非常实用。我和 Rust 交互的主要方式就是通过它的工具生态:用 Cargo 构建代码、用 Cargo 测试代码,几乎所有事都依赖 Clippy。" ------ 安全关键型机器人开发嵌入式系统工程师
"Rust 编译器的错误信息和建议太有帮助了。" ------ 形式化验证领域教授

最后,Rust 最核心的优势之一是 可扩展性。无论是语言本身,还是通过 crates.io 生态系统,Rust 的设计初衷就是让用户能创建满足自身需求的库和抽象层:

"crate 生态系统结合稳定性保障和语义化版本控制,成为了我见过的最出色的'即拿即用'生态系统。" ------ 计算机科学教授、编程语言设计者
"我认为过程宏(proc macros)是 Rust 的一项强大超能力。" ------ Rust 网络库创建者与维护者
"Rust 在帮助开发者快速上手、复用代码、快速尝试新工具新库等方面表现极佳......所以对我来说,它作为实验平台简直完美。" ------ 嵌入式与实时系统 Rust 专家、顾问

但人们真正热爱的,是那种被赋予力量的全能体验。

可靠性、效率、工具链、生态系统------这些都是人们认可 Rust 的点。

开发者并非被某一项特性吸引,而是这些特性的叠加,让 Rust 成为了 值得信赖、用途广泛 的工具,几乎能应对任何问题:

"第一次了解 Rust 时,我就想:'对,这就是我一直找的语言。' 它能让我彻底摆脱'选 C 还是选 Python'的纠结。所以我必须用 Rust,因为它能让我从底层到高层自由发挥。" ------ 非洲软件工程师、社区组织者
"我希望找到一种能覆盖全技术栈的语言,从底层嵌入式系统到高端复杂应用,都能有出色表现。" ------ 计算机科学教授、编程语言设计者
"如果要给 Rust 定一个推广方向,我可能会说:它是一门高性能、高表达力的通用语言,最棒的是,你能用它编写从技术栈顶层到底层的所有代码。" ------ 嵌入式与实时系统 Rust 专家、顾问

每个特性都是整体价值的核心支撑

如果剥离可靠性,你就无法信任这门语言:每次部署都会心存顾虑,不敢重构代码,也不愿让初级开发者接触核心代码路径。

"Rust 降低了这个门槛。编写正确的 Rust 代码变得容易多了。作为团队负责人,当经验较少的工程师参与核心应用开发时,我会更安心。" ------ 云基础设施服务资深工程师
"我用 Rust 开发软件的体验通常是:一旦运行起来,就会持续稳定运行。这得益于语言本身对向后兼容性的精心设计,以及整个生态系统对稳定性的高度重视。" ------ 嵌入式与实时系统 Rust 专家、顾问

可靠性还提供了"安全护栏",帮助人们涉足新领域------无论你是刚入门的新手,还是探索陌生领域的专家:

"Rust 会引导你理解各种概念,比如 match 表达式,以及许多优秀的函数式编程方法。" ------ 具备生产环境 Rust 经验的软件工程师
"我认为 Rust 的所有权机制不仅对普通 Rust 开发者有用,对形式化验证也很有价值。它能让你在函数作用域内清晰知道:哪些内容被修改、哪些没有,哪些被别名引用、哪些没有。" ------ 形式化验证领域教授
"我发现了 Rust......开始用它,主要是为了给自己多一点信心------毕竟我是一名独立固件开发者。" ------ 汽车数字座舱系统开发软件工程师

如果剥离效率和底层控制能力,有些领域就无从涉足:嵌入式系统、实时应用,以及任何对"每周期成本"敏感的场景。

"Rust 的性能太惊人了。它不仅更快,还更安全。当我们把 C++ 或 C 的库、应用重写成 Rust 时,它们往往会变得更快------因为 Rust 在内存布局上表现更优。" ------ 主导消费者购物体验的高级首席工程师
"十次中有九次,我编写微控制器代码时,只需通过单元测试验证,部署到真实硬件上就能一次运行成功。" ------ 安全关键型机器人开发嵌入式系统工程师
"我能自信地构建可扩展系统。" ------ 拥有 20 年媒体与流媒体平台经验的工程经理

如果剥离工具链和生态系统,入门就会举步维艰:勉强能开始,但过程异常艰难,永远无法感受到高效产出的快感。

"对我来说,刚开始学 Rust 时,语言本身确实有挑战,但工具链却异常简单......我只需动手写代码,它就能自动构建运行,这一点对我来说意义重大。" ------ 某开发者工具公司创始人、CEO
"Cargo 是一款出色的包管理器,可能是我用过最好的。我几乎从没遇到过 Cargo 的问题,它就是这么稳定可靠。" ------ 具备生产环境 Rust 经验的软件工程师
"Rust 编译器的报错功能太出色了。它不仅能给出极具帮助的错误信息,还能捕获其他语言可能忽略的错误。" ------ 云基础设施服务资深工程师

Rust:通往新领域的敲门砖

当所有这些特性汇聚在一起,奇妙的事情就发生了:Rust 成为了通往原本难以触及领域的"入口"。我们听到了一个又一个故事,讲述人们借助 Rust 赋予的信心,挑战了过去不敢尝试的领域,甚至改变了职业生涯:

"我原本是土木工程专业,自学前端开发,没有任何计算机背景。后来我对 Rust 和分布式系统产生了兴趣,开始研究相关设计与架构。于是我转了专业,同时学习计算机科学和 Rust。" ------ 正转型密码学研究的软件工程师
"过去 25 年,我一直在某跨国工程科技公司的子机构工作,主要做 Java 开发......两年前,我开始关注汽车领域。当时有两个选择:要么学 C++(这不是我想做的),要么抓住机会深入探索刚兴起的 Rust 生态。" ------ 汽车嵌入式系统领域资深软件工程师
"我最初是从区块链领域接触 Rust 的。现在我的日常工作涉及其他领域,但 Rust 确实为我打开了进入区块链领域的大门。" ------ Rust 开发者、航空航天社区负责人
"在此之前,我有 10 年用动态语言(尤其是 Ruby)开发 Web 应用的经验。我希望转向系统编程领域,所以选择了 Rust 作为新方向。这是一次职业生涯的转型。" ------ 汽车系统与区块链基础设施 Rust 咨询师、作者

平衡是关键

Rust 的每一项特性,对其跨领域通用性都至关重要。但如果某一项特性被过度强调,或缺失其他关键属性,反而会成为障碍。

复杂的 API 与类型复杂性

Rust 最强大的特性之一,是其类型系统能够建模应用领域的各类场景。这不仅能预防错误,也能帮助初学者快速上手:

"有人没有使用原始位域,而是把相关逻辑编码到类型系统中。比如,有一个'开门'函数,如果门已经处于打开状态,你就无法传入'开门'操作------类型系统会直接拒绝这种非法调用。" ------ 汽车数字座舱系统开发软件工程师
"你可以创建契约。比如,规定锁的使用顺序。" ------ 汽车中间件开发资深嵌入式系统工程师

但问题在于,有时把这些"不变性"编码到类型中的成本,会让代码比问题本身更复杂:

"当你面对一段同时包含异步、泛型和生命周期的 Rust 代码时,这些类型会复杂到让你几乎得成为'Rust 之神'才能理解,更别说编写了。" ------ 具备生产环境 Rust 经验的软件工程师
"与其说是面条式代码(spaghetti code),不如说是'面条式类型'(spaghetti typing)。" ------ 某汽车半导体公司平台架构师
"我觉得它更晦涩难懂。类型不仅要描述接口,还要包含生命周期、访问方式、数据存储在栈上还是堆上等信息------塞了太多内容。" ------ 数据科学平台开发软件工程师

这导致一些人主张:除非确实需要,否则不应使用 Rust 中更复杂的特性。

"我的观点是,Rust 中那些看似困难的部分------比如 trait、生命周期等------其实并不是高效开发的必要基础。我们完全可以通过优化学习曲线和库设计,让新人更快上手。" ------ Rust 网络库创建者与维护者

异步生态性能出色,但支持性尚不完善

异步 Rust 推动了 Rust 在网络系统构建领域的巨大突破。但许多开发者表示,"异步 Rust"比同步 Rust 难太多:

"我觉得学习过程就像先爬坡,然后突然跃升,接着就进入了异步领域。所以核心目标是激发足够的兴趣,让你能跨过'痛苦鸿沟',顺利进入异步 Rust 的世界。" ------ 汽车数字座舱系统开发软件工程师
"我的整体印象其实相当负面。它感觉还不够成熟......要有效使用它,你需要掌握大量晦涩的知识,比如 Pin------说实话,我都说不清 Pin 到底是怎么工作的。" ------ 具备 Rust 专业能力的研究型软件工程师

要让 Rust 真正实现"可靠工具,助力探索新领域"的体验,用户需要能将在 Rust 上积累的认知和经验迁移到新领域。但在异步编程方面,不仅语言特性存在缺失(比如,async fn 在 trait 中的支持直到去年才实现,且仍有空白),用户依赖的辅助工具链和生态系统在"弥合差距"上也不尽如人意:

"我倾向于避免使用 async,因为它的错误信息太难处理了。" ------ 桌面应用开发者
"现实中还有很多情况:你看到某个库看起来有用,想使用它,结果它直接把你绑定到 tokio-rs 或其他某个运行时上。这让我有点失望,因为我本来想写一个通用库,现在却被迫依赖特定运行时。" ------ 从事 Linux 功能安全工作的安全系统工程师
"我们通常用 Rust 开发服务,而且大量使用异步编程------因为很多与数据库和其他组件交互的库都是异步的。当遇到问题时,比如出现无法解释的高 CPU 占用,唯一直接的排查方式就是:好吧,我得挂载 GDB,看看所有线程在做什么。GDB 本身------我意思是,这显然不是 Rust 的问题------但 GDB 本身就不好用,尤其是在大型应用中。......而在异步场景下,情况更糟,因为你看不到代码在运行,它实际上只是静止地躺在堆上。一开始,我甚至没意识到问题出在这里。" ------ 某同时使用 Rust 和 Python 公司的资深 Rust 开发者

异步编程的重要性值得深入探讨。我们的研究发现了许多开发者的挫败感,但尚未获得足够具体的洞察。这将是未来用户研究团队可以推进的重点任务。

crates.io 丰富的 crates 是核心助力,但也可能成为障碍

我们之前提到,Rust 的可扩展性是其实现多用途的重要基础。重载操作符、trait、宏等机制,让库能为开发者提供丰富体验;极简标准库结合便捷的包管理,也催生了大量 crate,覆盖从通用需求到小众场景的广泛领域。但尤其是对初学者而言,这种"可扩展性"可能会以"支持性"为代价------当"选择的暴政"让人不堪重负时:

"合适的 crate 很难被发现。存在一层隐性知识:告诉你特定场景该用哪些 crate,而这些知识通常只能通过经验或试错积累。每个人都在自己做调研。" ------ 开发者框架领域 Web 开发人员、会议演讲者
"crates.io 提供了一些决策所需的信息,但它并不是'一站式解决方案',对吧?你不能直接去 crates.io 问'我想实现 X 功能,该用哪个库?'然后得到答案。" ------ 研究型软件工程师

Rust 官方组织历来不愿"官方推荐"生态中的特定 crate。但现实是,有些 crate 已经无处不在。这对新用户来说尤其有挑战性:

"教程里用的是 Result<Box>,但其他人根本不这么用。大家都用 anyhow-result......我一开始也跟着教程用 Result,结果找到的所有资料示例都是 anyhow。这种不匹配让我很困惑,不知道该怎么做。" ------ 数据科学平台开发软件工程师
"目前没有明确的共识指导该使用哪些第三方 crate。......有时候真的很难判断------比如,到底该用哪个 CBOR crate?......很难看出哪些 crate 还在积极维护。......crates.io 上 crate 太多这个事实,本身就带来了一定风险。" ------ 某大型科技公司 Rust 团队成员

建议

明确 Rust 的设计目标,并融入流程

我们建议制定一份 RFC,明确 Rust 开发过程中追求的核心目标。这份 RFC 应覆盖 Rust 的整体使用体验(包括语言、工具和库)。可由提议中的用户研究团队撰写,不过目前尚不清楚审批主体------可能是用户研究团队本身,也可能是领导委员会。

本文指出,Rust 真正的"赋能魔力"源于多个特性的协同作用:可靠性、效率、底层控制能力、支持性等。拥有一份社区公认的权威价值清单,将有助于大家共同参考,并在评估 RFC 或其他设计方案时作为依据。

此前已有相关尝试可借鉴。我们的研究发现一个关键结论:无需定义哪些价值观"最重要"。要让 Rust 真正发挥价值,必须 同时满足所有这些因素。与其对这些目标排序,不如描述三种状态下的体验:

  • 未达标(不足)
  • 恰到好处(最佳状态)
  • 过度追求(过剩)

这种" Goldilocks 原则"(金发姑娘原则)框架,能帮助人们判断当前所处状态,及时调整方向,而非人为制造错误的优先级层级。

进一步强化可扩展性

我们建议将"增强可扩展性"作为核心战略。Rust 的可扩展性------包括 trait、宏、操作符重载等机制------是其高灵活性的核心。但当前的可扩展性主要集中在特定领域:类型系统和早期阶段的 proc 宏。我们应将其拓展至 支持性接口 (比如,crate 提供更优的诊断信息和使用指导)和 编译流程(允许 crate 在构建过程的更多阶段集成)。

Rust 的可扩展性是其实现多用途的重要基础,这种灵活性也是人们喜爱 Rust 的原因之一。借助 proc 宏、trait 系统和借用检查器等机制,Rust 的 crate 能提供高层级、优雅的接口,最终编译为高效的机器代码。最佳状态下,这种体验甚至有点像"魔法"。

遗憾的是,尽管 Rust 为 crate 提供了构建安全高效抽象的优质工具,但尚未提供构建真正"有帮助性"接口的工具。在 Rust 内置语言概念中,我们已努力打造有效的错误信息引导用户成功;还随编译器提供了 lints,用于捕获常见错误或强制重要约定。但这些优势并未覆盖到 crate。诸如 RFC #3368 这样的提案(引入诊断命名空间和 #[diagnostic::on_unimplemented] 等特性),表明 Rust 已开始向这个方向探索。我们应继续推进,并寻找更多深入发展的机会,尤其是在经常创建 DSL 类接口的 proc-macros 领域。

可扩展性的另一个主要挑战在于构建系统和后端。目前 Rust 的可扩展机制(如 build.rsproc-macros)主要集中在编译过程的早期阶段。但许多对 Rust 的扩展------从互操作性到定理证明,再到 GPU 编程和分布式系统------若能融入编译流程的其他阶段,将收获巨大价值。Stable MIR 项目和 build-std 项目,正是这类工作的典型代表。

进一步强化可扩展性,不仅能让当前的 Rust 更易用,还能推动并支持 Rust 在新领域的应用。尤其是安全关键型应用,往往需要大量定制化的 lints 和工具来满足相关标准。编译器的可扩展性,能让 Rust 以更通用的方式支持这些特定需求。

帮助用户快速定位 Rust 生态系统

我们建议探索有效方式,帮助用户更好地导航 crates.io 生态系统。如今,Rust 的常规开发实践高度依赖各类第三方 crate,从错误处理到异步运行时无一例外。借助生态系统,Rust 才能拓展至更多领域,催生创新解决方案。但对初学者而言,如何选择合适的 crate 是真实存在的障碍。Rust 官方组织保持谨慎中立的立场值得肯定,但这也导致用户无法获得"入门推荐 crate"的明确指导。

目前尚无显而易见的解决方案。扩大标准库可能限制进一步实验;为特定 crate"背书"则可能引发争议。但最优解难以确定,不代表我们可以忽视这个问题。Rust 历来擅长在传统权衡中探索创新解决方案,我们也应将这种创造力投入到这个问题的解决中。

部分解决方案在于提升库之间的互操作性。比如,引入关键的互操作 trait(尤其是在异步场景),或对一些基础构建模块进行"官方认可"(比如 http crate,它为 HTTP 库提供了类型定义)。同时,调整一致性规则(coherence rules)也可能有帮助------当前规则不允许新的互操作 trait 在生态系统中逐步引入和采用。

总结

本文核心观点总结如下:

  • 人们喜爱 Rust,源于它赋予开发者解决复杂问题、进入新领域的能力。这种吸引力并非来自单一特性,而是多种因素精心平衡的结果;若任何一项被削弱,语言的整体体验将大幅受损。

  • 我们提出三条建议,助力 Rust 在更多领域和场景中持续拓展:

    • 明确并描述 Rust 的设计目标,将其融入开发流程,确保未来的语言设计者和整个生态系统都能遵循这些原则。
    • 进一步强化可扩展性,赋予 crate 影响开发体验和编译流程的更强能力。
    • 帮助用户更好地导航 crates.io 生态系统,实现更顺畅的库间互操作。
  1. 2025 年,72% 的 Rust 用户表示希望继续使用该语言。过去,Rust 的得分一直远超其他语言,而今年更是突破了 70%!恭喜他们!

  2. 嘿,fn 关键字的选择真不错。😉

  3. 而且......呃,我们该如何确保自己不会搞砸呢?↩️

  4. ......对于那些睡眠不足、行为上常常像新手一样"犯傻"的资深开发者来说。↩️

原文
blog.rust-lang.org/2025/12/19/...

相关推荐
鲁正杰1 天前
【运维部署】现代化内网穿透与文件共享方案 (Rust)
运维·开发语言·rust
superman超哥1 天前
Rust `‘static` 生命周期:从字面意义到深层语义
开发语言·后端·rust·生命周期·编程语言·rust static·深层语义
半夏知半秋2 天前
rust学习-Option与Result
开发语言·笔记·后端·学习·rust
superman超哥2 天前
Rust 结构体中的生命周期参数:所有权设计的核心抉择
开发语言·后端·rust·rust结构体·rust生命周期·所有权设计
lusasky2 天前
在Windows上编译、安装Rust
开发语言·windows·rust
半夏知半秋2 天前
rust学习-探讨为什么需要标注生命周期
开发语言·笔记·学习·算法·rust
superman超哥2 天前
Rust 生命周期边界:约束系统的精确表达
开发语言·后端·rust·rust生命周期边界·约束系统
superman超哥2 天前
Rust 生命周期省略规则:编译器的智能推导机制
开发语言·后端·rust·编译器·rust生命周期·省略规则·智能推导