【转自 Fizer Khan的《Rust Vs Golang - When to use them?》(翻译)】
在过去的十年中,Rust 和 Go 两种新的编程语言主要为企业开发而开发和出现。Go 于 2009 年由世界知名的 Google 创建,其次是 Rust,后者于 2010 年由 Mozilla 创建。
尽管这两种编程语言可能看起来很相似,因为它们提供了诸如内存安全、开源开发模型等关键特性,但它们之间却有很大的不同。
Go主要设计用于构建 Web API(应用程序编程接口)和易于扩展的小型服务,特别是具有 goroutines 的强大功能。
相比之下,Rust主要设计用于处理 CPU 密集型操作,例如执行算法和大量数据。因此,消耗和需要高性能的项目通常使用 Rust over Go。
本文将讨论 Rust 和 Go 之间的基本区别,以及何时使用这两种新兴且重要的编程语言中的哪一种。
-
Rust 与 Go:简要比较和主要差异
-
什么时候应该使用 Rust?
-
什么时候应该使用 Go?
Rust 与 Go:简要比较和主要差异
让我们在性能、并发性、速度等方面比较 Rust 和 Go,以了解这些编程语言的要点。但首先,让我们以表格的形式简要地看一下这两者之间的比较:
语言 | Go | Rust |
---|---|---|
发布时间 | 2009 | 2010 |
开发组织 | Mozilla | |
关键工作负载 | Web 应用程序、API、网络、DevOps、CLI 应用程序、云应用程序、数据处理 | 物联网(物联网、云应用、安全敏感应用、处理引擎、系统组件 |
用语言编写的软件 | language Docker, Kubernetes, Ethereum, Hugo, Caddy, Github CLI, Drone, Terraform, Syncthing | Ripgrep, Firefox, Habitat, Deno, alagritty |
主要的主要区别是:
- 性能
- 并发
- 内存安全
- 开发速度
- 开发经验
#1 性能
Google 引入 Go 作为 C++ 语言的替代品,后者更易于编码和学习。Go 提供并允许您轻松使用 goroutines(协程),通过它您可以通过简单地添加 go 语法将函数作为子进程运行。但是,尽管有这些可行的特性和多核 CPU 支持,Rust 还是胜过 Go。
Rust 高效地执行算法和资源密集型操作。根据benchmarks game(基准游戏),Rust 在测试算法时快了 30%;并且在二叉树计算的情况下至少快 1000%。对于内存处理和处理,Rust 使用零成本运行时抽象。
因此,在绝对需要性能的情况下或某些项目中,Rust 比 Go 更受欢迎。
#2 并发
Go 支持并发并在这方面压倒 Rust。Go 的并发模型使开发人员能够跨多个 CPU 内核部署工作负载,从而使 Go 成为一种高效的语言。
在您运行 Web 服务器处理 API 请求的情况下,Go 的goroutines允许您将每个请求作为子进程运行。这个过程极大地提高了效率,因为它将任务卸载到所有可用的 CPU 内核。
相比之下,为了支持并发,Rust 只有原生的 await/sync 语法。因此,虽然 Rust 保证了内存安全,但在并发方面,开发人员更喜欢 Go。
#3 内存安全
Go 和 Rust 都优先考虑内存安全。但是出于性能原因,Go 存在数据竞争的可能性。正如上一点所见,Rust 的主要关键点和优势是它提供了内存安全性。为了启用内存安全并发,Rust 采用了类型安全。Rust 严格的编译器会检查您引用的每个内存地址和您使用的每个变量。此功能会在出现任何未定义的行为时通知您,并最大限度地避免任何数据竞争条件。
它确保开发人员不会在数据竞争条件或缓冲区溢出的情况下运行。尽管内存安全是 Rust 的一个基本特性,但它也有其自身的缺点。在编写代码时,需要非常注意并注意内存分配。总是很难让您的内存安全得到保护。
#4 开发速度
在某些情况下,开发速度比程序速度或性能更重要。Go 的简单性和直接性使其成为一种具有快速开发过程的语言。Go 有更短的编译时间和更快的运行时间。现在,尽管 Go 提供了速度和简单性,但代价是缺少许多重要功能。为了使 Go 语言更容易,Google 省略了 Go 中其他编程语言中的许多功能。
另一方面,Rust 提供了比 Go 更多的功能。但是 Rust 的编译时间较长,尤其是对于那些依赖树较大的应用程序。
因此,如果一个项目的优先级是开发速度和快速开发周期,那么 Go 是一个更好的选择。但是,如果您不太关心开发速度而更关心执行速度和内存安全,那么 Rust 是您的首选。
#5 开发经验
由于 Go 的设计考虑了简单性和易用性,因此大多数开发人员经常发现它是一种“无聊的语言”或“直截了当的语言”。Go 有限的内置功能集使其易于学习和采用。它是 C++ 语言的一种更简单的替代方案,但在内存分配和内存安全等特性上有所妥协。
相比之下,Rust 提供了高内存安全特性,使代码更复杂,开发人员的工作效率更低。传递指针的能力和所有权的概念使 Rust 成为许多人不希望和没有吸引力的选择。
与 go 相比,Rust 有更陡峭的学习曲线。然而,同样重要的是要注意 Go 比其他语言(如 JavaScript 和 Python)具有更陡峭的学习曲线。
什么时候应该使用 Rust?
当性能很重要并且是重中之重时,Rust 是开发人员的绝佳选择,尤其是在处理和处理大量数据时。Rust 还对线程之间如何共享资源以及线程的行为方式进行了细粒度的控制。
但不利之处在于内存安全的额外复杂性;Rust 减慢了开发速度,导致学习曲线更加陡峭。重要的是要记住,这不一定是 Rust 的缺点,因为它还保证开发人员不会遇到任何内存安全错误,因为编译器会编译并检查每个数据指针。这种保证总是有益的,并且在复杂系统中派上用场。
因此,您应该在以下情况下选择和使用 Rust:
- 性能是您的首要任务
- 您更喜欢内存安全而不是简单
- 您更喜欢对线程进行细粒度控制
- 您更喜欢运行时的正确性
- 您更喜欢硬件级代码
什么时候应该使用 Go?
Go 是 Node.js 创建 Web API 的最佳替代品,它适用于广泛的用例。Go 提供了 goroutines,它的并发模型非常适合用于处理多个独立请求的服务器端应用程序。
Go 还提供对HTTP(超文本标记语言)网络协议的内置支持。它允许开发人员快速轻松地开发一个小型 API 并将其作为微服务运行。因此,Go 非常适合微服务架构,可以轻松满足 API 开发人员的需求。
因此,如果您更喜欢语法简单性而不是性能和价值开发速度,那么 Go 是您的选择。
因此,您应该在以下情况下选择和使用 Go:
- 你更关心代码的可靠性和简单性
- 您想要高级别的执行速度
- 您更喜欢简单的语法和直接的代码来快速编写代码
- 您希望使用更灵活的语言来支持大型 Web 开发
结论
您是否应该为您的项目单独选择 Rust 或 Go,完全取决于该项目的需求和要求。Rust 和 Go 有一些相似之处,比如两者都是开源的,旨在支持并行计算环境和微服务架构。这两种编程语言都通过并发过程优化了可用的 CPU 内核利用率。
您决定选择 Rust 还是 Go 取决于您希望构建的应用程序类型及其要求。如果您希望创建API和 Web 应用程序,则必须使用 Go 来利用其内置的并发功能,支持微服务架构。
Rust 还允许并帮助您设计 Web API,但这并不是创建这种编程语言的主要用例。Firefox 的 Rust 主要侧重于内存安全,这增加了其开发时间和代码复杂性,即使对于非常简单易用的 Web API 也是如此。但是,如果您的首要任务是对代码有更多的控制,那么 Rust 应该是您的选择。更好地控制您的代码还允许开发人员编写内存高效、优化程度高、精确且高性能的代码。
因此,当关于这两种编程语言中的哪一种比另一种更好的问题时,它仅取决于安全性与简单性的问题。虽然有些人喜欢 Go 的简单性,但有些人喜欢 Rust 的安全性。Go 和 Rust 这两者的设计有很大的不同,这就是为什么一些开发者利用它们二者的设计获得简便性,灵活性,安全性和性能,以及全部。