Shopify为系统编程提供Rust
作者 | Mike Shaver
翻译 | 刘雅梦
策划 | Tina
Shopify 为商业构建互联网基础设施,以称心数百万商家的需求。为了做到这一点,需要构建灵巧的业务逻辑和健壮的高性能系统。除了我们对 Ruby 的灵巧性和表现力的承诺之外,我们最近还摘用了 Rust 作为我们官方的系统编程语言。作为这项工作的一部分,我们加进了 Rust 基金会,并且我们很兴奋能加进 Rust 社区。
系统编程是软件工程中的一个要求很高的领域,为其抉择的语言将会对系统软件的成功和有效性产生浩大的影响。用于解决这些问题的语言需要快速、高效且安全。此外,假如可能,Shopify 更喜欢社区驱动的开源项目。
Rust 不断增长的行业势头和 Shopify 不断扩展的系统编程项目基础,使我们在 Rust 上进行准则化并加进 Rust 基金会正当其时。
Shopify 的系统编程
自成立以来,Shopify 的主要服务端使用程序编程语言一直是 Ruby。Ruby 的灵巧性和表现力使 Shopify 能够开发出强大的商务系统,称心数百万商家以及数亿买家的需求。Ruby 过往是,现在是,将来依然是我们构建现代商务服务端组件时的首选工具。
对于系统编程,例如高性能网络服务器或使用“原生”代码扩展 Ruby,而不是定义业务逻辑,Shopify 开发人员过往一直使用 C 和 Go 等语言。最近,我们决定将 Rust 准则化为我们的系统编程语言。因此,我们正致力于在开发和部署流程中更好地支持 Rust,并扶助 Shopify 工程师开发 Rust 编程方面的专业知识。
为什么抉择 Rust?
Rust 的许多方面使它成为我们系统编程语言的一个有吸引力的抉择。这些因素结合起来使我们信赖 Rust 将会成为我们软件堆栈中一个强大且受欢迎的组件。其他公司可能会对语言的不同属性进行不同的权衡,做出不同的抉择;我们的评估最终使我们抉择了 Rust。
展开全文
一致性
Shopify 的系统编程需要涵盖多个领域,而且随着时间的推移,这个数字可能会增加。它们包括高性能服务器、用于提高性能或桥接到其他库的 Ruby 扩展,以及编译为 WebAssembly。我们非常期看将对单一语言的投资运用到众多领域,这意味着要确定一种可以非常灵巧使用的语言。相关类型的系统编程将对组织的语言抉择产生重大影响;我们需要对此有更宽泛的视角。
性能
Shopify 需要能够高效且可继续地扩缩,以支持全球商业。Rust 为我们提供了可推测的原生代码性能,包括对内存使用的精美掌握,这使其适用于我们堆栈的最低级别。当然,Rust 并不是唯一能够提供或接近这种性能的语言。在此基础上,还可以考虑使用现代 C++,或者假如可以接受垃圾收集器的分配行为和性能的话,则可以考虑 Go。
当然,虽然 Rust 具有很高的性能上限,但它本质上并没有提高性能下限。一个使用程序或组件并不会因为它是用 Rust 编写的就神异地快;程序员仍然需要设计和衡量性能,我们需要确保 Shopify 的 Rust 开发人员拥有必要的工具来轻松完成这项工作。随着我们与 Rust 及其社区的协作,这种支持将成为 Shopify 感兴致的一个重要领域。
社区
Rust 语言和生态系统是由一个健康的社区驱动的,我们企图像参与 Ruby、 Rails、 React Native 和其他开源项目一样参与这个社区。Rust 的 RFC 流程和治理架构为宽容且深思熟虑的讨论提供了坚实的基础,从而推动了语言和工具的未来发展。期看我们的奉献不仅能使 Rust 在 Shopify 的使用中变得更加高效,而且还能为所有 Rust 开发人员带来改良。
这就是 Shopify 加进 Rust 基金会的原因。我们期看支持 Rust 优异的治理模式和“Rust 公地”的保护,并将我们的知识和看点带进到更大的 Rust 对话中。Rust 基金会为确保 Rust 社区和生态系统的健康所做的工作至关重要,我们非常自豪能够参与他们的使命。
生产力
在某些圈子里,Rust 以难以学习和使用而闻名,但 Shopify 内部和外部的开发人员发现,在通过了最初的学习阶段之后,他们可以非常高效且轻松地使用 Rust 进行构建。Rust 还有一个强大的库生态系统(“板条箱”)和良好的 IDE 集成工具,当然还有非常好的编译器错误消息。类型和宏系统的强大功能答应非常有表现力的 API 和语法,将开发人员的精力集中在表达他们的思想上,而不是在头脑中摆布大量的状态和不变量。Go 在这方面也享有盛誉,C 和 C++ 就没那么好了。
安全性
Rust 提供了许多让编译器来扶助确保程序正确的工具,包括它们可以安全地治理内存,并且可以“无所恐惧地并行”。随着我们越来越娴熟地使用 Rust,我们将会找到更多的方法来使用 Rust 的类型系统和安全规则来保持系统中的不变量。从我们最初的项目中,我们发现与我们评估的其他语言相比,Rust 会在编译时而不是运行时暴露出更多的错误。这促成了 Rust 开发人员经常表达的“有信心部署”情绪。
在我们所考虑的所有语言中,Rust 在安全因素方面远远领先:不仅是在生命周期治理方面的内存安全上,它还消除了并行程序中的大多数数据竞争。当然,即使是 Rust,它也有改良的空间,例如静态死锁预防,但所有生产语言都是如此。我们信赖 Rust 对静态安全性的承诺会使其最有可能在未来几年中实现这一目的。在这个领域已经有了一些有趣的工作,例如 Ferrocene。
互操作性
系统编程通常涉及到与现有的“原生”库(比如用 C 编写的库)的接口。与 Go 不同的是,Rust 没有垃圾收集器,这使得它可以更轻易地插进到可以使用 C 的任何地方。更具体地说,Rust 很好地支持了使用 bindgen 等工具与现有的 C 代码的集成,而像 rb-sys 和 magnus 这样的板条箱答应 Rust 安全地与 Ruby 互操作。C++ 的集成仍然有些笨拙,但像 cxx 这样的板条箱可以扶助弥合语言阻碍。除了 RubyVM 本身之外,我们没有大型的 C 或 C++ 代码库,但这种互操作对我们来说仍然是一个重要的考虑因素。
接下来做什么?
在 Shopify,我们的 Rust 之旅才刚刚开始。我们需要开发教诲资源和内部工具,并学习如何最好地参与 Rust 社区和生态系统。我们很兴奋能成为 Rust 使命的一部分,让每个人都能构建可继续的、内存安全的、高效的软件,并感谢 Rust 基金会的欢迎加进。
Mike Shaver 是 Shopify 核心工程的杰出工程师。
Mike Shaver 是 Shopify 核心工程的杰出工程师。
假如你对从头开始构建系统来解决现实世界中的问题感兴致,我们的工程博客中有关于我们碰到的其他挑战故事。访问我们的工程职业位页面,了解我们的空缺职位。加进我们的远程团队,可以(几乎)在任何地方工作。了解我们是如何通过招聘来共同设计未来的——一个通过设计实现数字化的未来。
原文链接:
18.3 万美元offer到手!ChatGPT 通过谷歌 L3 面试:留给谷歌的时间不多了
我被微服务坑掉了CTO职位
微信全面支持“小号”;员工购买公司福利房,被裁员后遭巨额索赔;16岁少年孤身前往深圳腾讯总部解封QQ账号|Q资讯
现代软件越来越大、越来越慢、越来越烂!还有救吗?