Artichoke Ruby
Artichoke 是一个用 Rust 和 Ruby 编写的 Ruby 实现。Artichoke 打算兼容 MRI,目标是 Ruby 2.6.3。Artichoke 提供了一个用 Rust 和 Ruby 实现的 Ruby 运行时。
试用 Artichoke
Artichoke Ruby Wasm Playground
你可以在浏览器中尝试 Artichoke。Artichoke Playground 运行一个 WebAssembly 构建的 Artichoke。
安装 Artichoke
预先构建的夜间二进制文件
从 artichoke/nightly 下载一个预制的二进制文件。二进制文件适用于 Linux、Linux/musl、macOS 和 Windows。
这些每日二进制文件跟踪 Artichoke 的最新主分支。
二进制文件也通过 ruby-build 发布。使用 rbenv 进行安装。
rbenv install artichoke-dev
Cargo
你可以使用 Rust 的包管理器 cargo 安装 Artichoke 的预发布版本。
cargo install --git https://github.com/artichoke/artichoke --locked artichoke
要通过 cargo install 安装或在本地检查和构建,你需要 Rust、clang 和 Ruby。BUILD.md
有更多关于如何设置编译器工具链的细节。
Docker
你可以通过运行以下命令来启动 REPL
docker run -it docker.io/artichokeruby/artichoke airb
使用方法
Artichoke 提供两个二进制命令:airb 和 artichoke。
airb
airb 是 irb 的 Artichoke 实现,是一个交互式的 Ruby shell 和 REPL。
airb 是一个支持 readline 的 shell,尽管它不持久化历史记录。
artichoke
artichoke 是 Artichoke 的 ruby 二进制前端。
artichoke 支持通过文件、stdin 或一个或多个 -e 标志的内联来执行程序。
Artichoke 可以从本地文件系统中 require、require_relative 和 load 文件,但还不支持本地文件系统访问。一个临时的变通方法是用 --with-fixture 标志将数据注入解释器,将文件内容读入 $fixture 全局。
$ artichoke --help artichoke 0.1.0-pre.0 Artichoke is a Ruby made with Rust. USAGE: artichoke [FLAGS] [OPTIONS] [--] [programfile] FLAGS: --copyright print the copyright -h, --help Prints help information -V, --version Prints version information OPTIONS: -e <commands>... one line of script. Several -e's allowed. Omit [programfile] --with-fixture <fixture> file whose contents will be read into the `$fixture` global ARGS: <programfile>
设计和目标
Artichoke 设计用于实验。这个项目的首要目标是:
- 支持 WebAssembly 作为构建目标。
- 支持在不受信任的环境中嵌入和执行 Ruby。
- 将 Ruby 应用作为单二进制的工件进行分发。
- 用最先进的依赖关系来实现 Ruby。
- 实验用虚拟机来支持 动态代码生成、提前编译、并行和消除 GIL,以及新的内存管理和垃圾收集技术。
贡献
Artichoke 渴望成为 Ruby 2.6.3 兼容的 Ruby 编程语言的实现。有很多事情要做。
如果 Artichoke 不能像 MRI 那样运行 Ruby 源代码,那就是一个 bug,如果你提交一个问题,我们会很感激,这样我们就可以修复它。
如果你想贡献代码,请找到一个看起来很有趣的问题,并留下你开始调查的评论。如果没有问题,请在开始研究PR之前先提交一个问题。好的第一个问题会被标注为 E-easy
。
探讨
如果你想在 GitHub 之外参与讨论,你可以加入 Artichoke 的公共 Discord 服务器。
许可证
artichoke
is licensed with the MIT License (c) Ryan Lopopolo.
Artichoke 的部分内容来自于第三方资源,每个工作区中的 READMEs 都会讨论哪些第三方许可证适用于 Artichoke 的资源和衍生作品。每个工作区中的 READMEs 都讨论了哪些第三方许可证适用于 Artichoke 中的资源和衍生作品。
(The first version translated by vz on 2020.12.05)