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

#35 in Programming languages

Download history 1229/week @ 2024-07-19 1431/week @ 2024-07-26 575/week @ 2024-08-02 368/week @ 2024-08-09 1084/week @ 2024-08-16 503/week @ 2024-08-23 377/week @ 2024-08-30 909/week @ 2024-09-06 386/week @ 2024-09-13 492/week @ 2024-09-20 475/week @ 2024-09-27 629/week @ 2024-10-04 328/week @ 2024-10-11 476/week @ 2024-10-18 254/week @ 2024-10-25 524/week @ 2024-11-01

1,594 downloads per month
Used in 15 crates (14 directly)

MIT/Apache

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.

rune logo
Visit the site 🌐Read the book 📖

rune

github crates.io docs.rs build status chat on discord

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);

Dependencies

~5–19MB
~251K SLoC