网易首页 > 网易号 > 正文 申请入驻

耗时18个月,开发者弃TypeScript投Rust,重写系统后痛批:这门语言烂透了!

0
分享至

在近几年的 Stack Overflow 年度开发者调查报告中,有一门编程语言连续多年被评为“最受喜爱的编程语言”——那就是 Rust。

凭借其独特的安全性和与 C++ 不逞多让的性能,Rust 成为许多开发者想要尝试的语言,本文作者正是其中一位。而他在用 Rust 重写整个开源算法交易系统后,得出了一个不同于多数人的结论:Rust 这门语言,真的烂透了。

作者 | Austin Starks 编译 | 郑丽媛

出品 | 程序人生(ID:coder_life)

曾经,我是一个年轻而充满希望的 Rust 狂热者。因为我一直听说,Rust 完美得像是上帝设计的编程语言:不仅很快,还是最安全的编程语言之一。

如果在网上查找有关 Rust 的信息,你会发现认为 Rust 完美的人,远不止我一个:Medium 上的每一篇指南、Reddit 上的每一篇帖子、Stack Overflow 上的每一个答案……对 Rust 都是铺天盖地的正面评价。

有鉴于此,我决定放弃 TypeScript,用 Rust 来重写我的开源算法交易系统 NextTrade。

用 Rust 重写的好处是有,但代价巨大

起初,NextTrade 是用 TypeScript 构建的,以注重可维护性、可读性和可重用性。然而,当核心交易逻辑开始出现严重的性能问题时,为了构建一个可扩展至数万用户的纸面交易和回测平台,有必要进行全面重写。于是,Rust 成为了最热门的候选者,并在经过我的大量研究后最终胜出,成为进行全面重写 NextTrade 的编程语言。

前后花了 18 个月,最后的重写结果还不错。由 Rust 重写后的 NextTrade 变成了 NexusTrade,而 NexusTrade 在速度和可配置性方面明显优于重写之前:例如,在 NextTrade 上需要数秒才能完成的回溯测试,在 NexusTrade 上只需几百毫秒即可完成——这意味着性能提升了 1000 倍,平台也能支持更复杂的功能。

有这些好处固然很好,但我付出的巨大代价也不容忽视。

Rust 最大的优点,是完全消除了整类错误,而这同时也是它最大的弱点——借用检查器让这门语言变得异常困难,尤其是与 TypeScript 和 Go 这样的语言相比,入门门槛相当高。我根本无法像以前学习一门新语言那样边学边做,尤其是还要兼顾着一份全职工作:Rust 太难了!

说实话,如果 OpenAI 没有推出 ChatGPT,我真的可能会转而使用 Go。

所幸在 ChatGPT 的指导下,我克服了每一个障碍,深入了解了 Rust 的细微语法及其强大而复杂的类型系统。ChatGPT 就像一位经验丰富的 Rust 开发者在我身边,随时为我讲解生命周期的复杂性或匹配表达式的优雅性。

综合以上,我当时对 Rust 的评价是中等,也没有真正爱上这门语言,并基于以上经历写了一篇博文。没想到这篇文章在 Reddit 上遭到了许多抨击,其中还有一条高赞评论骂我用 ChatGPT 写文章。

看到这些评论后,我当时想着:可能是我还不够了解 Rust,对它的判断有失偏颇吧。

于是,在那之后我虽然没有多喜欢 Rust,但我还是坚持使用了一段时间。如今 4 个月过去了,我终于可以自信地得出一个结论:Rust 这门语言,真的烂透了。

可怕、冗长、不直观的语法和语义

在我看来,所有说 Rust 没有残暴语义的人都是在撒谎。在某些情况下,如果你无法使用极其强大的大型语言模型,那么编写函数简直就是不可能的事情。但我真的不想花 90 分钟来弄清函数中的子句,我只想写出一个想写的函数而已!

最后,我还不得不完全放弃辅助函数的想法,因为我真的无法让代码编译成功。人们所说的 Rust 最大的优点(严格的编译器可以消除错误),正是 Rust 最大的缺点之一。只要给我一个垃圾回收器,让我做我想做的事情就可以了!

相比之下,如果我用 Go 编写这个完全相同的函数,它看起来会是这样的:

虽然功能的核心相对不变,但这样你就不必翻来覆去地琢磨如何让代码正常运行了——它本身就能运行!

可怕的错误处理

Rust 确实能对错误进行很好的处理。只要避免出现不安全的错误,就能确保代码正常运行。NilPointerException 异常和未处理的错误再也不会发生了,对吧?

不对!因为当你的数据出错或发生意外情况时,你会拼命去弄清楚到底发生了什么。也许我是个白痴,不知道如何启用堆栈跟踪。但当我的应用程序出现一个错误时,我却不知道为什么!

(我的堆栈跟踪到底在哪里?)

相比之下,在 Python 这样的语言中,你会得到一些漂亮的、艺术般的堆栈跟踪,告诉你发生了什么,甚至精确到行号!即使在 Go 语言中,你也有 errors.Wrap(...) 这样的工具,能够让你查看整个应用程序的错误堆栈。或许我真是个笨蛋,只要我在 Rust 中遇到错误时,我就会陷入茫然,完全搞不清发生了什么。我需要在应用程序的各个地方都加上 eprintln!(...)。

事实上?不,我不是白痴。这就是一种有缺陷的语言设计。

Rust 社区

有一个热评是:Rust 社区并不像他们假装的那样友好和冷静。更具体来说,我认为他们是一群自恋的家伙,尤其讨厌别人说 Rust 有缺陷。

(有个 Rust 社区成员对我的问题给出了一个“有益的”建议)

例如,我在 Rust 的 subreddit 上问了一个关于如何改进 MongoDB Rust crate 错误处理的问题,得到的回答包括:

  • 改用 Postgres。(笑死,难道我要因为一些糟糕的错误信息就重新设计整个数据库吗?)

  • 你为什么要用 MongoDB?(我喜欢,下一个问题?)

  • MongoDB 在 Go 和 Python 中也很糟糕。(我不知道,但它在 TypeScript 中很好。你转移了话题并没有回答我的问题)

  • 出现一个真正有用的改进错误信息的建议。(非常罕见)

在我目前接触的所有编程社区中,没有一个像 Rust 这样像个邪教。他们无视 Rust 的所有明显缺陷,比如陡峭的学习曲线、冗长的代码、可怕的错误信息、复杂的语法和有争议的语言设计选择——他们把这一切问题,都归结于开发者自己的技能问题。在我看来,这简直是疯了!

总结

尽管如此,Rust 还是有一些优点的。它运行速度很快……嗯,这基本上就是它的主要优点了。

另外,它应该也很安全。如果我们把它和 C++ 比较,Rust 显然是更好的语言。但与其他语言(比如 Go)相比,Rust 的“安全性”对我来说更像是一种拖累。如果能把开发时间减半,那我宁愿应用程序的运行时间多加几十毫秒。

好的一面是,如果我选择用 Go 编写应用程序,我可能也会有些后悔。我会想:“如果 Rust 能更快呢?” “又有一篇文章说 Rust 是最棒的语言。天啊,我是不是选错了!”

至少,现在我学会了 Rust,我觉得自己可以学任何东西了。也许后面我会为了好玩去试试 OCaml,它总不会比 Rust 更难学吧?

https://medium.com/@austin-starks/i-spent-18-months-rebuilding-my-algorithmic-trading-in-rust-im-filled-with-regret-d300dcc147e0

https://medium.com/@austin-starks/i-built-an-algorithmic-trading-system-in-rust-heres-what-i-regret-a89f378b22c9

由 CSDN 和 Boolan 联合主办的「2024 全球软件研发技术大会(SDCon)」将于 7 月 4 -5 日在北京威斯汀酒店举行。

由世界著名软件架构大师、云原生和微服务领域技术先驱 Chris Richardson 和 MIT 计算机与 AI 实验室(CSAIL)副主任,ACM Fellow Daniel Jackson 领衔,华为、BAT、微软、字节跳动、京东等技术专家将齐聚一堂,共同探讨软件开发的最前沿趋势与技术实践。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
打掉涉黑涉恶犯罪团伙22个辽宁公安扫黑除恶首轮行动收网告捷

打掉涉黑涉恶犯罪团伙22个辽宁公安扫黑除恶首轮行动收网告捷

金台资讯
2026-08-12 20:38:20
闹大了,周星驰问张艺兴:下次我还找你拍戏,零片酬行吗,张艺兴回应显情商,他在片场长时间暴晒,皮肤晒得黝黑,完全褪去了精致妆感

闹大了,周星驰问张艺兴:下次我还找你拍戏,零片酬行吗,张艺兴回应显情商,他在片场长时间暴晒,皮肤晒得黝黑,完全褪去了精致妆感

不二大叔
2026-08-01 11:01:41
甲钴胺立大功?研究发现:老人吃甲钴胺,或能缓解这8种症状

甲钴胺立大功?研究发现:老人吃甲钴胺,或能缓解这8种症状

芹姐说生活
2026-08-10 18:00:37
罗马诺:除非有强制买断,否则曼联不会让齐尔克泽租借尤文

罗马诺:除非有强制买断,否则曼联不会让齐尔克泽租借尤文

懂球帝
2026-08-13 19:09:10
除了性生活,就是打麻将!2000多县城普通人的生活现状只能这样?

除了性生活,就是打麻将!2000多县城普通人的生活现状只能这样?

流史岁月
2026-07-06 18:00:06
他汀联合依折麦布,两个优点三个注意一定要知道

他汀联合依折麦布,两个优点三个注意一定要知道

药师方健
2026-08-10 22:06:35
东鹏饮料瓶身写着生产日期见瓶盖,而瓶盖喷码显示为2027年6月29日,东鹏饮料客服:这是保质期到期日

东鹏饮料瓶身写着生产日期见瓶盖,而瓶盖喷码显示为2027年6月29日,东鹏饮料客服:这是保质期到期日

江西晨报
2026-08-13 16:05:08
中方这次绝不救市!日元抛售美债引爆死亡螺旋,美日彻底玩砸了!

中方这次绝不救市!日元抛售美债引爆死亡螺旋,美日彻底玩砸了!

共工之锚
2026-08-14 00:11:00
卢秀燕表态,蒋万安表态,王金平也表态了,韩国瑜引发蓝营众怒?

卢秀燕表态,蒋万安表态,王金平也表态了,韩国瑜引发蓝营众怒?

启迪你的思维
2026-08-14 01:22:17
从3.2亿到20亿!悄悄重塑世界的穆斯林人口浪潮

从3.2亿到20亿!悄悄重塑世界的穆斯林人口浪潮

掠影后有感
2026-07-26 10:02:51
美国和伊朗猝不及防!打完仗发现,沙特千亿资本疯狂投往中国!

美国和伊朗猝不及防!打完仗发现,沙特千亿资本疯狂投往中国!

飘逸语人
2026-07-04 14:24:35
蒋玮已任民政部党组成员

蒋玮已任民政部党组成员

上观新闻
2026-08-13 17:54:31
普拉蒂尼:巴黎5-4拜仁丢了9个球,我们还把这叫作世纪之战?

普拉蒂尼:巴黎5-4拜仁丢了9个球,我们还把这叫作世纪之战?

懂球帝
2026-08-13 15:47:21
“统一”不会等到台湾换届,国民党主席候选人不改口号是做无用功

“统一”不会等到台湾换届,国民党主席候选人不改口号是做无用功

时光漫游志
2026-08-13 14:27:35
逃到香港后,马鸿逵被逼返回台湾,蒋介石:他拥兵自重、开除党籍

逃到香港后,马鸿逵被逼返回台湾,蒋介石:他拥兵自重、开除党籍

史笔似尘钩
2026-08-13 22:40:03
中英谈好补偿款的那一刻,全世界都看清楚了!12亿英镑要打水漂?

中英谈好补偿款的那一刻,全世界都看清楚了!12亿英镑要打水漂?

离离言几许
2026-08-02 20:47:37
86票杀疯!美国下死禁令:禁止中国买俄油,对此中方早留后手

86票杀疯!美国下死禁令:禁止中国买俄油,对此中方早留后手

纯白的梵唱
2026-08-12 22:30:11
Capcom把《生化危机》重制到没牌可打?这5款老古董该接班了

Capcom把《生化危机》重制到没牌可打?这5款老古董该接班了

追星雷达站
2026-08-13 02:39:52
中日韩人均身高对比:日本仅164.5cm,韩国166cm,中国我没想到

中日韩人均身高对比:日本仅164.5cm,韩国166cm,中国我没想到

铭记历史呀
2026-07-27 08:34:17
妻子出轨,丈夫将15公分蜡烛塞进妻子的阴道内

妻子出轨,丈夫将15公分蜡烛塞进妻子的阴道内

胖胖侃咖
2025-04-13 08:00:08
2026-08-14 05:12:49
CSDN incentive-icons
CSDN
成就一亿技术人
26846文章数 242317关注度
往期回顾 全部

科技要闻

一切皆插件!DeepSeek Harness正式发布

头条要闻

冉莹颖被指称“输了换老公有保险”邹市明深夜回应

头条要闻

冉莹颖被指称“输了换老公有保险”邹市明深夜回应

体育要闻

负债十几亿的联赛,还在疯狂买球星

娱乐要闻

篡改红歌已立案,郭德纲大祸临头

财经要闻

可治疗癌症?神话破灭的片仔癀 陷入争议

汽车要闻

全新红旗H7到底新在哪儿?

态度原创

家居
游戏
旅游
艺术
公开课

家居要闻

2026建博会(广州) 公装联探展交流活动

曾为LPL夺S赛冠军,如今沦落登峰组9连败,Jiejie归队遭质疑!

旅游要闻

春城昆明名字根源,不是滇池不是美景,源自两千年前滇西古老部族!

艺术要闻

1水彩界最狠的“阴谋”:每一笔都是提前预谋,看完他们的建筑画,我再也不敢说自己懂艺术了!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版