【在主画面加入捷径】
       
【选择语系】
繁中 简中

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

    网络论坛上有许多讨论这个议题的讨论串,像是这个。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 在语法特性上比较短板,我们仍然可以用较直白的 (verbose) 方式来写程序,说穿了只是换了个较朴实的手法。网页程序是语言中立的,我们可以用不同的后端语言撰写具有相同行为的网页程序,所以语言特性并不是决定性的因素。

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

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

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

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

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