44 releases
0.13.4 | Jul 23, 2024 |
---|---|
0.13.2 | Mar 7, 2024 |
0.13.1 | Oct 10, 2023 |
0.12.4 | Jun 9, 2023 |
0.0.0 | Jul 12, 2018 |
#34 in Programming languages
1,857 downloads per month
Used in 15 crates
(14 directly)
4.5MB
99K
SLoC
Contains (WOFF font, 1.5MB) NanumBarunGothic-Regular.woff2, (WOFF font, 135KB) FiraSans-Medium.woff2, (WOFF font, 130KB) FiraSans-Regular.woff2, (WOFF font, 75KB) SourceCodePro-Regular.woff2, (WOFF font, 75KB) SourceCodePro-Semibold.woff2, (WOFF font, 82KB) SourceSerif4-Bold.woff2 and 2 more.
Visit the site 🌐
—
Read the book 📖
rune
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
- Runs a compact representation of the language on top of an efficient stack-based virtual machine.
- Clean Rust integration 💻.
- Memory safe through reference counting 📖.
- Awesome macros 📖.
- Template literals 📖.
- Try operators 📖.
- Pattern matching 📖.
- Structs and enums 📖 with associated data and functions.
- Dynamic vectors 📖, objects 📖, and tuples 📖 with out-of-the-box serde support 💻.
- First-class async support 📖.
- Generators 📖.
- Dynamic instance functions 📖.
- Stack isolation 📖 between function calls.
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);
Dependencies
~5–19MB
~250K SLoC