为什么说 Go 和 Rust 不是竞争者

jopen 9年前

这篇短文解释了,为什么我认为 Go 和 Rust 并不是竞争对手。

为什么人们认为 Go 和 Rust 是竞争关系

在解释为什么我认为 Go 和 Rust 不是竞争对手前,我想说明一下为什么这个问题会被提起。

  • Rust 和 Go 发布的时间相近。Go 从 2007 年开始构思,2009 年十一月对外公开。Rust 发布于2010 年,只晚了几个月,尽管 Graydon(格雷顿)声明 Rust 可能是更早就开始构思了。无论怎样,这两个语言都有着前辈的贵族血统。对于 Go 来说,有 Hoare(霍尔)的 CSP,Alef 和Pike(派克)的 Newsqueak,而 Rust 则是 ML 家族的语言之一。

  • Rust 和 Go 都是被誉为内存安全的。虽然这个说法没错,这两种语言都不允许不安全的内存访问,更重要的是,世界已经不能容忍一个不是内存安全的新语言了。事实是 Go 和 Rust 这两种语言,经过数十年的证据表明,现实世界中,程序员们普遍是不能安全手动管理内存的。

  • 同样是年轻的语言,Go 的 1.0 版本发布于 2012 年,而 Rust 的 1.0 版本是今年(2015)早些时候,这意味着他们都雄心勃勃和有上进心,想要占领现任编程语言的市场。

这些迹象都可以说明为什么我们看的 Rust 和 Go 是竞争关系。放眼看去,确实很难找到他们的其它联系,他们出现得太偶然了。

为什么我认为 Rust 与 Go 不是竞争对手

综上,我认为 Go 与 Rust 之间不为竞争关系有以下原因:

  • Rust 关注 “free of charge” 的抽象。如果你对这很熟悉,说明你已经使用 C++ 很多年了。Go 为了保证语言的简洁性和正交性,将很多底层的操作推迟到运行时来进行。

  • Rust 是专门为与 C语言 的互操作而进行设计的;Rust 代码一般位于被 C语言 调用的其他大型程序中。Go 通过 cgo 来进行语言之间的交互,但这并不是 Go 被设计的首要原因。

  • Go 将并发作为首先的关注目标。并不是说在 Rust 里面没有类似 Go 的并发框架,但 Rust 将这部分留给了程序员。

  • Go 关注程序员的编码效率,可以从 across the whole software development lifecycle 看出。Rust 作为 LLVM 的顶层代码,存在很多类似的做法。

Rust 和 Go 不是竞争者

Go 着重于提高大团队开发者工作效率,遵循严格应用简洁化原则( rigid application of simplicity) —拒绝复杂化和歧义化的观点。

Rust则面向无法容忍不安全内存访问或运行时开销的程序员(Go也不能容忍,我想没有人愿意学习一门新的不安全的编程语言)  —哪些不安全的,或带来(额外)开销的想法会被拒绝,至少要排除在核心语言之外。

Rust竞争对象是C++ and D编程语言,这类语言的程序员容易接受更复杂的语法和语义 (可能还有更高的可读性代价-注,应该是更难于读懂代码的意思) 以换取最高性能。 例如,单片机,AAA游戏引擎, 和web渲染引擎(等应用领域)。

Go主要抢占2006年以来的互联网2.0公司市场,它们大量采用(outgrown)Ruby, Python, 和Node.js (v8) 语言,没有耐心使用部署代价高昂的基于JVM语言