Minimum support: Rust 1.76+.
Visit the site 🌐
—
Read the book 📖
The Rune Language, an embeddable dynamic programming language for Rust.
§Contributing
If you want to help out, please have a look at Open Issues.
§Highlights of Rune
§Rune scripts
You can run Rune programs with the bundled CLI:
cargo run --bin rune -- run scripts/hello_world.rn
If you want to see detailed diagnostics of your program while it’s running,
you can use:
cargo run --bin rune -- run scripts/hello_world.rn --dump-unit --trace --dump-vm
See --help
for more information.
§Running scripts from Rust
You can find more examples in the examples
folder.
The following is a complete example, including rich diagnostics using
termcolor
. It can be made much simpler if this is not needed.
use rune::{Context, Diagnostics, Source, Sources, Vm};
use rune::termcolor::{ColorChoice, StandardStream};
use std::sync::Arc;
let context = Context::with_default_modules()?;
let runtime = Arc::new(context.runtime()?);
let mut sources = Sources::new();
sources.insert(Source::memory("pub fn add(a, b) { a + b }")?);
let mut diagnostics = Diagnostics::new();
let result = rune::prepare(&mut sources)
.with_context(&context)
.with_diagnostics(&mut diagnostics)
.build();
if !diagnostics.is_empty() {
let mut writer = StandardStream::stderr(ColorChoice::Always);
diagnostics.emit(&mut writer, &sources)?;
}
let unit = result?;
let mut vm = Vm::new(runtime, Arc::new(unit));
let output = vm.call(["add"], (10i64, 20i64))?;
let output: i64 = rune::from_value(output)?;
println!("{}", output);
The Rune core allocation and collections library
Abstract syntax trees for the Rune language.
Helper to build customized commandline interfaces using custom rune
contexts.
The Rune compiler.
Diagnostics module for Rune.
Helper to generate documentation from a context.
Helper to format Rune code.
Utility for building a language server.
The macro system of Rune.
Types used for defining native modules.
Public packages that can be used to provide extract functionality to virtual
machines.
Helper prelude for
#[no_std]
support.
Public types related to using rune in #
no_std environments.
Parsing utilities for Rune.
Lazy query system, used to compile and build items on demand and keep track
of what’s being used and not.
Runtime module for Rune.
Module for dealing with sources.
This crate provides a cross platform abstraction for writing colored text to
a terminal. Colors are written using either ANSI escape sequences or by
communicating with a Windows console. Much of this API was motivated by use
inside command line applications, where colors or styles can be configured
by the end user and/or the environment.
Types for dealing with workspaces of rune code.
Helper macro to reference a specific token kind, or short sequence of kinds.
Helper macro to reference a specific token.
Helper macro to define a collection of sources populatedc with the given
entries.
Defines a static budget and environment implementation suitable for
singlethreaded no-std environments. This can be used in #[no_std]
environments to implement the necessary hooks for Rune to work.
Helper to cause a panic.
Helper to perform the try operation over
VmResult
.
Helper macro to perform a
write!
in a context which errors with
VmResult
and returns
VmResult<Result<_, E>>
on write errors.
High level helper for setting up a build of Rune sources into a
Unit.
Error raised when we failed to load sources.
Context used for the Rune language.
Structure to collect compilation diagnostics.
The primitive hash that among other things is used to reference items,
types, and native functions.
A
Module that is a collection of native functions and types.
Options that can be provided to the compiler.
Helper to register a parameterized function.
A single source file.
A collection of source files.
Instructions and debug info from a single source file.
An entry on the stack.
A stack which references variables indirectly from a slab.
Convert something into the dynamic
Value
.
Entry point to building
Sources of Rune using the default unit storage.
Convert something into the dynamic
Value
.