AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

评论

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

大数据管理:构建数据自己的“独门独院”

华为云开发者联盟

大数据 数据湖

XSKY全新一代SDS一体机五大场景之存储+灾备

XSKY星辰天合

LeetCode题解:225. 用队列实现栈,两个队列, 压入 - O(n), 弹出 - O(1),JavaScript,详细注释

Lee Chen

大前端 LeetCode

鼓舞人心!主席支持数字经济!央行数字货币研究所为世界制定区块链相关国际标准

CECBC

区块链 金融

喷一喷坑爹的面向UI编程

架构师修行之路

云图说 | 一分钟带你扫盲云容器黑话

华为云开发者联盟

容器 节点 集群

深入Spring Security魔幻山谷-获取认证机制核心原理讲解

朱季谦

spring security

使用amoeba实现mysql读写分离

小Q

Java MySQL 编程 程序员

架构师课作业 - 第十二周

Tulane

快来看看!AQS 和 CountDownLatch 有怎么样的关系?

程序员小航

Java AQS 源码阅读 CountDownLatch JUC

产业互联网成区块链与数字货币的分水岭

CECBC

区块链 数字货币 产业互联网

抽象可能从未停止过

架构师修行之路

系统设计 抽象 抽象思维

为什么企业自主开发软件时,都会使用统一的模块化框架式开发平台?

Learun

敏捷开发 程序设计 开发工具 软件设计 技术方案

又踩Maven的两个坑

xiaoboey

maven Unknown lifecycle phase settings.xml 无效 PowerShell

内存型数据库Redis,是如何实现持久化的?

Zhongger

redis

DB-Engines 9月数据库排名:ClickHouse一路猛冲,Redis坐稳第七

华章IT

MySQL 数据库 redis Clickhouse

或许是史上最好的AQS源码分析了,你确定要错过?!

InfoQ_d2212957090d

深兰科技的征途,AI的赛场与战场

脑极体

实战解读丨Linux下实现高并发socket最大连接数的配置方法

华为云开发者联盟

Linux TCP socket 高并发

浅析LR.Net工作流引擎

Philips

敏捷开发 工作流 软件开发流程 开发工具

Docker私有化部署gitlab gitlab-runner

Leon

gitlab 持续集成 runner

【基础架构】不同场景下的数据存储技术,你用对了吗?

嘉为蓝鲸

网络 存储 系统 raid 磁盘挂载

北京城市副中心将试点法定数字货币

CECBC

数字货币 货币

用 Python 实现一个简易版的 Pong 游戏 (一)

Matrix Chan

Python Turtle Python游戏

太赞了!华为工程师终于总结出了Linux归纳笔记,提供开放下载

小Q

正在走进现实的“飞行汽车”,能否颠覆地面交通?

脑极体

一个银行客户经理的“变形记”

华为云开发者联盟

人工智能 金融科技

你问我答:容器平台改造后的安全是如何解决的?

BoCloud博云

云计算 容器 微服务 PaaS 博云

Redis 数据同步机制--主从模式

是老郭啊

redis 主从配置 主从同步 redis主从 主从复制

CPU中的程序是怎么运行起来的

良知犹存

cpu

深入浅出java虚拟机

AI乔治

Java 架构 性能优化 JVM JVM原理

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