Rust 为何能连续十年最受开发者喜爱

3 阅读9分钟

自 2015 年发布 1.0 以来,Rust 在 Stack Overflow 年度开发者调查中连续十年蝉联"最受喜爱语言"(现更名为"最受认可语言")。2025 年的数据显示,72% 的 Rust 使用者表示希望继续使用它。

这是一个值得认真对待的数字。人们喜欢 Rust,不只是因为它适合写底层系统代码,还因为他们在用它写 shell 脚本、Web 应用、命令行工具——各种你意想不到的场景。

Rust 官方 Vision Doc 工作组对大量开发者进行了深度访谈,试图回答一个核心问题:这种忠诚度究竟从何而来?

他们得到的答案,既简单又复杂。


简短的答案,写在官网首页

Rust 让开发者能够编写可靠(reliable)且高效(efficient)的软件

这句话是 Rust 官网的 slogan,但访谈数据给了它更具体的内容。


人们「欣赏」Rust 的四件事

一、可靠性:编译通过,基本就能跑

"我真正喜欢 Rust 的地方在于,它编译通过后,通常就能正常运行。这太棒了,在 Java 里我从来没有这种感觉。" —— 汽车嵌入式系统高级工程师

"Rust 就是那种会帮你兜底的语言。你会睡得更好,而且你实际上不需要那么聪明。" —— Rust 顾问及开源框架开发者

编译器严格的类型系统和所有权模型,让大量运行时 bug 在编译阶段就被拦截。对于需要长期维护的生产系统来说,这种"一次写对,长期稳定"的感觉至关重要。

"我使用 Rust 编写软件的经历是:一旦让它工作了,它就会持续工作。" —— Rust 专家顾问

二、高效性:从大规模数据中心到微控制器

"我们把一个 Java 编写的嵌入式数据库库迁移到 Rust,获得了接近 9 到 10 倍的性能提升。" —— 云基础设施服务杰出工程师

"同一个模块,Java 代码需要加载 VM,而 Rust 实现有 4 倍的效率差异。数据中心成本的节省是很大一笔钱。" —— 金融服务后端公司创始人

"把一个 Python 组件换成 Rust 实现,给我们带来了 100 倍的速度提升。" —— 医疗设备初创公司 Rust 开发者

在大规模工作负载场景下,哪怕微小的性能提升也能转化为可观的成本节省。在嵌入式场景下,Rust 提供了 C 语言级别的底层控制能力,同时附带内存安全保证。

"Rust 就是我一直在寻找的 C 语言替代品。" —— 后端公司创始人

"如果你要写新的底层系统相关的代码,Rust 说实话是唯一真正的选择。" —— 杰出工程师

三、工具链的友好程度

"我能成功学会 Rust,工具链是重要原因。语言本身很有挑战性,但工具链非常容易上手。" —— 开发者工具公司高管

"Cargo 是我用过的最好的包管理器,没有之一。我从来没有遇到过 Cargo 的问题,它就是好用。" —— 有生产 Rust 经验的工程师

"Rust 编译器给出的错误信息和建议非常有帮助。" —— 形式验证领域教授

编译器的错误提示不只告诉你哪里出错了,还会告诉你为什么,以及怎么改。这种设计在工具链层面把「可靠性」的理念贯彻了下去。

四、可扩展性:生态和语言本身都设计为可被扩展

"crates.io 生态结合稳定性保证和语义化版本控制,是我见过的最好的即取即用生态系统。" —— 计算机科学教授兼编程语言设计者

"过程宏(proc macros)是 Rust 真正的超能力。" —— Rust 网络库创建者和维护者

通过 trait、宏、运算符重载等机制,Rust 让第三方库能够创造出编译到高效机器码的高级抽象接口。这种设计让 Rust 能够跟随社区需求,不断延伸到新的领域。


人们真正「热爱」的,是这种感觉

上面那四点是人们「欣赏」Rust 的地方。但让他们「热爱」并持续留下来的,是这四者组合在一起带来的整体效果——Rust 成了一把可以带到任何场合的可信赖工具

"我想要一门语言,能从嵌入式一直用到高级应用,覆盖整个技术栈的每一层。" —— 计算机科学教授兼编程语言设计者

"我一了解到 Rust,就觉得:对,这就是我一直在找的语言。我可以用它往下走到底层,也可以往上覆盖高层。我不再需要在 C 和 Python 之间切换了。" —— 非洲软件工程师和社区组织者

这种全栈覆盖能力,让 Rust 成为了不少开发者职业转型的跳板:

"我学土木工程,自学了前端开发,没有计算机背景。后来对 Rust 和分布式系统产生了兴趣,换了专业,同时学习 CS 和 Rust。" —— 正在转向密码学研究的工程师

"在区块链领域工作了一段时间,Rust 给了我进入当前领域的入场券。" —— Rust 开发者和航空航天社区领导者


这四件事,缺一不可

博客里有一个值得深思的论断:这四个属性不是独立加分项,而是相互依存的整体。任何一个缺失,整个体验都会崩塌。

没有可靠性,你就无法信任它。每次部署都在担心,不敢重构,不敢让经验少的工程师碰关键路径。

"Rust 降低了这道门槛。在我们的关键应用中,经验较少的工程师能够参与贡献,作为团队 leader 我感到安心得多。" —— 云基础设施服务杰出工程师

没有高效性和底层控制能力,有些地方你就去不了:嵌入式、实时系统、任何对 CPU 周期敏感的场合。

"9 次中有 8 次,我写完微控制器代码,只通过单元测试,然后烧到真实硬件上,第一次就跑通了。" —— 安全关键机器人嵌入式工程师

没有工具链和生态,你根本启动不了,或者启动了也举步维艰,永远感觉不到生产力。

"语言本身有挑战,但工具链极其容易。我可以直接开始写代码,它就能构建和运行,这对我来说有巨大的差异。" —— 开发者工具公司创始人


诚实地说:三个地方平衡失调了

报告并没有只讲好话,它同样指出了三处 Rust 目前还没有做好的权衡。

类型系统:有时候,为了编码不变量,反而把事情变得更复杂

Rust 的类型系统可以把业务约束编码进类型里,这是它最强大的能力之一。但当类型嵌套了 async、泛型和生命周期之后:

"那些类型就变得极其复杂,你基本上得是某种 Rust 神才能理解这段代码。" —— 有生产 Rust 经验的工程师

"不是意大利面条式的代码,而是意大利面条式的类型。" —— 汽车半导体公司平台架构师

async Rust:一道额外的门槛,且工具支持还跟不上

"我觉得学习 Rust 有一个坡道,然后有一道跨越,async 就在那边。目标是对 Rust 产生足够的热情,才能跳过这道'悲伤鸿沟',落到 async Rust 的彼岸。" —— 汽车数字座舱软件工程师

"总体印象其实相当负面。感觉没做完……需要大量晦涩的知识才能有效使用它,比如 Pin——我根本说不清楚 Pin 是怎么工作的。" —— 有 Rust 专业经验的研究工程师

async 在语言特性上仍有缺口(dyn trait 中的 async fn 直到去年才部分稳定),编译器的错误提示在 async 场景下也明显弱于同步代码,调试工具更是几乎空白。

crates.io 生态:选择自由成了一种负担

"该用哪些 crate 基本上是不可被发现的。有一层通过经验和艰难摸索积累起来的默会知识。每个人都在自己做研究。" —— Web 开发者和会议演讲者

"教程里用的是 Result<Box<dyn Error>>,但其他人都用 anyhow……我一开始按教程来,但找到的示例代码全部用 anyhow,不知道该怎么办。" —— 数据科学平台工程师

Rust 官方历来避免对特定 crate 给予背书,以免扼杀竞争和创新。但这个立场对新手来说代价不小——他们需要靠社区传承才能知道「这个场景该用哪个库」。


官方给出的三条建议

基于上述发现,工作组提出了三个方向:

一、用 RFC 明确 Rust 的设计目标

把「可靠性、高效性、可扩展性……」这些值写成规范文档,集成进 RFC 审查流程。让未来每一个语言设计决策都能对照这份文档做「得太少 / 刚好 / 过头了」的三维检验,而不是把某个目标凌驾于其他所有目标之上。

二、加大可扩展性投入

当前 Rust 的可扩展性主要集中在类型系统和 proc macro,而 crate 无法影响编译器的错误提示,也无法参与编译流程的中后期阶段。应当推动:

  • 让 crate 能为自己的 API 提供定制的诊断信息和 lint(#[diagnostic::on_unimplemented] 是开始,但还不够);
  • 开放编译器的更多中间阶段(如 Stable MIR),支持定理证明、GPU 编程、分布式系统等需要深度编译器集成的场景。

三、帮助用户导航 crates.io 生态

没有银弹,但可以探索:为 async 等关键场景引入标准互操作 trait(使不同运行时的库能兼容使用);为常用类型定义提供官方协调的中立 crate(如 http crate 已经在做的方向);改进 coherence 规则,让互操作 trait 能在生态中被逐步采纳,而不是被孤岛化。


总结

这份报告最打动人的,不是它发现了什么问题,而是它对 Rust 吸引力的本质描述:

Rust 的魔力不在于任何单一特性,而在于可靠性、高效性、底层控制、友好工具链、生态可扩展性这五者同时成立。缺少其中任何一个,整个体验都会大打折扣。而当它们都到位的时候,Rust 就变成了一个让开发者愿意带着它去探索新领域、改变职业路径、全栈通吃的语言。

这是一种很难被单点替代的整体价值,也是 Rust 能连续十年蝉联「最受喜爱」的深层原因。


参考资料: