1 unstable release

Uses new Rust 2024

new 0.1.1 May 12, 2025
0.1.0 May 10, 2025
0.1.0-alpha.1 May 9, 2025

#109 in Programming languages

Download history 144/week @ 2025-05-05

144 downloads per month

MIT license

355KB
9K SLoC

evalit

A toy interpreter.

example

use evalit::{Interpreter, Evaluator};

fn main() {
    let mut env = Environment::new();

    let script = r#"
    fn fib(n) {
        if n <= 0 {
            return 0;
        }
        if n <= 2 {
            return 1;
        }

        return fib(n-1) + fib(n-2);
    }

    let sum = 0;
    for i in 0..=10 {
        sum += fib(i);
    }

    return sum;
    "#;

    let retval = Interpreter::eval_script(script, env).unwrap();

    println!("ret: {:?}", ret); 
    // should output: 
    // ret: Some(143)
}


syntax

primitive type

null

boolean

true, false

integer

$-2^{63}$ ~ $2^{63}$

float

float number, f64.

string

string quote by "

control flow

loop

loop to repeat.

loop {}

while

while to repeat.

while condition {}

for

for to iterate.

for i in 0..=10 {}

if

if to choose branch.

if condition {} else {}

break

break to exist loop.

continue

continue to finish one iterate.

return

return to return value.

fn

user defined function

fn fib(n) {
    if n <= 0 {
        return 0;
    }
    if n <= 2 {
        return 1;
    }

    return fib(n-1) + fib(n-2);
}

Dependencies

~4–11MB
~115K SLoC