Rust:不稳定的行业地位
Last updated on
Rust 是一门以其出色的内存安全和高性能而闻名的现代编程语言。尽管它备受开发者赞誉,在“最受欢迎的语言”排行榜上名列前茅,但在现实世界中的地位仍然不甚稳定。本文将探讨在那些由强大传统语言主导的关键领域中,Rust 所面临的现实与局限。
1. 安全关键领域
鉴于内存安全是该语言的最大优势,人们曾期望 Rust 能适用于航空、汽车、医疗等安全至上的系统(Safety-Critical)。然而,几十年来,这一领域一直由 C/C++ 和 Ada 等语言主导。特别是 Ada,它长期用于航空航天、国防等要求极高可靠性的系统,其强大的类型系统和并发支持证明了其稳定性。
在这样传统强者根深蒂固的情况下,Rust 的发展空间非常有限。该领域验证既有代码和获得稳定性认可需要漫长时间,这一特性使得 Rust 的采用仍仅限于少数企业的尝试。
2. 嵌入式领域
嵌入式系统通常在内存和计算能力极其有限的环境中运行,因此程序的二进制文件大小是一个至关重要的因素。根据一项权威的调查,Eclipse基金会的《2024年物联网与嵌入式开发者调查》,在开发者使用的语言(可多选)中,C++(68%)和C(65%)的使用率最高。这表明,随着现代C++的功能在复杂的嵌入式系统中越来越受欢迎,其地位已经提升到与传统强者C相当甚至超越的水平。
在这个由C/C++主导的领域中,Rust的使用率约为17%。虽然增长迅速,但与主流语言仍存在显著差距。此外,由于Rust在编译过程中包含了多种安全机制,其二进制文件大小往往比C语言更大。在那些连几千字节(KB)的内存都需节约使用的小型设备中,这一特性仍然是采用Rust的障碍。
3. Linux 内核
2022 年,Linux 内核 6.1 版本正式引入 Rust,这是一个极具象征意义的事件,被视为 Rust 作为系统编程语言潜力的认可。
然而,时至今日,Rust 在 Linux 内核中的现实地位仍然微不足道。根据截至 2025 年 6 月的 cloc
分析,Linux 内核的纯代码(不含注释和空行)约有 2900 万行。其中,C 和 C 头文件占据了约 92.3% 的比例,而 Rust 代码仅有约 1.9 万行,占总量的 0.07%。
下方的摘要表清晰地展示了内核中主要系统语言的比重。
排名 | 语言 | 代码行数 | 比例 (%) |
---|---|---|---|
1 | C & C/C++ Header | 26,759,325 | 92.33% |
5 | Assembly | 231,789 | 0.80% |
13 | Rust | 19,030 | 0.07% |
目前内核中的 Rust 代码大多是用于编写驱动程序的基础设施,并未涉及任何核心功能。看来,Rust 要在 Linux 内核中获得有意义的存在感,还需要相当长的时间。
4. 服务器领域
在讨论服务器领域时,我们不能仅仅局限于生成网站动态内容的服务器端脚本语言。这个领域远比这更广泛,包括处理用户请求的前端 Web 服务器(Nginx、Apache)、云基础设施以及大型企业级应用服务器。审视这个市场的现实,Rust 的地位显得更加狭窄。
- 基础设施软件之王 C/C++: 我们习以为常的 Nginx、Apache 等 Web 服务器、众多数据库系统以及操作系统的核心网络功能等服务器基础设施的基石,绝大多数都是用 C/C++ 构建的。这一领域要求极致的性能和底层内存控制,数十年积累的代码和稳定性至关重要。尽管 Rust 的目标是取而代之,但要替换掉这个已经驱动着世界的庞大 C/C++ 资产,在现实中是极其困难的。
- 企业市场的绝对强者 Java: 大型企业的后端系统、金融领域注重稳定性的应用服务器市场,均由 Java 和 Spring 框架主导。JVM(Java 虚拟机)的稳定性、庞大的库以及丰富的开发者生态系统,是其他语言难以逾越的巨大壁垒。
- 云时代的新宠 Go: 在现代云原生环境中,Go 已成为新的强者。象征着容器生态的工具,如 Docker 和 Kubernetes,都是用 Go 开发的。凭借其简洁的语法、出色的并发处理能力和便捷的部署,Go 已被广泛用于开发无数的微服务和 API 服务器。
由此可见,服务器领域的每个细分市场都有明确的主导者。Rust 必须在 C/C++ 的性能、Java 的稳定性和生态系统、以及 Go 的生产力和并发性之间展开竞争。虽然有些公司为了将 C++ 或 Go 编写的系统性能推向极致而采用 Rust,但这在整个服务器市场中只是极少数。在大多数情况下,Rust 仍然难以证明其优势足以超越各领域主导语言所提供的“经过验证的稳定性”和“生产力”。
采用 Rust 的现实困境
阻碍采用 Rust 的最大障碍无疑是“成本”问题。陡峭的学习曲线不可避免地导致初期开发效率低下,而有限的人才库使得寻找熟练的开发者变得困难,从而推高了人力成本。
尽管存在这些明显的缺点和初期投资成本,为什么在某些特定情况下,企业仍会认真考虑 Rust?答案在于“长期运营成本(Running Cost)”降低这一强大的激励因素。
例如,设想一个运行在大量服务器上的大型 Java 服务。虽然 Java 拥有稳定而庞大的生态系统,但它在 JVM 上运行,与原生语言 Rust 相比,往往会消耗更多的内存和 CPU 资源。此时,如果将服务的核心瓶颈或高资源消耗的微服务替换为 Rust,可以显著降低内存使用率和 CPU 占用率。这将直接转化为服务器资源和数据中心电费的实际成本节约。
最终,采用 Rust 需要进行现实的成本核算。这里的初期投资成本主要意味着两个方面的人力成本上升。首先,陡峭的学习曲线导致的生产力下降会延长开发周期,从而增加项目总人力成本。其次,市场上开发者的稀缺性导致单位人力成本(薪资)本身就很高。
是否能承受这一成本,可以通过以下不等式来衡量:
初期投资成本(因开发周期延长而增加的总人力成本 + 高昂的单位人力成本) < 长期收益(运营成本降低 + 预防安全事件的价值)
当判断此不等式成立时,Rust 才能成为一个有吸引力的选项。
然而,这个计算并不简单。尽管有这些优点,现实中的替代方案依然强大。
- Java: 现代版本的 Java 通过持续的性能改进和引入虚拟线程等方式不断提高效率。与其花费巨大成本转向 Rust,优化现有的 Java 技术栈可能更为合理。
- Go: 如果需要相比 Java 有通常更高的性能和开发生产力,那么学习曲线更平缓、开发者人才库更广的 Go 可以作为提供“足够好”性能的现实替代方案。
- Ada:如果在要求比 Go 更快的原生性能和最高级别稳定性的极端情况下,考虑在航空和国防工业中锤炼了几十年的 Ada 可能是一个更现实的选择。
总而言之,尽管 Rust 拥有“内存安全”和“降低运营成本”这两件利器,但它仍然处于一个艰难的位置。因为即使在那些需要 Rust 所提供价值的领域,也存在着像 Java、Go 和 Ada 这样强大而现实的替代方案。目前来看,选择 Rust 与其说是“最明智的投资”,不如说是一个需要明确的成本计算并接受各种权衡的“高度战略性选择”。