Go和Rust都是系统语言和通用语言 - Reddit


一般人认为:Rust通常是一种系统编程语言;而Go是通用语言。

这有点误导性:

"系统编程 "最初的意思是 "与脚本语言相反,这种语言优先考虑在较长的生命周期内保持大型基础设施代码库的可维护性和人员变动,即使这降低了原型设计的速度"。(在这个定义下,Java、Go和Rust都是系统语言)。

这只是一个历史细节,当这个词被创造出来的那个时候,当时硬件资源是非常稀缺,以至于你不得不使用低级语言来构建基础设施。而现在,"基础设施 "包括像微服务这样的东西,Go完全适合 "系统语言 "这个称号。(糟糕的是,Java和Go在可维护性方面的定义都是 "不要给新手足够的绳子来轻易吊死自己",而Rust的方法是 "给专家一个强大的类型系统来建立安全轨道并建立这样做的文化"。)

Rust确实需要你考虑内存管理,所以它在这方面比Go低级,但是,它在各方面也比Go高级,比如它对错误处理、无效性和数据竞争的预防方法。
因为Go有垃圾收集器,而Rust没有,所以Rust被证明比Go更有通用性,很适合加入那些已经有自己的垃圾收集器的地方,比如Node.js、CPython和CRuby扩展(垃圾收集器是孤独的生物,让它们一起愉快地工作是很痛苦的。)或者加入垃圾收集器不可行的地方。(例如,重写librsvg,同时保持外部C API不变)。

简而言之,它们都是系统语言,都是通用语言。

Rust未来看好的领域

  • Rust代码将在未来一年内登上月球。
  • 汽车等对安全要求高的行业对Rust有很大的兴趣。不过,验证工作还需要一段时间,预计Rust会在小众项目中停留一段时间。
  • Rust已经在CLI工具方面取得了成功--谁能否认这一点。
  • 另外,可扩展的低延迟服务器系统似乎是一个可行的利基项目--想想Dropbox的 "Magic Pocket "存储系统。
  • 在Web前端,WASM非常适合Rust,给Web开发者提供了可靠的性能和我们熟悉和喜爱的伟大的开发体验。

当然,后端Web API是Go的主要领域之一,在这个领域可同时使用Rust和Go,我更喜欢Rust。
在使用Go的时候,经常因为被迫使用冗长的模式和丑陋的错误处理而感到沮丧,实际上,一旦你掌握了生命期,我就会发现Rust更容易,你可以更简单地使用宏,而且像serde这样的板块也很容易操作。此外,你还会得到明显的性能和安全方面的好处。

Go的入门门槛显然要低得多,而且像印度这样的国家充满了Go语言工程师,所以我认为Go在初创公司中占主导地位,而那些能够得到Rust工程师的大公司则可能会走这条路。