Hi,您好,欢迎来到西安盛图软件科技有限公司!

吵翻了!到底该选 Rust 还是 Go,成 2023 年最大技术分歧

发布时间:2023-08-25 09:09:38

2023 年,我们有一千个学习 Rust 的理由。

 

8 月 7 日,Rust 基金会发布了 2022 年度 Rust 调查报告结果,报告显示 Rust 采用率不断提高,超过 90%的调查受访者表示自己是 Rust 用户;29.7% 的受访者表示,他们在工作中的大部分编码工作都使用 Rust,比上一年显着增加了 51.8%。

 

毋庸置疑,Rust 以其卓越的内存安全性和并发性能正日益成为开发者关注的焦点。然而,同样令人难以忽视的是 Go,这门曾被评选为年度编程语言的相对比较“老牌”的选手。

 

Go 语言诞生于 2009 年,一开始就因其独特的并发模型和强大的性能优势而受到了极大关注。值得注意的是,跟 Rust 语言一样,Go语言的创建者也同样“讨厌”C++,并且 Go 同样也都是云原生的主导语言

 

而在 Stack Overflow 2022 开发者调查中,对于“让人爱恨交织的编程语言”这个问题,在 7 万份回复中,程序员们明显也更为偏爱 Rust,86%的人表示喜欢 Rust,而 64%的人表示喜欢 Go。面对 Rust 的火爆现状,一些开发者发出了灵魂提问:2023 年,Go 还值得学习吗?

 

图片


图片


另外,这两天,到底是该选 Rust 还是选 Go,也成为了 Hacker News 上的一个热门话题:

 

图片


一位挺 Rust 的网友说道:“我也为这个选择烦恼了很久。最终 Rust 胜出了。首先,我感觉 Rust 更接近于以前 Pascal 时代的东西,你可以控制一切;其次,如果 wasm 和相关技术大爆发,Rust 将是一个更安全的选择;然后,我们已经有了 Python 用于快速开发,因此选择一些更极端的东西是有道理的,Go 在某种程度上处于中间地带。最后,Rust 应用于内核且备受关注,所以不太可能会被淘汰。”

 

另一位持反对意见的开发者则表示,“我从事 Go 开发已经快十年了,但最近我也尝试了下 Rust。我认为目前有一些对 Rust 的强制性和误导性偏好,从我在各种初创公司的经验,包括我目前所在的公司来看,对于后端开发来说,Go 是迄今为止最佳选择!注意,在性能、功能或其他方面……这两种语言非常非常相似!”

 

不得不说的是,Go 和 Rust 绝对都是优秀的编程语言。它们现代、强大、应用广泛,而且有着卓越的性能表现。但如果直接对比 Go 和 Rust 谁更好之类的,真的没啥意义,因为每种编程语言都代表着背后一系列深层次的权衡。不同的语言会针对不同的需求进行优化,因此我们在选择语言时,也应该考虑自己想要用它解决什么样的问题。所以我们将从 Go 和 Rust 语言的适用场景出发,探讨下 Go 与 Rust 的设计之“道”。

 

虽然 Rust 和 Go 在语法和风格上差别很大,但它们都是构建软件的一流工具。下面咱们开始具体分析。

 

Go 与 Rust:相似性

 

Rust 和 Go 有很多共同点,所以人们才经常把二者拿来相提并论。那它们有哪些共同目标?

 

Rust 是一种低级静态类型的多范式编程语言,更多关注安全性和性能。

Gints Dreimanis

 

而:

Go 是一种开源编程语言,能够轻松构建起简单、可靠且高效的软件。

golang.org

 

内存安全

Go 和 Rust 都属于重视内存安全的现代编程语言。在 C 和 C++等旧语言发展的这几十年间,我们已经清楚地意识到,引发错误和 bug 的核心原因之一,就是对内存的不安全/不正确访问。

 

于是 Rust 和 Go 各自给出了不同的解决思路,但二者的目标都是在内存管理方面更智能、更安全,帮助开发者编写出正确且性能极佳的程序。

 

快速、紧凑的可执行文件

二者都属于编译语言,也就是说可以将程序直接翻译成可执行的机器代码,这样就能把程序部署成单一二进制文件。跟 Python 和 Ruby 等解释性语言不同,我们不需要随程序一同发布解释器和大量的库/依赖项。作为这个核心优势的直接体现,Rust 和 Go 程序的运行速度往往比解释性语言更快。

 

通用型语言

Rust 和 Go 都属于功能强大且可扩展的通用编程语言,大家可以用它们开发出各种现代软件——从 Web 应用程序到分布式微服务,还包括嵌入式微控制器和移动应用等等。

 

两者都拥有优秀的标准库和蓬勃发展的第三方生态系统,外加强大的商业支持与庞大的用户基础。二者已经存在多年,并将在未来几年继续保持旺盛的发展势头。如今,学习 Go 或者 Rust 将是非常合理的时间和精力投入方向。

 

务实的编程风格

两者既不过多偏向函数式语言(例如 Scala 或 Elixir),也不完全面向对象(例如 Java 和 C#)。相反,虽然 Go 和 Rust 都具备函数式及面向对象编程的功能,但却始终强调务实取向——即以最合适的方式解决问题,而不是通过“意识形态”强迫大家用特定的方法做事。

 

但如果您确实喜欢函数式编程风格,那 Rust 这边的相关工具选项更多,这也是 Rust 优于 Go 的一点。

我们当然可以争论什么才是真正“面向对象”的语言。但公平地讲,C++、Java 或者 C#用户所期望的那种面向对象编程风格,在 Go 或者 Rust 中确实不存在。

—Jack Mott

 

大规模开发

Rust 和 Go 都为大规模编程提供不少有用功能,所以它们都能适应大开发团队作战和大体量代码库的现实需求。

 

例如,C 程序员多年来一直在争论应该把括号放在哪里,还有代码要不要用制表符或空格进行缩进;但 Rust 和 Go 早已使用标准格式化工具(Go 有 gofmt,Rust 则是 rustfmt)彻底解决了这些问题。它们会使用符合规范的风格自动重写你的代码。

 

并不是说这种特定的格式有多精妙,而是 Rust 和 Go 程序员更加务实、宁愿选择统一的执行标准。

gofmt 的风格也许不是每个人的最爱,但 gofmt 却能帮到每一个人。

Rob Pike

 

这两种语言的另一大优势,体现在构建管线上。二者都有优秀、内置且性能出色的标准构建与依赖项管理工具。就是说程序员不必跟复杂的第三方构建系统对抗,也用不着每隔几年就学习一种新系统。

 

我在职业生涯早期用的是 Java 和 Ruby,所以编写 Go 和 Rust 代码一直让我有点畏惧、觉得自己掌握不了。但等到进入谷歌并看到用 Go 编写的服务时,我才真正松了口气,因为我发现它很容易构建和运行。

Rust 也是如此。虽然我只在小规模项目上进行过研究,但也看得出它的易用性。我希望那些能够无限配置的构建系统早点成为历史,现在的新语言都附带自己的专用构建工具而且能够开箱即用,这样不好吗?

Sam Rose

 

到底选 Rust 还是 Go?

上一篇:知识拓展|2023 年值得推荐的 5 个数据可视化平台
下一篇:谷歌认真起来,就没 OpenAI 什么事了!创始人组队打造“杀手级”多模态 AI 模型