张大妈

C项目为何坚守,Rust并非万能解药

源自知乎:杞鋂

01-15 20:14

在Rust语言大行其道的今天,为何许多经典C项目依然坚守阵地?这并非技术上的固步自封,而是基于现实需求的理性选择。本文旨在探讨C语言在现代开发中的核心优势,揭示其在稳定性、可移植性及特定底层能力上,至今仍难以被替代的深层原因。这为项目语言选择提供了一个超越技术风潮的务实视角。

C项目为何坚守,Rust并非万能解药智能速览

  • 语言选择应由项目结果决定,而非技术风向。

  • 高性能Rust库的核心路径常依赖大量unsafe代码。

  • Rust无法完全解决并发等复杂逻辑问题,如竞态条件。

  • C语言的长期稳定性和可预测性是关键项目的基石。

  • C语言作为“万国语言”,具备无与伦比的跨平台调用能力。

  • C语言能实现100%分支覆盖和OOM优雅恢复等特定底层操作。

C项目为何坚守,Rust并非万能解药精华内容

技术潮流更迭不休,但真正历经考验的少数选择,其背后总有硬核的支撑。C语言的不可替代性并非空谈,而是体现在一个个具体而关键的优势上。

Rust并非万能

Rust的推广势头强劲,其内存安全、编译时检查等优势显著。然而,当追求极致性能,开发底层组件时,“Anything is Rust”的论调便显得站不住脚。

许多号称高性能的Rust库,其核心路径遍布unsafe代码块,如同号称自动挡的赛车,上赛道仍需切回手动。Redis之父antirez对此的解释很直白:处理低级代码、追求高性能时,脏活累活无法避免,unsafe是现实需要。

此外,Rust能防内存bug,但防不了所有问题。Linux内核引入Rust后,其代码中也曾发现竞态条件bug,这说明并发等复杂问题根植于逻辑,而非语言本身能完全解决。

历久弥坚的稳定

C语言的核心价值首先在于其无与伦比的稳定性。它是一门古老且被充分理解的语言,其行为具有高度可预测性。SQLite作为被数十亿设备使用的数据库,稳定运行数十年,正是C语言可靠性的最佳证明。

这种稳定体现在时间维度上。一个数十年前用C89标准编写的程序,如今用最新的编译器通常也能顺利编译运行。这种跨越时间的兼容性,让C成为构建需要长期维护的基础设施的基石,其可靠性远比追逐新潮更为重要。

无可匹敌的移植

C语言的另一大优势是其作为“万国语言”的可移植性。几乎所有操作系统和平台都原生支持调用C语言编写的库,这使得C库成为通用组件。

无论上层应用是Python、Java还是Rust,都可以轻松地与C库进行交互。新语言若想与庞大的现有生态接轨,也必须遵循C ABI(应用程序二进制接口)。C是软件世界沟通的桥梁和事实标准,这种地位在短期内无法被撼动。

独特的底层能力

除了稳定与可移植,C语言还具备一些现代安全语言难以企及的独特能力。其中一项是100%机器代码分支覆盖测试。SQLite的质量策略就依赖于此,其测试代码量是生产代码的590倍。

而Rust等语言会自动插入边界检查等分支,这些在“正确”代码中永不执行的路径,阻碍了100%覆盖率的实现。此外,C允许在内存分配失败(OOM)时检查并返回错误,让程序有机会释放资源、恢复服务。Rust默认在OOM时直接panic并终止进程,在某些关键场景下,C的这种优雅降级能力更为实用。

回归本质,C语言的长盛不衰,源于它在特定领域的不可替代性。它如同一把历久弥新的可靠工具,虽然不如新工具时髦,但在关键任务上总是值得信赖。未来的软件开发,或许并非一场语言的零和博弈,而是如何在合适的场景选择最合适的工具,实现1+1>2的价值。

内容由AI生成
0
扫一下,分享更方便,购买更轻松
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

最新文章 热门文章