作为两门新语言,很多人可能将 Rust[1]和 Go[2] 视为相互竞争的编程语言,但 Rust 和 Go 团队并不这样认为。相反,两个团队非常尊重各自正在做的事情,并将这些语言视为对整个软件开发行业现代化的共同愿景的补充。本文的两位作者,一位是 Go 开发组成员,Hugo、Viper、Cobra 等优秀开源项目的作者;另一位是 Rust 开发组成员。 本文将讨论 Rust 和 Go 的优缺点以及它们如何相互补充和支持,同时给出什么场景最适合哪门语言的建议。 目前已经有一些公司发现同时使用这两种语言具有互补价值。为了让我们的想法更贴合用户体验,我们同三家这样的公司(Dropbox[3]、 Fastly[4] 和 Cloudflare[5] )探讨了关于 Rust 和 Go 一起使用方面的经验。在本文中将引用各个团队的观点。 1、Go 和 Rust 的比较2、Go 和 Rust 的相似之处Go 和 Rust 有很多共同点。他们都是现代编程语言,他们的诞生都是为了解决软件的安全性和可伸缩性。他们创建的目的都是为了解决当前行业中现有语言的缺陷,特别是开发者的生产率、软件的可伸缩性、安全性和并发性方面的不足。 当今流行的大多数语言都是在 30 多年前设计的。在设计这些语言时,与今天相比有五个主要区别:
相比之下,Rust 和 Go 都是为当今世界编写的,并且通常采用类似的方法来设计一种满足当今开发需求的语言。 1)性能与并发Go 和 Rust 都是专注于生成高效代码的编译语言。它们还提供对当今机器的多个处理器的轻松访问,使它们成为编写高效并发代码的理想语言。 以下是一些公司真实案例。 MercadoLibre 与 Go 一起成长[6]:
Bala Natarajan,Paypay[7]:
Matt Asay,亚马逊网络服务[8]:
Josh Hannaford, IBM[9]:
2)团队可扩展——可审查当今软件的开发团队可能是不断变化的 (团队成员可能是不断扩充),一般是以分布式的方式进行代码管理。Go 和 Rust 都是为团队的工作方式而设计的,通过消除不必要的问题,如格式、安全性和复杂的组织,来改善代码审查。这两种语言都需要相对较少的上下文来理解代码正在做什么,从而允许审查人员更快地处理其他人编写的代码,包括团队成员的代码和外部的开源代码。 业界的一些看法。 Sam Rose, CV 合作伙伴[10]:
Daniel Reiter Horn, Dropbox:
3)开源意识今天普通软件项目使用的依赖项数量是惊人的。数十年来软件重用的目标已经在现代开发中实现,今天的软件是使用数百个项目构建的。为此,开发人员使用软件存储库,它日益成为各种应用程序中软件开发的主要内容。开发人员包含的每个包都有自己的依赖项。当今编程环境的语言需要毫不费力地处理这种复杂性。 Go 和 Rust 都有包管理系统,允许开发人员制作他们想要构建的包的简单列表,语言工具会自动为他们获取和维护这些包,以便开发人员可以更专注于自己的工作代码,少管别人。 4)安全性Go 和 Rust 都很好地解决了当今应用程序的安全问题,确保在这些语言中构建的代码运行时不会将用户暴露于各种经典的安全漏洞,如缓冲区溢出、释放后使用等。没有这些顾虑,开发人员就可以专注于手头的问题,并构建默认情况下更安全的应用程序。 业界对此的一些观点。 Josh Hannaford, IBM[11]:
Taylor Thomas, Sr., Microsoft[12]:
Stefan Nilsson,计算机科学教授[13]:
Daniel Reiter Horn,Dropbox:
5)真正便携在 Go 和 Rust 中编写一个可以在许多不同操作系统和架构上运行的软件都是微不足道的。“一次编写,随处编译”。此外,Go 和 Rust 本身都支持交叉编译,消除了通常与旧编译语言相关的“构建农场”的需要。 对此,业界的看法。 Dewet Diener, Curve[15]:
Brian Ketelsen, Microsoft[16]:
Matt Ronge, Astropad[17]:
3、Go 和 Rust 的不同之处在设计中,总是需要权衡取舍。虽然 Go 和 Rust 大约在同一时间出现,有着相似的目标,但有时由于面临决策,他们选择了不同的权衡,这些权衡在关键方面将语言区分开。 1)性能Go 具有开箱即用的出色性能。按照设计,没有任何旋钮或控制杆(译注:即所谓的调优)可让你从 Go 中获得更多性能。Rust 旨在使你能够从代码中挤出每一滴性能;在这方面,你今天真的找不到比 Rust 更快的语言。然而,Rust 的性能提升是以增加复杂性为代价的。 业界对此又是什么看法? Jesse Howarth, Discord[18]:
Daniel Reiter Horn,Dropbox:
2)适应性/交互性Go 的快速迭代优势允许开发人员快速尝试想法和手头任务的工作代码。通常,这就足够了,并且可以让开发人员腾出时间处理其他任务。另一方面,与 Go 相比,Rust 的编译时间更长,导致迭代时间更慢。这导致 Go 在更快的周转时间允许开发人员适应不断变化的需求的场景中工作得更好,而 Rust 在可以有更多时间进行更精细和高性能的实现的场景中蓬勃发展。 Daniel Reiter Horn, Dropbox:
Peter Bourgon, Fastly:
3)可学习性简而言之,真的没有比 Go 更平易近人的语言了。有许多团队能够在几周内采用 Go 并将 Go 服务/应用程序投入生产的故事。此外,Go 在语言中相对独特,因为它的语言设计和实践在其 10 多年的生命周期中非常一致。所以花在学习 Go 上的时间会在很长一段时间内保持其价值。相比之下,由于其复杂性,Rust 被认为是一种难以学习的语言。通常需要几个月的时间学习 Rust 才能适应它,但这种额外的复杂性带来了精确的控制和性能的提高。 对此大家怎么看的? Jaime Garcia, Capital One[19]:
American Express Uses Go for Payments & Rewards[20]:
Dewet Diener, Curve[21]:
4)精准控制也许 Rust 的最大优势之一是开发人员对如何管理内存、如何使用机器的可用资源、如何优化代码以及如何制定问题解决方案的控制量。与 Go 相比,这并非没有很大的复杂性成本,Go 的设计较少用于这种类型的精确制作,而更多的是为了更快的探索时间和更快的周转时间。 John Graham-Cumming,Cloudflare:
4、总结/关键要点Go 的简单性、性能和开发者的生产力使它成为创建面向用户的应用程序和服务的理想语言。快速迭代允许团队快速调整以满足用户不断变化的需求,为团队提供一种将精力集中在灵活性上的方式。 Rust 的更精细的控制允许更精确的操作,这使得 Rust 成为低级别操作的理想语言,这些操作不太可能发生变化,而且与 Go 相比,它的性能略有改善,尤其是在大规模部署的情况下。 Rust 的优势是最接近机器。Go 的优势们更接近的用户。这并不是说要么不能在另一个空间中工作,但它会增加难度。随着您的需求从灵活性转变为效率,用 Rust 重写库是非常有利的。 虽然 Go 和 Rust 的设计有很大的不同,但它们的设计发挥了一套兼容的优势,当它们一起使用时,可以实现很大的灵活性和性能。 5、建议对于大多数公司和用户来说,Go 是正确的默认选项。它的性能强大,Go 很容易使用,并且 Go 的高度模块化特性使它特别适合需求变化或演进的情况。 随着产品的成熟和需求的稳定,可能会有机会从性能的微小增长中获得巨大的收益。在这些情况下,使用 Rust 来最大化性能可能更值得。
所以,Go 爱好者可以学学 Rust;Rust 爱好者也可以学学 Go。 参考资料Rust: https://www./ [2]Go: https://v/ [3]Dropbox: https://www./ [4]Fastly: https://www./ [5]Cloudflare: https://www./ [6]MercadoLibre 与 Go 一起成长: https://v/solutions/mercadolibre/ [7]Bala Natarajan,Paypay: https://v/solutions/paypal/ [8]Matt Asay,亚马逊网络服务: https://aws.amazon.com/blogs/opensource/why-aws-loves-rust-and-how-wed-like-to-help/ [9]Josh Hannaford, IBM: https://developer.ibm.com/technologies/web-development/articles/why-webassembly-and-rust-together-improve-nodejs-performance/ [10]Sam Rose, CV 合作伙伴: https:///golang/rust-vs-go [11]Josh Hannaford, IBM: https://developer.ibm.com/technologies/web-development/articles/why-webassembly-and-rust-together-improve-nodejs-performance/ [12]Taylor Thomas, Sr., Microsoft: https://msrc-blog.microsoft.com/2020/04/29/the-safety-boat-kubernetes-and-rust/ [13]Stefan Nilsson,计算机科学教授: https:///golang/advantages-over-java-python/ [14]实质性的安全保证: https:///infrastructure/lossless-compression-with-brotli [15]Dewet Diener, Curve: https:///golang-curve-163187.html [16]Brian Ketelsen, Microsoft: https://cloudblogs.microsoft.com/opensource/2018/02/21/go-lang-brian-ketelsen-explains-fast-growth/ [17]Matt Ronge, Astropad: https://blog./why-rust/ [18]Jesse Howarth, Discord: https://blog./why-discord-is-switching-from-go-to-rust-a190bbca2b1f [19]Jaime Garcia, Capital One: https:///capital-one-tech/a-serverless-and-go-journey-credit-offers-api-74ef1f9fde7f [20]American Express Uses Go for Payments & Rewards: https://v/solutions/americanexpress/ [21]Dewet Diener, Curve: https:///golang-curve-163187.html |
|
来自: 菌心说 > 《编程+、计算机、信息技术》