新项目用Rust还是Go?
极客时间编辑部
讲述:丁婵大小:7.53M时长:05:29
如果你用 Rust 语言或 Go 语言编写过代码,就会发现它们之间有很多异同之处,那么,当你纠结于选择 Rust 还是 Go 时,该考虑什么,才能使你的选择更好呢?
日前,公众号“高可用架构(ID:archnotes)”翻译了技术记者劳伦·亚历山大(Lauren Alexander )的一篇文章。文中,亚历山大表示其采访了一位同时拥有 Rust 和 Go 语言经验的资深工程师达米恩·斯坦顿(Damien Stanton),就两种语言的差异、相似之处、以及二者之间的一些争议点展开了讨论。这或许可以帮助你在对 “Rust 还是 Go”的选择问题上提供参考。
Rust 和 Go 有哪些相似之处?
斯坦顿表示,这两种语言以及背后的生态都在尝试解决许多相同或类似的问题。它们都是介于偏底层的系统语言(如 C 、C++)和基于运行时的语言(如 Java、Python)之间,但它们都更适用于系统编程领域。
易于部署 / 分发和方便交叉编译是 Rust 和 Go 的优点,同时内存安全对两种语言也很重要。它们都天然具备解决高性能或高并发问题的能力,而这也是使用 Python 或 Java 不容易做到的。
在内存管理方面,Rust 和 Go 使用了完全不同的方式,但在稳固、可靠、易于维护和升级等方面,二者都做得很好。
如何在 Rust 和 Go 这两种语言之间做选择?
曾经有观点说“Go 语言是更友好的 C 语言”。斯坦顿称,以他的使用经验和观察来说,Go 可能是 Java 的更好继承者,因为它适合构建大型分布式系统。这也是 Kubernetes 和 Docker 使用 Go 编写的原因。而选择 Rust,则更适用于对时间 / 空间要求苛刻的场景,比如微控制器。另一个重要场景就是 WebAssembly,在 Rust 社区中,构建编译成 WebAssembly 并跑在浏览器中的工具非常多。就这点来看,Rust 更类似于 C++。
如果需要在这两种语言之间做选择,斯坦顿认为更多是从编程经验和能力上考量,而非要解决的特定问题。
斯坦顿表示,选择使用 Go 的主要原因是它更容易上手,适合处于快速增长期的团队。即使团队中来了新成员,也可以迅速开始产出。相较而言,Rust 的学习曲线更陡峭,更难上手,一些具备 C++ 或 Java 背景的团队可能会选择它。
Rust 和 Go 的争议点
1. 泛型
在 Go 社区内部,最常见的抱怨就是泛型的缺失。相较而言,Rust 具有强大的类型系统并支持泛型,它的设计哲学不同于 Go ,类型系统方面借鉴了 Haskell 和 C++。
2. 并发
Go 具有 Goroutine+Channel 的并发模型,而 Rust 则具备更简单的多线程模型,类似于 C++ 或 Java,不过具有更好的线程间通信能力。
如今,Rust 朝 Future 模型发展,也就是 async/await 模型,它以同步的方式和思维编写代码,却以异步方式执行。
Rust 还有一个功能强大的宏(macro)系统,可以帮助编译器做很多工作,比如生成代码。此外,Rust 还有更多可供开发者细粒度控制的细节,这也意味着 Rust 的学习挑战很大。
3. 构建工具
简单来说,Go 的构建工具够用但还不够强大。比如开发人员希望为他们的编辑器提供稳定的语言服务器(languange server,可参考 lsp 协议)、易于使用的依赖管理解决方案以及良好的自动文档和发布工具等等。相较而言,Rust 的工具相当出色,它有完善的文档,还可以轻松扩展子命令。
4. 用例: Fuchsia
Go 与 Rust 的一个有趣讨论是,关于 Google 研发的新系统 Fuchsia 的用例。Google 主要使用 C++ 构建 Fuchsia,但其中有一些来自 ChromeOS 的组件大量使用了 Rust。为了确定用户如何为 Fuchsia 编写程序(用户级程序而不是内核组件),Google 研究了五种语言,包括 Go 和 Rust。他们发现,Go 的内存管理开销会导致过多的延迟。这是内存管理语言的普遍问题,最终只能用 C++ 或 Rust 编写面向用户的代码。
5. 发布周期
这两种语言有非常不同的发布方式和发布周期:
Go 的发布周期:有些规律但依然是一个黑匣子。核心团队之外没有人真正知道何时发布新版本,而且经常是通过一篇博客就宣布发布了。在 Gerrit/GitHub 上以 issue 形式存在的文档很多,但不够完善和透明。
Rust 的发布周期:更加透明,具有良好的稳定 / 测试版 / 尝鲜版说明。
从长远来看,使所有内容完全开放和透明可能更好。
以上就是今天的内容,希望能给你带来参考价值。
本文中文版转载自公众号高可用架构(archnotes)。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(4)
- 最新
- 精选
- brqi系统级编程用Rust,后台及web类开发用Go归属地:广东11
- 李刚从这篇文章来看,rust似乎更好。1
- 小斧Rust 和 Go 的争议点 1. 泛型 2. 并发 3. 构建工具 4. 用例: Fuschia 5. 发布周期
- X丶楓语言很多,学不完。
收起评论