Artichoke is a Ruby implementation written in Rust. Artichoke aspires to be source-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.
- โ 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.
- No equivalent C API, which means C extensions are unsupported.
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.