Toy scripting language, built with Rust
Only a few days old. Not production ready. The goal is to use it in Fomos as a shell.
* except log, doesn't count ;)
java
{
let x = 0
while x<5 {
x = x+1
}
x
}
returns 5
java
{
let x = 0
let f = (e) => {e+1}
let g = (f,e) => f(e)
g(f,x)
}
returns 1
Step 1: have some code
rust
let code: Vec<char> = r#"
{
let x = 0
while x<5 {
x = x+1
}
x
}"#
.chars()
.collect();
Step 2: parse it
rust
let ast = parse_ast(&code).expect("parse ok");
Step 3: run it
rust
let mut ctx = Ctx::new(ast);
let result = eval(&0, &mut ctx);
The result will have this type.
Go see the tests for more examples.
By default, there is no side effect possible from the script during eval (except inside ctx)
You can insert native rust closure with (or without) side effects into the script, and use it from there. Example with the print function:
```rust
let code: Vec
let printclosure = Rc::new(|a: N, _, _, _| { println!("{}", a.tostr()); N::Unit }); ctx.setvarabsolute("myprint", N::FuncNativeDef(Native(printclosure)));
let _ = eval(&0, &mut ctx); ```
Also the inner workings are not very rust-like, no unsafe though ;)