编程语言比较
Rust 与 Go:同一问题的两个现代答案
Rust 和 Go 都回答了“我们应该在 C 之后用什么来编写系统和服务?”的问题。他们从相反的方向回答。 Go 保持了简单性:一种大致稳定的语言,一个在你喝咖啡之前完成的编译器,以及一个无需运行时即可部署到任何地方的静态二进制文件,这就是 Docker、Kubernetes 和 Terraform 等云基础设施的构建方式。 Rust 保持了安全性:无需垃圾回收的内存正确性,一种将所有类别的错误转变为构建失败的类型系统,以及足够的低级控制来编写内核空间代码,正如 Rust 自 2022 年以来被合并到 Linux 内核中所表明的那样。实际上,这种划分是干净的:基础设施工具和云服务去 Go;性能关键、正确性关键或资源精确的工作采用 Rust。
要点
- Go 的部署简单性是无与伦比的:单个静态二进制文件,无需仪式即可交叉编译,这就是容器工具在其上标准化的原因。
- Go 编译速度很快,它的工具链是一个二进制文件:团队每天都会发布,而无需构建服务器在模板实例化下抱怨。
- Rust 的所有权模型是这样的:负载下没有泄漏,没有释放后使用,产品中没有数据竞争。编译器拒绝让它们存在。
- Rust 没有 GC,因此适合延迟和堆预算严格的场合:系统代码、嵌入式和与驱动程序相关的工作。
- Rust 的内核存在是真实的并且不断增长:Linux 在 2022 年合并了最初的支持,驱动程序(而不是核心调度)引领了迁移。
- Go 的简单性是一个上限:大型 Go 代码库积累了 Rust 一般表达的粘合和接口体操。
- 网络服务诚实地进行比较:Go 的 goroutine 和垃圾收集器可以完美地处理大多数 Web 后端;仅当您真正关心时,Rust 才能赢得尾部延迟优势。
- 昂贵的资源是人员:Go 广泛招聘且入职速度快; Rust 招聘的范围更窄、速度更慢,但往往会保持谨慎的态度。
一线手记
我们通过对 Rust 和 Go 提出同样的问题来分配 Rust 和 Go:这段代码在哪里没有失败的空间? Go 获得了带有一个静态二进制文件的舰队工具,Rust 获得了永远不会崩溃的解析器。
常见问题
我应该先学哪个?
寻求运输服务并实际了解并发;当你想深入了解内存和系统时,请选择 Rust。大多数通晓多种语言的职业都受益于两者。
Rust 实际上比 Go 更快吗?
由于没有 GC 和更好的优化,通常在计算和分配密集的路径上,但差异只在尾部重要。对你的形状进行基准测试。
为什么基础设施要在 Go 上标准化?
静态二进制文件、廉价构建、小型并发程序以及数十年的网络优先人体工程学:它解决了无聊的部署问题,而这正是平台所需要的。
Rust 在哪里明显击败了 Go 作为选择?
嵌入式、设备驱动程序、不得崩溃的解析器、安全关键基础设施以及垃圾收集暂停不可接受的任何地方。
Kinetikatech 如何在编程语言比较方面为您提供帮助
您不必自己成为编程语言比较专家:用于系统工作、脚本编写和服务的语言,比较生产中实际重要的内容:安全保证、原始速度、可以雇用的人以及部署和修补所产生的服务的痛苦程度。服务器管理和网站维护正是为此而设:配置、加固、监控,并有工程师日夜值守。