对比 Go 语言,Rust 有什么优势和劣势?
作者:bombless
Rust 相比 Go 的优势:
- Rust 可以做内联汇编,Go 不行(Rust 的 SIMD 库也在开发中,这种事情你不会用 Go 做)
- Rust 有确定性析构,Go 没有,只能 whole-world-stop 做 GC
- Rust 的接口(trait)可以静态派发,做 zero-cost abstraction,Go 不行,它的 interface 只能靠反射做动态派发
- Rust 没有运行时,可以写操作系统(我估计至少需要几百行汇编做 bootstrap),Go 离这种能力很远
- Rust 有一个更丰富的类型系统,表达能力更强,允许你做更高层次的抽象,写出泛用的库,这个是 Go 不具备的
- Rust 有更强的语义,更容易捕获错误的逻辑,编译器直接检查出你代码中的不安全的部分
- Rust 的适用领域比 Go 更广
- Rust 社区更愿意改变,Go 社区喜欢坚持他们不需要泛型
- Rust 有一个活跃的开发社区,如果你发觉有东西需要做出改变,不管是文档、编程思想、语言设计、bug fix 等等,社区欢迎你提出来一起讨论,并且没有问题的建议经常能被快速接受,不管你以后工作中会不会频繁用到 Rust,与 Rust 一起成长总会是一段有趣的体验;相比之下 Go 算是大公司病,人们不那么对提出改进的建议做出积极响应。我自己也曾经为 Go 感到兴奋,在那半年中我却没有读过 Go 的源码;然而在 Rust 这活跃的社区的促进下我也读过一些源码了,如果你对代码的组织方式等源码相关的问题有疑惑欢迎与我讨论。
Rust 相比 Go 的劣势:
- Go 相比 Rust 比较简单,相对容易学习
- Rust 的语言设计看上去不如 Go 稳定,我是从 0.10 才开始用 Rust ,感受不深,不过我理解更早的用户可以感受到语言设计的巨大变化。我自己也经历过各种 breaking change,比如 enum 成为命名空间时,数组下标从 uint 改为 usize 时。对 1.0 之后语言的稳定性我们只能拭目以待
- Rust 是后来者,文档不那么完整、思维需要做出一些转换(因为它比 Go 的内容更加丰富)。这个我必须要补充一句,Rust 文档一直在高效率地快速更新,文档的缺陷通常都是因为相关的改变是最近一个星期才做出来的。关于文档,我自己就参与过几次更改,有这方面的问题欢迎与我讨论。
THE END