开发人员的困境:选择Go还是Rust?

译文
开发 后端
如果让你列出过去十年出现的重要编程语言,几乎可以肯定Go和Rust榜上有名。如果你难以决定到底是Go还是Rust更适合开发需求,继续读下去。此文比较了Go和Rust,解释了两者的相似和不同之处以及各自能为你做什么。

[[279405]]

【51CTO.com快译】如果让你列出过去十年出现的重要编程语言,几乎可以肯定Go和Rust榜上有名。

同样,如果让你坐下来想想如今哪种编程语言最适合开发对微服务友好且安全的框架或应用程序,你可能发觉在Go和Rust之间难以决定。

如果你难以决定到底是Go还是Rust更适合开发需求,继续读下去。此文比较了Go和Rust,解释了两者的相似和不同之处以及各自能为你做什么。

Go编程语言

Go(又叫Golang)于2009年向公众推出,它由谷歌工程师(包括以Unix成名的Ken Thompson)设计。开发Go出于诸多动机,但是开发人员的目标也许可以用此来概括:他们只是想要一种提供C++的效率,但经过优化后更容易在多核CPU上编写、阅读和部署的语言。

为此,Go的独特功能之一是goroutine,它使人们很容易定义作为不同子进程运行的函数。如果充分利用goroutine,开发人员可以用Go轻松构建同时在多个CPU核心上部署工作负载以充分发挥并发性的应用程序。

并发性和优化是强大的功能。这就是我们选择用Go开发Twistlock的原因之一。

Rust编程语言

Rust的历史在很多方面与Go的历史颇为相似。Rust起初是Mozilla一名工程师的个人项目,诞生于2000年代中期。该语言于2010年公开发布。

与Go一样,Rust的部分动机是希望改进C++的约定,包括使其更易于实现并发性。同时又不降低安全性也是一个主要的考量因素。为此,Rust使开发人员很难将可能导致缓冲区溢出或其他内存相关漏洞的缺陷引入代码中。

Go和Rust的共同点

Go和Rust在许多方面很相似。它们都是如今广泛使用的新兴编程语言之一。当今大多数其他流行语言的历史久得多,比如C、Java和Python。

Go和Rust都是经过编译的语言,开源,针对面向微服务的现代并行计算环境而设计的。

如果你已经了解C ++,它们都很容易学习。

Go vs. Rust

这可能让你不由得发问:“我该使用Go还是Rust来开发下一个应用程序?”

可以从多个方面来回答这个问题,但建议从正在构建的应用程序的类型来考虑。在我看来,Go适合更广泛的使用场景,而且更灵活一点。Go让人们很容易构建这种很好地分解的应用程序:可以充分发挥并发性,又可以作为一组微服务加以部署。

Rust也可以做那些事情,不过要难一点。从某些方面来说,Rust专注于防止与内存有关的安全漏洞,这意味着程序员必须竭尽全力执行的任务换成其他语言(包括Go)要来得更简单。

请注意:顺便说一下,这并不意味着Go不安全。Go与其他任何现代编程语言一样安全。它只是不像Rust那样关注安全性或者任由安全性优先于更广泛的功能。

简而言之:Rust较难使用,更加关注构建范围较狭窄的应用程序(安全是唯一重要的方面)。相比之下,Go很适合构建你不仅关注安全性,还关注其他诸多因素的应用程序——如果你是旨在构建灵活可扩展的应用程序或框架的DevOps团队,这可能是你的目标。

同样值得一提的是,Go在当今的开发人员中更受欢迎。TIOBE Index将Go列在最流行编程语言排行榜上的第15位,而Rust排在第34位。我知道你不应该随大流,但在编程界,选择更流行的语言确实有好处。其他程序员更可能了解它们,这使得共享代码或为团队添加成员变得更容易。流行语言还往往有更好的社区支持、文档和插件。

我无法在使用Go还是Rust方面给出明确的建议,那是由于两种语言都是很棒的现代语言,你在决定如何构建新应用程序时最好两者都考虑一下。

话虽如此,与大多数程序员一样,我往往对Go更倾向一点,因为它适合更广泛的使用场景,同时仍提供很高的安全性和性能。

原文标题:The developer’s dilemma: Choosing between Go and Rust,作者:Sonya Koptyev

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

责任编辑:庞桂玉 来源: 51CTO
相关推荐

2020-06-22 07:18:21

Java语言开发

2021-02-16 16:44:40

RustJavaScript开发

2009-07-20 16:11:41

JRuby Swing

2010-08-09 16:09:25

2009-12-11 14:50:14

Visual Basi

2009-11-23 20:07:51

ibmdw开发

2021-02-19 09:33:01

kubernetesJAVA服务

2012-05-30 15:15:42

ibmdw

2023-03-15 07:12:53

企业开发人员提供商

2020-08-14 10:54:56

NodejsGolang开发

2022-01-06 16:15:58

自测测试开发人员

2020-11-30 15:22:40

开发软件初创公司

2019-11-27 18:54:07

物联网数字孪生机器学习

2023-02-17 15:01:15

2021-12-10 23:48:19

Java开发技术

2010-08-16 09:21:35

Windows Pho

2012-12-14 08:55:45

开发人员产品经理

2009-05-31 08:31:07

GoogleWaveTechCrunch

2023-08-14 15:23:37

2011-09-05 14:21:29

webOS
点赞
收藏

51CTO技术栈公众号