技术杂谈:Rust 或 Go (Golang) 何者较适合做为后端语言

PUBLISHED ON SEP 8, 2018

    网络论坛上有许多讨论这个议题的讨论串,像是这个。Rust 和 Golang 分别问世将近十年,这段时间已经足以了解其趋势,从相关流行度统计来看,Golang 是很明显的优胜者。部分程序设计者可能会感到疑惑,明明 Rust 具有许多 Golang 没有的优势,为什么 Golang 反而比较流行呢?

    理论上 Rust 和 Golang 不应该放在同一个基准点上来比较。Rust 基本上是强化过安全性的 C++;和 C++ 类似,Rust 的语言特性也相当丰富。相对来说,Golang 设计理念向 C 靠拢,但其实是和 Java 类似的应用程序语言,而非 C (或 C++) 般的系统程序语言。但是,就像 C++ 也是可以拿来当做另一个 (困难版的) Java,用来写应用程序,Rust 和 Go 其实也是有部分重叠的目标族群,自然就成了一时瑜亮,就像本文讨论 Rust 和 Golang 在后端语言上的应用。

    Rust 比起 Golang,有以下优势:

    • 更丰富的语法特性
    • 在相同的算法下,编译出来的可执行文件更快
    • 安全性更高

    然而,这些优势并没有让 Rust 在后端语言上比 Golang 更流行,这是为什么呢?

    除非我们的目标是打造新的程序语言,语法特性是撰写应用程序的手段,而非目的。在尽量保持良好的工程性下,最重要的还是最终的产品 (即应用程序),而程序语言仅仅是将想法转为可运行的电脑程序的中间媒介。虽然 Go 在语法特性上比较短板,我们仍然可以用较直白的方式来写程序,说穿了只是换了个手法。网页程序是语言中立的,我们可以用不同的后端语言撰写具有相同行为的网页程序,所以语言特性并不是决定性的因素。

    不可否认地,Go 编译出来的可执行文件,其执行速度的确比 Rust 所编译出来的慢,但是,对于网页程序来说,这样的速度通常也够快了。网页程序的效率瓶颈,往往不是来自程序语言本身,而是来自其他的地方,像是算法、数据库、网络连线、系统架构等,最好还是要先找出真正的瓶颈来源加以改善,而不是一味迷信语言所带来的速度。

    Rust 在安全性上相当地着名,其代价就是相当吹毛求疵的编译器。程序设计者往往要花上许多时间来适应 Rust 编译器,这个过程造成生产力相对低下;但这样的安全性是否带来实质的益处呢?Golang 不像 C 语言那么不安全,也不像 Rust 那么安全,但对于网页程序来说,其实这样子已经足够了。相对来说,Golang 相当简单,有经验的程序人可在很短的时间内上手,开始将 Go 用在实质的项目中。

    Go 语言有以下的优势,对于后端语言来说相当适合:

    • 如同 Python 等动态语言般易用
    • 静态类型,更容易在编译期抓出错误
    • 快速编译,使得开发迭代更密集
    • 内建共时性 (concurrency) 相关语法
    • 对于后端程序来说,有丰富的标准和社群函式库
    • 不需条件编译就可以达成跨平台的程序代码
    • 良好的工具键
    • 简单的项目架构,也不需额外的设定档

    虽然 Go 在语法特性上不算特别优秀,但整体来说,仍然是一个好的后端语言。