速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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:514783

评论

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

【涂鸦物联网足迹】涂鸦云平台接口列表—万能红外遥控器

IoT云工坊

人工智能 云计算 物联网 API 红外遥控器

我终于拥有自己的独立博客了。

彭宏豪95

GitHub 写作 博客 IT

浅谈程序员的“内卷化”

数据社

LeetCode题解:剑指 Offer 22. 链表中倒数第k个节点,使用栈,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

当Tomcat遇上Netty,我这一系列神操作,同事看了拍手叫绝

小Q

Java 学习 程序员 架构 面试

第八周作业

Geek_4c1353

极客大学架构师训练营

从应用开发角度认识K8S

LorraineLiu

容器 云原生 k8s入门

科技助力餐饮,普渡送餐机器人在餐博会上被众人围观!

DT极客

腾讯云直播全解析,双11怎么买才不亏?

腾讯云音视频

腾讯云 阿里云 云直播 直播 视频

年末十家手机银行数字化升级大盘点:谁家开发更全面?谁家建设更到位?

CECBC

疫情 银行 手机银行

《我想进大厂》之Java基础夺命连环16问

艾小仙

Java 面试 编程语言

搞微服务用阿里开源的 Nacos 真香啊!

阿里巴巴 开源 编程

架构训练营-week8-数据结构与算法,网络,IO

于成龙

极客大学架构师训练营 架构训练营

当Nginx遇上Tomcat集群,又是一场负载均衡的爱恨情仇

小Q

nginx tomcat 学习 架构 面试

第七周作业

Geek_4c1353

极客大学架构师训练营

面试官问我redis数据类型,我回答了8种

数据库 学习 面试

SpringBoot启动原理

编程门槛 框架设计 spring Boot Starter】

与第三方系统打通的N种进阶方式

棒锤🐮

架构

CloudQuery v1.2.1 版本发布

BinTools图尔兹

数据库 开发者 运维 工具 开发工具

11.11 程序员的 1111 种死法

京东科技开发者

程序员 程序人生

腾讯WeMap,一颗“孢子”的数智化之旅

脑极体

对比一下,你的简历是不是也写成了这样,能拿高薪才怪了

小Q

Java 学习 架构 面试 简历

践行新基建,共建城市智能体,为数字经济发展提供新动能

CECBC

云计算 大数据

阿里首发MySQL“完美日记”,基础+优化+事务+集群+锁+主从复制+安全备份

Java架构追梦

Java MySQL 数据库 架构 面试

奈学教育荣获“中关村高新技术企业”认证

古月木易

教育 IT

重拳出击!平台经济反垄断,互联网巨头市值蒸发千亿

CECBC

小额贷款 反垄断

iptables 端口转发

田振宇

实时音视频面视必备:快速掌握11个视频技术相关的基础概念

JackJiang

音视频 即时通讯 视频

奈学教育荣获“中关村高新技术企业”认证

奈学教育

奈学教育

「架构师训练营」第 4 周作业

小黄鱼

极客大学架构师训练营

Java批量导入去除重复数据并返回结果,我差点就被放倒了

小Q

Java 学习 程序员 架构

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