也许是最客观、全面的比较 Rust 与 Go,值得你读

最近一年 , 将 Rust 和 Go 进行比较的不少 , 但不少都不公正 , 带感情色彩 。 而这篇文章客观、全面的分析对比了 Rust 和 Go , 让你具体项目时选择最合适的 。
Rust 还是 Go , 哪个更好?你应该为下一个项目选择哪种语言 , 为什么?两者在性能 , 简单性 , 安全性 , 功能 , 规模和并发性等方面如何比较?它们有什么共同点 , 并且在根本上有何不同?来自 For the Go of Love[1] 系列图书的作者 , 友好而公正的比较 Rust 和 Golang 。
Rust 和 Go 都很棒首先 , 非常重要的一点是 , Go 和 Rust 都是绝对优秀的编程语言 。 它们是现代的 , 强大的 , 被广泛采用的 , 并且具有出色的性能 。 你可能已经阅读了一些文章和博客文章 , 目的是说服 Go 比 Rust 更好 , 反之亦然 。 但这确实没有道理;每种编程语言都代表一组权衡 。 每种语言针对不同的事物进行了优化 , 因此 , 应根据适合你的语言以及你要解决的问题来确定语言的选择 。
在本文中 , 我将简要概述我认为 Go 是理想的选择 , 以及我认为 Rust 是更好的选择的地方 。 不过 , 理想情况下 , 你应该对这两种语言都有一定的了解 。 尽管它们的语法和样式差异很大 , 但 Rust 和 Go 都是用于构建软件的一流工具 。 话虽如此 , 让我们仔细看看这两种语言 。
相似之处Rust 和 Go 有很多共同点 , 这是你经常听到他们一起被提及的原因之一 。 两种语言的共同目标是什么?
Rust 是一种专注于安全性和性能的低级静态类型多范式编程语言 。 Gints Dreimanis[2]
Go 是一种开放源代码编程语言 , 可轻松构建简单 , 可靠和高效的软件 。 —Golang.org[3]
内存安全Go 和 Rust 都属于优先考虑内存安全性的现代编程语言 。 数十年来 , 使用 C 和 C++ 等较旧的语言已经很清楚 , 导致错误和安全漏洞的最大原因之一是不安全或不正确地访问内存 。 Rust 和 Go 以不同的方式处理此问题 , 但是两者的目的都是要比其他有关内存管理的语言更聪明 , 更安全 , 并帮助你编写正确且性能良好的程序 。
快速 , 紧凑的可执行文件它们都是编译语言 , 这意味着你的程序直接转换为可执行的机器代码 , 因此你可以将程序作为单个二进制文件进行部署;与 Python 和 Ruby 等解释型语言不同 , 你无需随程序一起分发解释器 , 大量库和依赖项 , 这是一大优势 。 与解释型语言相比 , 这也使 Rust 和 Go 程序都非常快 。
通用语言Rust 和 Go 都是功能强大 , 可扩展的通用编程语言 , 你可以使用它们来开发各种现代软件 , 从Web应用程序到分布式微服务 , 或者从嵌入式微控制器到移动应用程序 。 两者都具有出色的标准库和蓬勃发展的第三方生态系统 , 以及强大的商业支持和庞大的用户群 。 它们都已经存在了很多年 , 并将在未来几年继续被广泛使用 。 今天学习 Go 或 Rust 将是你的时间和精力的明智投资 。
务实(Pragmatic)的编程风格两种语言都不是纯函数式语言(例如 Scala 或 Elixir) , 也不是全面面向对象的语言(例如 Java 和 C#) 。 相反 , 尽管 Go 和 Rust 都具有与函数和面向对象的编程相关的功能 , 但它们都是务实的语言 , 旨在以最合适的方式解决问题 , 而不是强迫你采用特定的处理方式 。 (不过 , 如果你喜欢函数式编程风格 , 则在 Rust 中会发现更多的函数式特性 , 因为 Rust 的函数式功能比 Go 多得多 。 )
我们可以讨论什么是“面向对象”语言 , 但是公平地说 , Go 或 Rust 中都没有 C++ , Java 或 C# 用户期望的面向对象编程风格 。 —Jack Mott
大规模发展Rust 和 Go 都具有一些有用的特性 , 这使其适合于大型编程 , 包括大型团队 , 大型代码库 , 或两者兼而有之 。
例如 , 尽管 C 程序员多年来一直在争论括号的位置 , 以及是否应使用制表符或空格使代码缩进 , 但 Rust 和 Go 都通过使用标准格式工具(gofmt 用于 Go, rustfmt 用于 Rust)完全消除了此类问题 。 它使用规范样式自动格式化你的代码 。 并不是说这种特殊的样式本身如此出色:而是 Rust 和 Go 程序员所欣赏的标准化 。
gofmt 的风格不是每个人的最爱 , 但 gofmt 是每个人的最爱 。 Rob Pike[4]
两种语言得分很高的另一个领域是构建管道(build pipeline) 。 两者都具有出色的内置高性能标准构建和依赖管理工具 。 不再需要为复杂的第三方构建系统而费力 , 也不必每两年学习一次新的 。
在我早期的职业生涯中 , 具有 Java 和 Ruby 背景的 Go 和 Rust 代码构建工作似乎使我无法承受 。 当我在 Google 时 , 遇到用 Go 编写的服务感到很欣慰 , 因为我知道它易于构建和运行 。 Rust 的情况也是如此 , 尽管我只是在较小的规模上进行了研究 。 我希望无限可配置的构建系统的日子已经一去不复返了 , 所有语言都附带了它们自己专用的构建工具 , 这些工具可以直接使用 。