这篇短文解释了,为什么我认为 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 是竞争关系。放眼看去,确实很难找到 他们的其它联系, 他们出现得太偶然了。
综上,我认为 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 的顶层代码,存在很多类似的做法。
Go 着重于提高大团队开发者工作效率,遵循严格应用简洁化原则( rigid application of simplicity ) —拒绝复杂化和歧义化的观点。
Rust则面向无法容忍不安全内存访问或运行时开销的程序员(Go也不能容忍,我想没有人愿意学习一门新的不安全的编程语言) —哪些不安全的,或带来(额外)开销的想法会被拒绝,至少要排除在核心语言之外。
Rust竞争对象是C++ and D编程语言,这类语言的程序员容易接受更复杂的语法和语义 (可能还有更高的可读性代价-注,应该是更难于读懂代码的意思) 以换取最高性能。 例如,单片机,AAA游戏引擎, 和web渲染引擎(等应用领域)。
Go主要抢占2006年以来的互联网2.0公司市场,它们大量采用(outgrown)Ruby, Python, 和Node.js (v8) 语言,没有耐心使用部署代价 高昂的 基于JVM语言 。