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

耗时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.

相关推荐
热点推荐
回声报:巴黎追古茨,利物浦签巴尔科拉再获利好

回声报:巴黎追古茨,利物浦签巴尔科拉再获利好

懂球帝
2026-08-03 01:38:06
“摸奶子”再惹争议,OPPO的流量反噬开始了

“摸奶子”再惹争议,OPPO的流量反噬开始了

品牌头版
2026-05-13 10:18:15
2026劳动法重大更新!7月起正式落地,打工人不再吃职场哑巴亏

2026劳动法重大更新!7月起正式落地,打工人不再吃职场哑巴亏

细说职场
2026-08-02 10:56:20
外卖小哥深夜自述,去年还是曾经手握两家汽贸公司开路虎的老板,如今跑外卖还债,老婆也跑了

外卖小哥深夜自述,去年还是曾经手握两家汽贸公司开路虎的老板,如今跑外卖还债,老婆也跑了

捣蛋窝
2026-07-28 19:12:40
500多亿交了昂贵学费,京东的外卖败局,给所有企业敲了警钟?

500多亿交了昂贵学费,京东的外卖败局,给所有企业敲了警钟?

天生是美女
2026-06-24 19:34:04
政治局会议首提“新兴支柱产业”,释放哪些信号?

政治局会议首提“新兴支柱产业”,释放哪些信号?

第一财经资讯
2026-08-02 19:18:14
局势失控!7月27日,九成榴莲都涌向中国市场,行情迎来惨烈崩盘

局势失控!7月27日,九成榴莲都涌向中国市场,行情迎来惨烈崩盘

三农雷哥
2026-08-02 17:22:32
亚洲之光!孙兴慜连续4场比赛破门,世界杯失意后,韩国队长持续闪眼

亚洲之光!孙兴慜连续4场比赛破门,世界杯失意后,韩国队长持续闪眼

足球评论大家谈
2026-08-02 15:12:12
婚外胚胎案最让人破防的一幕,丈夫选胚胎,女儿录取通知书到了

婚外胚胎案最让人破防的一幕,丈夫选胚胎,女儿录取通知书到了

宝哥精彩赛事
2026-08-02 15:50:12
蒋介石晚年反复痛悔:一生中最错误的决定,就是抗战结束后没有及时把主力部队撤出东北

蒋介石晚年反复痛悔:一生中最错误的决定,就是抗战结束后没有及时把主力部队撤出东北

磊子讲史
2026-07-20 15:48:31
比宋庆龄还难请?中央曾三次邀请她担任要职,却都被婉拒,为什么

比宋庆龄还难请?中央曾三次邀请她担任要职,却都被婉拒,为什么

云霄纪史观
2026-08-03 04:00:59
妻子说出差一周,我下班去朋友家找他喝酒,却在门口听到妻子说话

妻子说出差一周,我下班去朋友家找他喝酒,却在门口听到妻子说话

千秋文化
2026-06-30 19:17:48
痔疮的“天敌”,只要每天吃一点,痔疮便秘就好多了!

痔疮的“天敌”,只要每天吃一点,痔疮便秘就好多了!

环京快爆
2026-07-30 09:00:57
财政紧张真怪公务员太多?拆解地方财政真实压力根源

财政紧张真怪公务员太多?拆解地方财政真实压力根源

起喜电影
2026-08-02 04:50:59
2026车市最大骗局:省油电车全亏钱,烂大街油车才是真赢家

2026车市最大骗局:省油电车全亏钱,烂大街油车才是真赢家

民间胡扯老哥
2026-05-24 13:40:40
“你女儿穿成这样,能出门吗?”女子高铁偷拍女孩,被网友骂醒!

“你女儿穿成这样,能出门吗?”女子高铁偷拍女孩,被网友骂醒!

林林先生
2026-07-31 07:40:03
2026年,一场“有退休金也养不起老”的现实正在千万家庭上演

2026年,一场“有退休金也养不起老”的现实正在千万家庭上演

金哥说新能源车
2026-08-02 14:16:53
文坛软骨:一场集体弯腰的造神闹剧,揭开中国文场最深的圈层病因

文坛软骨:一场集体弯腰的造神闹剧,揭开中国文场最深的圈层病因

宝哥精彩赛事
2026-08-01 06:49:05
意难平!董路再叹息:要不是下雨地滑,加上球员停赛,我们肯定赢

意难平!董路再叹息:要不是下雨地滑,加上球员停赛,我们肯定赢

风过乡
2026-08-02 08:38:05
被前夫公开骂“性欲太强”,国民“玉女”到“欲女”半生难以翻身

被前夫公开骂“性欲太强”,国民“玉女”到“欲女”半生难以翻身

手工制作阿歼
2026-08-02 03:30:18
2026-08-03 07:16:49
CSDN incentive-icons
CSDN
成就一亿技术人
26806文章数 242315关注度
往期回顾 全部

科技要闻

零跑月销10万破纪录!比亚迪奇瑞海外卖爆

头条要闻

52岁中国登山家王钟确认遇难 遗体被雪崩冲到千米之下

头条要闻

52岁中国登山家王钟确认遇难 遗体被雪崩冲到千米之下

体育要闻

常规赛MVP可以衡量常规赛成就吗?

娱乐要闻

徐克和多位港星送别施南生

财经要闻

央行:继续实施好适度宽松的货币政策

汽车要闻

历史性里程碑时刻 零跑7月交付达101267台

态度原创

时尚
艺术
家居
旅游
亲子

王虹的卡地亚,韦东奕的白开水

艺术要闻

看了这些照片,我才发现自己被骗了20年!原来大自然才是真正的“心机婊”?

家居要闻

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

旅游要闻

突尼斯旅游业保持连续增长

亲子要闻

原来网上说的都是真的

无障碍浏览 进入关怀版