Crate artichoke_core
source ·Expand description
This crate provides a set of traits that, when implemented, comprise a complete Ruby interpreter.
artichoke-core
is no_std
+ alloc
with an optional (enabled by default)
std
feature.
Interpreters implement the traits in Artichoke Core to indicate which capabilities they offer. Defining interpreters by their capabilities allows for interpreter agnostic implementations of Ruby Core and Standard Library.
Interpreter APIs
Artichoke Core defines traits for the following interpreter capabilities:
ClassRegistry
: Define and store class specs for RubyClass
es.CoerceToNumeric
: Coerce Ruby values to native numerics (floats and integers).Debug
: Provide debugging andException
message support.DefineConstant
: Define global, class, and module constants to be arbitrary RubyValue
s.Eval
: Execute Ruby source code on an interpreter from various sources.Globals
: Get, set, and unset interpreter-level global variables.Hash
: Hashing functions such as building hashers.Intern
: Intern byte strings to a cheap to copy and compare symbol type.Io
: External I/O APIs, such as writing to the standard output of the current process.LoadSources
: Require source code from interpreter disk orFile
gems.ModuleRegistry
: Define and store module spec for RubyModule
s.Parser
: Manipulate the parser state, e.g. setting the current filename.Prng
: An interpreter-level pseudorandom number generator that is the backend forRandom::DEFAULT
.Regexp
: Manipulate [Regexp
][regexp-globals] global state.ReleaseMetadata
: Enable interpreters to describe themselves.TopSelf
: Access to the root execution context.Warn
: Emit warnings.
Artichoke Core also describes what capabilities a Ruby
Value
must have and how to convert between Ruby VM and
Rust types.
Examples
artichoke-backend
is one implementation of the artichoke-core
traits.
To use all the APIs defined in Artichoke Core, bring the traits into scope by importing the prelude:
use artichoke_core::prelude::*;
Crate features
All features are enabled by default:
- std: By default,
artichoke-core
isno_std
+alloc
. Enabling this feature adds several trait methods that depend onOsStr
andPath
as well as several implementations ofstd::error::Error
.
Modules
artichoke-core
crate.Regexp
global state.Value
can be represented in the Artichoke VM.