Rust已经悄然成为了最受欢迎的编程语言之一。作为一门新兴底层语言,Rust拥有着内存安全性机制、不亚于C语言的性能优势、出色的开发者社区等等。本文还介绍了那些正在使用Rust的著名公司以及这些公司选择Rust的原因。
本文最初发表于 https://serokell.io/(《9 Companies That Use Rust in Production》),经原作者授权,由 InfoQ 翻译并分享。
你可能还不知道,Rust 已经是目前最有前途且最受欢迎的编程语言之一了。
它最初由 Mozilla 创建,后来被 Dropbox、 Microsoft、Facebook 等公司采用。Rust 的主要优点是,它在保持使用 JavaScript 和 Python 等语言进行开发时所拥有的内存安全性的同时,还能够实现不亚于 C 的性能。
在这篇文章中,我将介绍 9 家使用 Rust 的大公司,并探究他们选择 Rust 的原因。
Dropbox使用 Rust 作为其部分文件同步引擎。由于文件同步引擎是高度并发的,所以编写、测试和调试都很困难。因此,团队选择用 Rust 将这部分进行了重写。当需要处理复杂的代码库和并发时,Rust 的静态类型和编译时检查使它比 Python 等动态类型语言更具有优势。
Rust是我们团队的力量倍增器,使用Rust是我们做出的最正确的决定之一。除了性能,它的人机工程学和对准确性的保证帮助我们降低了同步的复杂性。我们可以在类型系统中对系统的复数不变量进行编码,并让编译器为我们检查它们。(原文)
Dropbox 的技术博客上有更多关于 Rust 的使用信息。
Coursera在他们的编程作业功能中使用了 Rust,学生需要编写并运行一个计算机程序来解决一个问题。程序在 Docker 容器中运行、测试和分级。出于安全原因,开发团队需要对某些代码使用像 Rust 这样的低级语言,他们认为 Rust 比 C 更安全。
尽管C是大家默认的低级控制编程语言,但是它对二进制文件有严格的安全性和正确性要求。我们选择了Rust,一种来自Mozilla的现代原生语言。Rust的一个重要的特点是其强大的类型系统,它完全不受某些类型安全漏洞的影响,这使它成为实现关键安全功能的极佳选择。(原文)
你可以到他们的博客上获得更多关于他们在编程任务中使用 Rust 的详细信息。
Figma是一个基于 web 的矢量图形和界面原型设计工具。他们选择在 Rust(以前用的是 TypeScript)中重写他们的多人同步引擎以提高性能,因为他们的服务器能力已经无法满足用户的增长速度需求了。
我们选择用Rust进行重写,因为它在同类语言中有着最好的速度和较低的资源使用率,同时还具有标准服务器语言的安全性。低资源使用率对我们来说特别重要,因为旧服务器的一些性能问题是由垃圾回收器导致的,而Rust不会有这个问题。(原文)
Figma 的博客上有更多关于 Rust 的使用文章。
npm是一个 JavaScript 的包管理器。之所以它的工程师团队选择用 Rust 重写他们的主要服务,是因为他们意识到,如果用户继续增长,服务器的性能很快就会成为瓶颈。他们拒绝使用像 C 和 C++这样的技术,因为他们觉得 C 和 C++处理不好 web 公共服务的内存管理问题。npm 不使用 Java 的原因,是因为 java 需要在服务器上部署 JVM。
npm面临的挑战只有高效和可伸缩的解决方案才能解决。假如一个服务部署后就不用关心它的存在,便可以节省工程师宝贵的研发时间,让他们关注其他问题。npm员工也很重视一种技术生态中是否有对其提供帮助的技术社区。Rust符合所有这些标准,所以Rust现在是npm的技术堆栈之一。(原文)
想要了解更多的话,请阅读 Rust 主页上的案例研究。
Microsoft 最近开始尝试将 Rust 集成到其大型 C/ C++代码工程中。
Microsoft 采用 Rust 的主要原因是其提供的内存安全性。过去的 12 年里,在 Microsoft 发现的 CVEs(常见的漏洞和缺陷)中大约有 70%与内存安全有关。Microsoft 已经尝试了各种方法来解决这个问题,例如对开发人员进行大量的培训、使用静态分析工具等。然而,最终发现想要解决这个问题的办法只能是在内存安全上下功夫,把这条路堵上。
Cloudflare 在其核心边缘逻辑中使用了 Rust,并将其作为内存不安全的 C 的替代方案。
他们在GitHub上展示了 18 个使用 Rust 的开源仓库,在他们的博客上记录了使用 Rust 开发防火墙规则的文档,这是一个可灵活定制的防火墙工具。
通过对性能、内存安全、低内存的需求评估,综合我们正在开发的其他产品(如Spectrum)的能力需求,Rust脱颖而出,成为了最佳的方案选择。(原文)
Facebook 使用 Rust 重写了之前用 Python 编写的源码控制后端。他们曾经一直在寻找一种编译语言来重写它,Rust 的安全性吸引力还是很足的,之后 Rust 就被源代码控制团队使用了。让 Facebook 采用 Rust 的原因,主要是编译器反馈循环的易用性可以帮助降低 bug 造成的经济损失,而不是静态分析和代码审查。
Rust在编译时可检测出大量的严重错误,一个错误在编译时造成的损失要比在生产时少几个数量级。
AWS已经在 Lambda、EC2 和 S3 等对性能敏感的服务组件上使用了 Rust。此外,该公司公开支持和赞助该语言及其生态系统的开发。
亚马逊也有一个完全用 Rust 编写的开源服务Firecracker VMM。 它是一个虚拟机监视器,最初目的是为 AWS Lambda 和 AWS Fargate 服务构建的。
Discord在其多个工程中使用了 Rust,包括客户端和服务器端。
例如,通过使用Elixir NIFs(原生实现的功能),团队基于 Rust 和Elixir将并发用户量扩展到了 1100 万。在这种情况下,Rust 使他们能够在保证内存安全的同时提升现有 Elixir 代码的效率。
他们还在 Rust(原来是 Go)中重写了 Read state 服务。虽然 Go 版本的服务在大多数情况下性能已经足够快了,但由于 Go 的内存模型和垃圾收集器缺陷,它有时会出现较大的延迟峰值。
为了解决这个问题,不得不切换使用 Rust,它提供了一种独特的内存分配系统,不再使用垃圾收集器。
除了性能之外,Rust对工程团队还有许多优势。例如, 它的类型安全性和borrow checker特性,使得在产品需求发生变化或语言功能调整升级时,重构代码变得非常容易。此外,其生态系统和工具都非常优秀,并且发展状态良好。(原文)
想了解更多关于 Discord 使用 Rust 的信息,请查看他们博客上的这篇文章。
以上提到的大多数公司,Rust 都作为了 C 语言的一个更好的替代方案,用 Rust 进行重写,可以避免性能下降。当团队需要更优的性能,但又想避免与 C 相关的内存问题时,他们就会选择使用 Rust。
但是 Rust 的优势还不止这些:它使底层编程更容易,对 WASM 有出色的支持,并且对并发性支持更好,有着活跃的技术社区。
在未来,随着越来越多的公司发现 Rust 可以对自己现有的工程进行优化,预计 Rust 的使用量将会增加更多。
如果你想了解更多关于 Rust 的知识,可以到我们的博客上查看快速入门。
领取专属 10元无门槛券
私享最新 技术干货