目录
1. Go 与 Rust
一位挺 Rust 的网友说道: “我也为这个选择烦恼了很久。最终 Rust 胜出了。首先, 我感觉 Rust 更接近于以前 Pascal 时代的东西, 你可以控制一切; 其次, 如果 wasm 和相关技术大爆发, Rust 将是一个更安全的选择; 然后, 我们已经有了 Python 用于快速开发, 因此选择一些更极端的东西是有道理的, Go 在某种程度上处于中间地带。最后, Rust 应用于内核且备受关注, 所以不太可能会被淘汰。”
另一位持反对意见的开发者则表示, "我从事 Go 开发已经快十年了, 但最近我也尝试了下 Rust。我认为目前有一些对 Rust 的强制性和误导性偏好, 从我在各种初创公司的经验, 包括我目前所在的公司来看, 对于后端开发来说, Go 是迄今为止最佳选择! 注意, 在性能、功能或其他方面……这两种语言非常非常相似! "
Rust 是一种低级静态类型的多范式编程语言, 更多关注安全性和性能。
—Gints Dreimanis
Go 是一种开源编程语言, 能够轻松构建起简单、可靠且高效的软件。
—golang.org
我们当然可以争论什么才是真正"面向对象"的语言。但公平地讲, C++、Java 或者 C#用户所期望的那种面向对象编程风格, 在 Go 或者 Rust 中确实不存在。
—Jack Mott
gofmt 的风格也许不是每个人的最爱, 但 gofmt 却能帮到每一个人。
—Rob Pike
我在职业生涯早期用的是 Java 和 Ruby, 所以编写 Go 和 Rust 代码一直让我有点畏惧、觉得自己掌握不了。但等到进入谷歌并看到用 Go 编写的服务时, 我才真正松了口气, 因为我发现它很容易构建和运行。
Rust 也是如此。虽然我只在小规模项目上进行过研究, 但也看得出它的易用性。我希望那些能够无限配置的构建系统早点成为历史, 现在的新语言都附带自己的专用构建工具而且能够开箱即用, 这样不好吗?
—Sam Rose
Go 确实非常容易学习。之前就经常听人提到这一点, 但实际使用后我仍惊讶于它竟能快速提高工作效率。感谢 Go 语言、相关文档和工具, 我只用了短短两天就编写出了有趣且可以提交的代码。
—Rust 程序员对于 Go 语言的早期印象
使用 Go, 我们可以快速完成工作。Go 是我用过的最高效的语言之一, 它的座右铭就是: 马上解决实际问题。
—Matthias Endler
Rust 比其他几种编程语言支持更多复杂性, 所以对应的实现范畴也更大些。
—Devathon
如果您已经准备好学习更复杂的语法和语义(以及更高的代码可读性门槛), 并以此换取最高水平的性能表现, 那 Rust 甚至足以跟 C++和 D 分庭抗礼。
—Dave Cheney
Go 让我们能更轻松地构建起一个能精心解构的应用程序, 这样的应用程序可以作为一组微服务进行部署, 并充分发挥并发性优势。Rust 也不是做不到, 只是实现起来更难一些。
从某种意义上讲, Rust 更适合那些绝不允许因内存问题而引发安全漏洞的程序员; 但相应的, 他们在执行某些对其他语言(包括 GO)来说较为简单的任务时, 就得付出更多心力。
—Sonya Koptyev
能有用于生成 goroutine 和使用 channels 的轻量级语法真的太棒了。这就是语法之力的直接体现, 种种小细节也让 Go 的并发编程体验比其他语言好出一大截。
—Rust 程序员对 Go 的早期印象
Go 专注于把并发作为最核心的概念之一。这倒不是说我们就没法在 Rust 中实现跟 Go 类似的并发性效果, 只是实现难度对于程序员多少是种考验。
—Dave Cheney
Rust 的编译器简直是严格到迂腐, 它会检查我们使用的每个变量、引用的每个内存地址。它避免了潜在的数据竞争情况, 还会通知你存在未定义行为。在 Rust 的世界中, 并发和内存安全问题几乎不可能出现。
—为什么选择 Rust?
对我来说, Rust 最大的优势就是编译器成了我的好助手, 它不会放过任何检测得到的 bug(说真的, 有时候我感觉它就像会魔法)。
—Grzegorz Nosek
在 Rust 中, 各种库工具都能帮助程序员防止用户犯错。Rust 允许我们指定一段数据, 然后保证它不归属于任何其他事物、也不会被任何其他事物所篡改。我想不起以往还有哪种语言会提供这么多防止意外误用的工具, 这种感觉堪称美妙。
—Sam Rose
如果大家选择了 Rust, 往往是因为要使用它提供的保障性设计: 关于空指针/数据竞争的安全性、可预测的运行时行为, 还有对硬件的完全控制。如果这些对你来说毫无意义, 那确实没必要非得使用 Rust。毕竟这些好处背后是有代价的: 上手很费劲。你得改掉坏习惯并掌握新概念。刚开始的时候, 大家都会被借用检查器折磨得死去活来。
—Matthias Endler
如果你是一名 C 或者 C++程序员, 曾经花几个礼拜在语言中查找内存安全 bug, 那你一定会爱上 Rust。于是"跟借用检查器作斗争"就变成了"编译器还能这么用? 爽! "
—Grzegorz Nosek
如今的服务器程序包含着数千万行代码, 由成百上千名程序员编写而成, 并且几乎每天都在更新。Go 在设计和开发上, 充分考虑到了此类环境下的工作效率提升需求。
Go 的设计考量因素包括严格的依赖项管理、软件架构随系统增长的适应性, 还有跨组件边界的健壮性。
—Rob Pike
使用 GO 语言, 初级开发者往往更容易提高工作效率, 但中级开发者则更难引入复杂的抽象并因此导致问题。正因为这种特性, 在企业软件开发领域, Rust 的吸引力往往不及 Go。
—Loris Cro
Go 跟 Rust 这两种语言可以说截然不同。尽管二者都可以被简单描述成系统语言或者 C 的替代品, 但它们的目标和应用场景、语言设计风格与功能优先级确实差异巨大。垃圾收集就是一大核心差异因素。Go 中的垃圾收集让语言变得更简单、更小巧也更易于理解。Rust 不设垃圾收集则让它速度极快(这一点特别适合那些不仅要求高吞吐量、更要求低延迟的开发者), 同时也实现了 Go 根本不可能做到的一系列功能与编程模式(至少是在不牺牲性能的前提下)。
—PingCAP
两种语言各有不同的应用范围。Go 擅长编写微服务和典型的"DevOps"任务, 但它并不属于系统编程语言。Rust 在强调并发性、安全性及/或性能的任务中更为强大, 可学习曲线也确实比 Go 更陡峭。
—Matthias Endler
Rust 的执行速度优于 Go。在基准测试中, Rust 速度确实更快, 某些情况下甚至能快出一个数量级。但在选择 Rust 语言之前, 请先认清一点: Go 在多数基准测试中也没有落后太多, 而且也仍然保持对 Java、C#、JavaScript 和 Python 等语言的性能优势。
如果你需要的是顶级性能, 那么在这两种语言中任意选择都可以, 速度表现绝不会令人失望。另外, 如果你正在构建一款处理高强度负载的 Web 服务, 而且要求能够纵向/横向灵活扩展, 两款语言也都能满足需求。
—Andrew Lader
我的看法是: 对于明天就得发布的代码, 用 Go; 如果是未来五年内必须能稳定运行的代码, 那么选 Rust。
—Grzegorz Nosek
如果你想加快开发速度, 比如说你有很多不同服务需要编写, 或者开发团队本身规模庞大, 那么 Go 语言肯定是正确答案。Go 特别关注并发性设计, 而且会敏锐地揪出不安全的内存访问行为(Rust 也可以), 但又不强迫你逐一管理每处细节。
Go 快速而强大, 但它的核心亮点还是帮助开发人员摆脱困境、专注于简单性和统一性。在另一方面, 如果你需要竭尽全力发挥每一丝性能空间, 那 Rust 才是最理想的选择。
—Andrew Lader