极客视点
极客时间编辑部
极客时间编辑部
113243 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/05:29
登录|注册

新项目用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
    归属地:广东
    1
    1
  • 李刚
    从这篇文章来看,rust似乎更好。
    1
  • 小斧
    Rust 和 Go 的争议点 1. 泛型 2. 并发 3. 构建工具 4. 用例: Fuschia 5. 发布周期
  • X丶楓
    语言很多,学不完。
收起评论
大纲
固定大纲
Rust 和 Go 有哪些相似之处?
如何在 Rust 和 Go 这两种语言之间做选择?
Rust 和 Go 的争议点
1. 泛型
2. 并发
3. 构建工具
4. 用例: Fuchsia
5. 发布周期
显示
设置
留言
4
收藏
54
沉浸
阅读
分享
手机端
快捷键
回顶部