langkit 1.0.0

A builder library for creating programming languages in Rust
Documentation
use langkit::Value;

fn main() {
    let mut lang = langkit::langkit! {
        name("arc"),
        extension(".arc"),
        defaults(),
        mut_kw("var"),
        lib("base"),
        action("print", Box::new(|_interp, args| {
            let s: Vec<String> = args.iter().map(|a| a.to_string()).collect();
            println!("{}", s.join(" "));
            Value::Null
        }))
    };

    // Modules example
    println!("--- Testing Modules ---");
    std::fs::write("math.arc", "fn add(a, b) {\n  return a + b\n}").ok();
    
    let code = "
import \"math.arc\"
let result = math.add(10, 20)
print result
";
    if let Err(e) = lang.run(code) {
        eprintln!("Error: {}", e);
    }
    
    std::fs::remove_file("math.arc").ok();

    // Builtins example
    println!("\n--- Testing Builtins ---");
    let builtins_code = "
var m = map_new()
m = map_set(m, \"key\", 42)
print \"Map len:\", map_len(m)
print \"Value:\", map_get(m, \"key\")

var s = set_new()
s = set_add(s, 1)
s = set_add(s, 2)
print \"Set len:\", set_len(s)
";
    if let Err(e) = lang.run(builtins_code) {
        eprintln!("Error: {}", e);
    }
}