Artichoke is a Ruby implementation written in Rust. Artichoke aspires to be compatible with Ruby 2.6.3.
Artichoke is a work-in-progress. When functional, Artichoke will improve upon MRI in the following ways:
- β True parallelism with no GIL.
- β Optional multi-threading.
- β Deterministic garbage collection.
- β
Single binary distribution (all Ruby sources from core and stdlib are
embedded in
artichoke
executable). - β WebAssembly build target. Partially supported with the wasm32-unknown-emscripten target on the playground.
- β MRI-compatible C API.
- β mruby-compatible
C API (all 311
MRB_API
functions). - β Emoji identifiers (classes, modules, methods, variables) πͺ.
- β Optional Standard Library.
- β
Native Rust extensions exposed via
require
of virtual files. - β Filesystem access is either via the system or via an in-memory virtual filesystem.
Artichoke will deviate from MRI in the following ways:
- The only supported encodings are UTF-8, maybe UTF-8, and binary.
- Ruby source files are always interpreted as UTF-8.
Artichoke intends to pass 100% of ruby/spec with the
exception of specs for non-UTF-8 encodings. To view current progress on
ruby/spec compliance, see
scripts/spec-compliance.sh
or the tracking
milestones for β
language, β
Core, and β
Standard Library.
You can try Artichoke in your browser. The Artichoke Playground runs a WebAssembly build of Artichoke.
If you would prefer to run a local build, set up a Rust toolchain and launch an interactive Artichoke shell with:
cargo run -p artichoke-frontend --bin airb
Artichoke aspires to be a Ruby 2.6.3-compatible implementation of the Ruby programming language. There is lots to do.
If Artichoke does not run Ruby source code in the same way that MRI does, it is a bug and we would appreciate if you filed an issue so we can fix it.
If you would like to contribute code π©βπ»π¨βπ», find an issue that looks interesting and leave a comment that you're beginning to investigate. If there is no issue, please file one before beginning to work on a PR.