Rust与C++之争,一个老程序员的清醒建议(rust与c的性能) ypxx.net

最近几年,编程圈有个挺有意思的现象,只要有人聊起Rust,十有八九会忍不住把它和C++拉出来比一比,甚至吵起来。有人恨不得把Rust捧成新一代“宇宙第一”,也有人觉得它不过是个噱头大过实用的玩具。我每次刷到这种帖子,心里就一个感觉:两边都有点过了。

先说个实话,我从2018年开始接触Rust,当时是被它的内存安全和无垃圾回收的特性吸引。作为一个写C++写了快十年的老人,我对手动管理内存这件事又爱又恨。爱的是它给了我最大的掌控权,恨的是一个野指针就能让我加班到凌晨三点。Rust的所有权系统听起来像是解决问题的神器,但我真正上手之后才发现,这条路并没有想象中那么顺畅。

记得第一次用Rust写一个简单的HTTP服务,光是跟borrow checker搏斗就花了我两天。编译器报的错误提示写得很好,但就是过不去,那种感觉就像你明明知道要去哪里,但每条路都被交警拦着,告诉你“再想想别的走法”。后来我明白了一个道理:Rust用起来的确有种“慢工出细活”的味道,它逼着你把逻辑想清楚再写代码,而不是像Python那样先跑起来再说。但这个过程中的挫败感,也劝退了不少人。

说到社区氛围,我观察了很久。Rust社区里有一批非常热心的人,他们愿意花时间帮你解答问题,写文档,做工具链。但与此同时,也总有一些人喜欢把语言之争上升到价值观层面,觉得“用Rust就代表先进,用C++就是守旧”。这种极端的论调在网上特别容易发酵,尤其是B站和知乎的评论区,简直成了战场。反观C++社区,虽然大家也吐槽模板元编程的复杂、链接错误的诡异,但很少会去踩别的语言。真正的高手通常都在埋头解决问题,比如Herb Sutter、Bjarne Stroustrup这些人,他们的演讲里更多是在说“我们怎么把C++变得更好用”,而不是“你们那个语言不行”。这种底气来自长期的积累和务实的态度。我个人觉得,如果一个技术社区戾气太重,那反而说明这个技术本身还在寻找自己的位置,还在不断证明自己的价值。

再聊点实际的——找工作。我去年因为公司调整,不得不重新看机会,顺道在几个主流招聘平台上搜了搜Rust岗位。说实话,结果挺让人清醒的。一线城市、大厂里,Rust的岗位加起来恐怕还没C++的零头多,更别说和Java比。而且那些岗位大多集中在区块链、高性能网络中间件、或者某些特定的嵌入式系统,覆盖面非常窄。这意味着,如果你今年刚毕业,只学了Rust就去找工作,很可能连面试机会都拿不到。大学课程里几乎不会把Rust当作第一门教学语言,老师教C/C++、Java、Python都已经忙不过来了,怎么可能突然换一个连教材都还没统一的主流语言?这不是偏见,是现实。所以我的建议一直都是:先把C++打扎实了,再考虑Rust。因为C++的知识迁移性极强,等你理解了指针、内存布局、虚函数表这些东西,再去看Rust的trait和生命周期,你会发现很多底层原理是相通的。

还有一个让很多人心里没底的事——Rust的治理结构。Rust是Mozilla发起的项目,后来成立了独立基金会,但Mozilla这几年的裁员和项目调整大家都看到了。虽然官方说了基金会会继续支持,但谁也不敢保证未来会不会因为某些非技术的原因影响开发。比如License问题、出口管制、或者某些国家的外部压力。前些年有个很现实的例子:某个开源数据库项目因为开发者所在的国家被制裁,导致全球用户无法下载补丁。这种事情虽然不常见,但一旦发生,对于依赖该语言的企业来说就是灾难。你用Rust写了一个核心系统,结果官方突然不给你所在地区提供更新了,你只能靠Fork和硬编码补丁来维持。这种风险虽然概率低,但你不能当它不存在。相比之下,C++是ISO标准化的语言,它的进化完全由国际委员会决定,几乎不受单一公司或政治实体影响。Python、Java也类似,背后有广泛的企业和基金会支持,风险分布更均匀。

那么作为一个程序员,该怎么规划自己的技术栈呢?我自己的迭代路径是这样的:大学时候主攻C/C++,把底层的东西啃透了;工作后根据项目需要学了Python,用来写脚本、做自动化测试、爬数据,效率确实高;后来因为接手一个高并发网络库,被迫去学了Rust。一开始我只用Rust做性能敏感的部分,业务逻辑还是靠C++和Python。但渐渐我发现,当你对某个语言的熟练度到了一定程度,写代码的速度其实相差不大。比如我用C++写了十年,STL、Boost、Qt这些库闭着眼睛都能用,写一个需求看文档的时间很少。搭配Python来做快速原型和数据分析,基本覆盖了80%的工作场景。Rust就在那剩下的20%里,当遇到内存安全瓶颈或需要极致并发的时候,拿出来用一下,像一把手术刀。

但这不是说Rust没有未来。恰恰相反,我越来越看好它。从语言设计的角度,Rust的确站在了前人的肩膀上,它吸收了不少C++、Haskell、Python的优点,又避开了很多坑。比如模式匹配、代数数据类型、并发无数据竞争,这些特性在Rust里用起来真的很舒服。而且它的工具链非常现代化,cargo、rustfmt、clippy,比CMake那一套省心太多。如果能源行业、自动驾驶、金融交易系统这类对安全性要求极高的领域大规模接受Rust,那它的岗位就会慢慢多起来。毕竟现在很多公司考虑用Rust重写C++核心组件,主要就是看中它的编译期安全检查能大幅度减少线上崩溃。

但这一切都需要时间。我认识几个在初创公司用Rust的哥们,他们告诉我,团队里最痛苦的不是写代码,而是招人。一个合格的Rust开发者,往往是先精通C++或Java,然后转过来的,这种人市场上本来就不多,薪资要求也高。而且老板们不会因为“Rust更安全”就牺牲交付速度,商业上第一要务是活下来。所以Rust目前的生态更像是一个精品工具箱,而不是一个基础框架。它适合有经验的工程师在特定深度上用,不适合新手作为职业生涯的起点。

说到最后,我想给正在纠结学什么语言的读者一个比较务实的建议:别把语言当成信仰,把它当成工具。你今天用Rust写得顺手,明天有可能项目改成Go;你今天觉得Python慢,明天任务就是写个快速爬虫。技术栈永远是围绕业务需求来长的,不是反过来。真正值得投入的是对计算机基本功的理解——操作系统、编译原理、网络协议、数据结构。这些东西学会了,语言只是形式。而如果你非要选一个第一语言去死磕,那我还是推荐C++,因为它足够复杂、足够底层、足够历史厚重,能帮你建立起完备的底层思维。在这个基础上再加一门脚本语言,比如Python或者JavaScript,你就有了一组无坚不摧的组合。等哪天项目需要极致的安全和并发,Rust自然会变成一个新的选择。到那时候,你去看它的语法、它的社区、它的工具链,会感到如鱼得水,因为你知道它解决的是你在C++里踩过的那些坑。

至于五年后、十年后Rust会不会成为主流?我不知道,也没人知道。但我能确定的是,没有人会因为争论“哪个语言最好”而提高自己的技术水平。把眼光放远一点,把手上的活干好,比什么都强。