写点什么

Shopify 为系统编程提供 Rust

  • 2023-02-17
    北京
  • 本文字数:2696 字

    阅读完需:约 9 分钟

Shopify为系统编程提供Rust

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 核心工程的杰出工程师。


如果你对从头开始构建系统来解决现实世界中的问题感兴趣,我们的工程博客中有关于我们遇到的其他挑战故事。访问我们的工程职业位页面,了解我们的空缺职位。加入我们的远程团队,可以(几乎)在任何地方工作。了解我们是如何通过招聘来共同设计未来的——一个通过设计实现数字化的未来。


原文链接


https://shopify.engineering/shopify-rust-systems-programming


声明:本文为 InfoQ 翻译,未经许可禁止转载。


今日好文推荐


18.3 万美元offer到手!ChatGPT 通过谷歌 L3 面试:留给谷歌的时间不多了


我被微服务坑掉了CTO职位


微信全面支持“小号”;员工购买公司福利房,被裁员后遭巨额索赔;16岁少年孤身前往深圳腾讯总部解封QQ账号|Q资讯


现代软件越来越大、越来越慢、越来越烂!还有救吗?


2023-02-17 11:514825

评论

发布
暂无评论
发现更多内容

3种OC渲染透明背景的方法

Finovy Cloud

学习 自学 渲染 建模 渲染器

WebGpu VS WebGL

3D建模设计

WebGL webgpu

公链系统搭建技术方案,公链系统应用开发

V\TG【ch3nguang】

公链 区块链系统开发

GameFi模式链游搭建,养成、PK类链游系统开发

V\TG【ch3nguang】

区块链游戏 gamefi

区块链挖矿APP软件开发,质押流动性矿池模式系统搭建

V\TG【ch3nguang】

挖矿系统开发

撮合前端平台在低代码平台的落地实践 | 京东云技术团队

京东科技开发者

前端 中台架构 低代码平台 企业号 8 月 PK 榜 撮合

一道经典面试题:@Configuration 和 @Component 有何区别?

江南一点雨

Java spring

成品直播源码平台消息传递的协议:MMS协议

山东布谷科技

软件开发 消息传递 成品直播源码 MMS 多媒体短信协议

区块链会员系统搭建,复利理财拆分模式开发部署

V\TG【ch3nguang】

理财系统 区块链系统开发 复利

中国传统文化国际交流大会暨《传承进行时》非遗晚会启动

Geek_2d6073

如何把一个接口设计好? | 京东云技术团队

京东科技开发者

接口 接口设计 企业号 8 月 PK 榜

架构师日记-软件工程里的组织文化 | 京东云技术团队

京东科技开发者

架构 软件工程 自动化测试 企业号 8 月 PK 榜 组织文化

redis分布式锁,setnx+lua脚本的java实现 | 京东物流技术团队

京东科技开发者

redis setnx Lua脚本 redis 底层原理 企业号 8 月 PK 榜

简单好用的防火墙 Radio Silence最新激活码

mac大玩家j

Mac软件 防火墙工具 防火墙软件 阻止网络连接软件

19 个最佳Three.JS 示例

3D建模设计

ThreeJS

60个令人兴奋的ThreeJS网站示例

3D建模设计

three.js

生成式AI引领数据中心网络升级

百度开发者中心

#人工智能 ChatGPT 文心一言

亿级月活的社交APP,陌陌如何做到3分钟定位故障?

童子龙

微服务 性能分析 链路跟踪 可观测平台

AI区块链量化交易平台搭建开发

V\TG【ch3nguang】

量化交易系统开发

基于深度学习的机器视觉表计识别

鲸品堂

人工智能 深度学习 数据 企业号 8 月 PK 榜

Office 2019正式版 办公软件套装Office 2019 mac激活版

mac

苹果mac Windows软件下载 office 2019 办公软件套装

NFT艺术品交易平台开发搭建

V\TG【ch3nguang】

NFT数字藏品系统

NineData X SelectDB 联合发布会,8月30日即将上线!

NineData

实时数仓 数据复制 SelectDB 产品架构 NineData

软件测试/测试开发丨Selenium 高级定位 Xpath

测试人

程序员 软件测试 测试开发 selenium xpath

MATLAB R2023a for Mac激活图文教程+安装密钥

胖墩儿不胖y

Mac软件 计算工具 计算软件

5 种 可帮助开发人员提高工作效率的AI 工具

3D建模设计

人工智能

免费共享大文件的10种方法,分享大文件传输的解决方案

镭速

Shopify为系统编程提供Rust_开源_Mike Shaver_InfoQ精选文章