RubyWasm:在Web上运行Ruby的革命性工具
项目介绍
RubyWasm 是一个将 CRuby 移植到 WebAssembly 的项目,它使得 Ruby 应用程序能够在浏览器、支持 WASI(WebAssembly System Interface)的运行时以及边缘计算平台上运行。通过这个项目,开发者能够利用熟悉的 Ruby 语言进行前端开发或构建轻量级、跨平台的应用。RubyWasm 提供了预编译的二进制文件,简化了部署流程,让 Ruby 在非传统环境下的执行成为可能。
项目快速启动
在浏览器中体验 Ruby
您无需安装任何本地软件,即可在线尝试 RubyWasm。只需创建一个 HTML 文件,引入特定的 JavaScript 脚本,然后嵌入您的 Ruby 代码。以下是一个简单的示例:
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/@ruby/3.3-wasm-wasi@2.6.2/dist/browser/script.iife.js"></script>
</head>
<body>
<script type="text/ruby">
require "js"
puts RUBY_VERSION // 这将在浏览器控制台打印出 Ruby 版本
JS.global[:document].write("Hello world ")
</script>
</body>
</html>
将以上内容保存为 index.html
,并在浏览器打开以立即看到效果。
打包并运行本地 Ruby 应用为 WASI 应用
首先,确保已安装必要的工具,如 wasmtime
和 ruby_wasm
gem。之后,按以下步骤操作:
- 下载 Ruby 的 WebAssembly 版本。
- 准备您的 Ruby 应用代码。
- 使用
rbwasm pack
命令打包成.wasm
文件。
例如,对于一个名为 my_app.rb
的简单应用,操作如下:
gem install ruby_wasm
curl -LO https://github.com/ruby/ruby.wasm/releases/latest/download/ruby-3.3-wasm32-unknown-wasip1-full.tar.gz
tar xfz ruby-3.3-wasm32-unknown-wasip1-full.tar.gz
mv ruby-3.3-wasm32-unknown-wasip1-full/usr/local/bin/ruby ruby_wasm
mkdir src && echo "puts 'Hello World!'" > src/my_app.rb
rbwasm pack ruby_wasm --dir /src::/src --dir /ruby-3.3-wasm32-unknown-wasip1-full/usr::/usr -o my-ruby-app.wasm
wasmtime my-ruby-app.wasm src/my_app.rb
应用案例和最佳实践
RubyWasm 可用于创建在浏览器端运行的小型服务、互动脚本或是作为微前端的一部分。例如,构建动态网页元素、实现客户端逻辑、或者是为用户提供定制化的脚本环境。最佳实践中,应关注代码效率,避免大量依赖C扩展的gem,因为这些在当前版本可能不兼容。
典型生态项目
- Ruvy Runtime:Shopify 推出的新项目,展示了Ruby在WebAssembly中的进一步应用。
- Artichoke:使用Rust编写的Ruby实现,可以编译为WebAssembly,提供了另一种执行Ruby代码的方式。
- mruby:一个轻量级的Ruby实现,已被编译为WebAssembly,适合资源受限的环境。
- Prism 和 run.rb(尽管可能不再活跃)展示了如何在浏览器环境中运行Ruby脚本,提供灵感给未来的技术探索。
此文档旨在提供对 RubyWasm 开源项目的简要指南,帮助开发者快速上手并理解其在现代开发场景中的潜力。随着技术的进步,RubyWasm 和相关生态系统将持续发展,为Ruby编程开辟新的可能性。