写点什么

Shopify 开源 WebAssembly 工具链 Ruvy

  • 2023-11-22
    北京
  • 本文字数:774 字

    阅读完需:约 3 分钟

大小:388.70K时长:02:12
Shopify开源WebAssembly工具链Ruvy

最近,Spotify 开源了Ruvy,一个 WebAssembly 工具链,能够将 Ruby 代码转换为 Wasm 模块。Ruvy 基于ruby.wasm, 用 Rust 实现,提升了性能并简化了 Wasm 模块的执行。


Ruvy 利用了ruby.wasm提供的 Ruby 解释器模块,并使用wasi-vfs (WASI 虚拟文件系统)将其与所有指定的 Ruby 源文件一起打包到单个模块中。wasi-vfs创建了一个虚拟文件系统并嵌入到.wasm二进制文件中,它提供了一种机制,让 Ruby 源文件对ruby.wasm可读,但不允许在 WebAssembly 运行时访问主机文件系统。


在构建 Wasm 模块时预先初始化 Ruby VM,而不是在将其加载到内存中执行时(默认使用ruby.wasm/wasi-vfs),从而提升了性能。Shopify 高级 Wasm 开发人员 Jeff Charles 解释说,这将使运行时性能提升了 20%。


此外,Charles 解释说,Ruvy 使得使用 Cranelift 编译器将 Wasm 编译成本机代码所需的时间缩短至 30%。


Ruvy 的另一个好处是,由于它将所有必需的文件打包在一起,不需要文件路径作为 WASI 参数,因而简化了执行语法。这对于各种边缘计算服务来说特别有用,因为这些服务不允许向主要端点函数提供额外的 WASI 参数。


目前,Ruvy 只提供了源代码发行版,所以你需要自行进行构建。这个过程很简单,原则上,在安装了所有必需的依赖项,包括rustupwasm32-wasicmakeRosetta 2(macOS)之后,只需运行make,然后像下面的示例一样执行 Ruvy 来从ruby_examples/hello_world.rb创建index.wasm模块:


$ cargo run --package=cli ruby_examples/hello_world.rb -o index.wasm
复制代码


如上所述,你可以使用--preload命令行标志来指定包含 Ruby 文件的目录,这些文件应该会被传给 Ruby VM。


Charles 强调,Ruvy 目前只能运行简单的 Ruby 程序。具体来说,它还不能requireRuby gem,也就是说大部分 Ruby 标准库仍然不可用。未来,他们计划支持从标准库和非本地第三方 gem 中加载代码以消除这一限制。


原文链接

https://www.infoq.com/news/2023/11/shopify-ruvy-ruby-wasm/

2023-11-22 10:074196

评论

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

Hoo虎符研究院 | 币圈后浪 BreederDAO区块链游戏的NFT工厂

区块链前沿News

虎符 Hoo 虎符交易所

Microchip发布具有强大编程和调试功能的新型在线仿真器(ICE)

Geek_2d6073

ReactNative进阶(四十):应用 ListView 实现分组列表

No Silver Bullet

ListView React Native 1月月更

在线时间戳计算时间差

入门小站

工具

LabVIEW播放提示声音或者音乐

不脱发的程序猿

LabVIEW 播放提示声音或者音乐

【笔记】学《郭东白的架构课》:访谈|对话于冰(下)

术子米德

架构师成长笔记

建一座国际连锁「商场」:openEuler 的雄心与蓝图 | 开源访谈《源创者说》首播

科技热闻

模块六作业

黄秀明

「架构实战营」

Spark合并Iceberg小文件内存溢出问题定位和解决方案

漫长的白日梦

spark iceberg 小文件

openLooKeng算子接口和执行流程

LooK

【笔记】学《郭东白的架构课》:访谈|对话于冰(中)

术子米德

架构师成长笔记

如何系统分析项目的干系人?

石云升

项目管理 1月月更

虎年就要玩虎符 春节就要瓜分虎符虎年大礼包

区块链前沿News

Hoo虎符 Hoo 虎年 春节活动

双龙贺岁,龙蜥 LoongArch GA 版正式发布

OpenAnolis小助手

Linux 开源 新年

拆分电商系统为微服务

tony

ReactNative进阶(四十一):应用 FlatList 实现分组列表

No Silver Bullet

1月月更 ReactNative FlatList

【笔记】学《郭东白的架构课》:访谈|对话于冰(上)

术子米德

架构师成长笔记

如何写好一个Java方法?

蜜糖的代码注释

Java 后端开发 写好代码

openLooKeng助力中移在线获“ICT优秀案例”

LooK

快递,菜鸟驿站,直播购物:老年人的电商之墙

脑极体

(1-24/24)awesome「结构」

mtfelix

300天创作 2022Y300P

模块六 - 电商系统微服务设计

圈圈gor

架构实战营 「架构实战营」

ReactNative进阶(四十二):面试必备:2022 ReactNative 经典面试题总结(含答案)

No Silver Bullet

面试题 1月月更 ReactNative

并发不是并行

en

架构训练营 week8 作业

红莲疾风

「架构实战营」

使用Cloud Application Programming模型开发OData的一个实际例子

汪子熙

API abap Cloud Studio 1月月更

建木持续集成平台v2.2.1发布

Jianmu

DevOps 持续集成 CI/CD

再见,Microsoft Academic——你好,开放式研究基础设施?

吴脑的键客

搜索引擎

第六节:SpingBoot基本配置一

入门小站

springboot java

电商系统微服务化

皓月

「架构实战营」

Go 语言快速入门指南:Go 实现简易Web应用

宇宙之一粟

Go web服务器 Go 语言 1月月更

Shopify开源WebAssembly工具链Ruvy_编程语言_Sergio De Simone_InfoQ精选文章