Minimum support: Rust 1.81+.
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 --trace
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 format Rune code.
Utilities for working with hashes.
Types related to items.
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.
Convenience macro for extracting a documentation string from documentation
comments.
Calculate a type hash at compile time.
Calculate an item reference at compile time.
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.
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.
The name of an item in the Rune Language.
A
Module that is a collection of native functions and types.
A strong owned mutable reference to the given type that can be safely
dereferenced.
Options that can be provided to the compiler.
Helper to register a parameterized function.
A strong owned reference to the given type that can be safely dereferenced.
A single source file.
A collection of source files.
Instructions and debug info from a single compilation.
An entry on the stack.
A stack which references variables indirectly from a slab.
Derive for types which can be used inside of Rune.
Trait for converting types from the dynamic
Value container.
Convert a value into a constant value.
Helper trait used to convert a type into a type hash.
Trait for converting types into the dynamic
Value
container.
Static type hash for a given type.
Convert something into the dynamic
Value
.
Entry point to building a collection
Sources
of Rune into a default
executable
Unit
.
Convert something into the dynamic
Value
.