使用Rust还是Go语言?


本文作者曾经写了一本关于 Rust 的书,但他建议不要在大多数项目中使用 Rust,原因有多种,包括其快节奏的开发、缺乏健壮的标准库以及异步编程的困难。

Rust 项目腐烂
从 2020 年 1 月到 2023 年 9 月,Rust 已经发布了31 个版本,总计 4500 行变更日志。这是在谈论 Rust“版本”之前,它给新手带来更多的困惑。

因此,如果您认为自己没有足够的工作来解决用户的问题,那么您现在还需要每 6 周更新一次工具链、Dockerfile、依赖项等。编程语言是平台,而不是产品。它们应该稳定并缓慢移动,这样开发人员的大部分时间就不会花在与工具进行斗争上。

发展太快的语言会给生态系统带来很大的混乱,因为一些开发人员渴望将本月的新功能包含在他们的库中,这导致大量繁忙的工作,却没有给任何人带来任何价值。

Rust 仍处于测试阶段(尽管是 1.0)
Rust 实际上仍处于 beta 阶段,一些重要的功能(例如asyncTraits) 仍然缺失,这给生态系统带来了更多的波动。

标准库贫乏
Rust 的设计者相信标准库必须精简,并将大部分功能留给第 3 方包以避免停滞。

但是我不喜欢这种方法,因为它对供应链攻击和后门开放的攻击面很大,而且还因为有许多实现和生态系统争夺加密原语或 HTTP 服务器等基本功能,从而导致不兼容、错误、忙碌的工作和浪费的时间。

我认为 Go 或 Node.js 等模块化且丰富的标准库为开发人员提供了更高的生产力、生态系统的一致性并降低了企业成本。

异步很难
当我审核 Rust 代码时,我做的第一件事绝对是寻找阻塞事件循环的同步函数,这通常会导致难以调试的性能不一致或事件潜在的拒绝服务 (DoS)。

async这使得理解和设计所有权(Rust 最著名的特性)变得更加困难。

认为async最大的缺点是生态系统的碎片化。

我认为,无论是在 Rust 还是 Python 中,async这都是一个新的(数十亿美元)错误,开发人员无数个小时的时间都白白浪费了。

然而,Rust 在一些特定的用例中表现出色,例如 WebAssembly、函数式编程、大规模工作以及替换 C/C++ 项目或与 C/C++ 项目交互。

Hacker News 上的讨论

  • 有些人认为 Java 实际上比 Go 更快、更可靠,尤其是使用现代 Java 和 Kotlin 等优秀的 JVM 语言。
  • Go因其简单性、成熟的贡献故事以及其标准库中的一些有用的库而受到称赞。
  • Rust 的支持者声称它更适合解决涉及并发性、性能或高可靠性的难题。
  • 选用标准还包括内存使用、构建工具、类型系统和生态系统规模的考虑。