26 个版本 (15 个破坏性更新)

0.17.0 2024 年 2 月 25 日
0.15.0 2024 年 2 月 3 日
0.14.0 2023 年 12 月 3 日
0.13.1 2023 年 11 月 27 日
0.5.0 2022 年 10 月 15 日

#64 in 配置

Download history 30/week @ 2024-04-04 351/week @ 2024-04-11 8/week @ 2024-04-18

568 每月下载量

GPL-3.0 许可证

180KB
4.5K SLoC

Tulisp

docs.rs Crates.io

Tulisp 是一个可以嵌入到 Rust 程序中的 Lisp 解释器。其语法试图尽可能接近 Emacs Lisp。它主要设计为配置语言,但作为通用嵌入式脚本语言也表现良好。

使用 Emacs Lisp 语法的许多好处之一是我们可以重用其内置函数和宏的文档。对于已经熟悉 Emacs Lisp 的人来说,无需学习额外的语言。

入门指南

Tulisp 需要 rustc 版本 1.70 或更高。

入门非常简单。以下是一个示例

use tulisp::{TulispContext, tulisp_fn, Error};

fn main() -> Result<(), Error> {
    // Create a new Tulisp execution context.
    let mut ctx = TulispContext::new();

    // Add a function called `add_nums` to `ctx`.
    #[tulisp_fn(add_func = "ctx")]
    fn add_nums(num1: i64, num2: i64) -> i64 {
        num1 + num2
    }

    // Write a lisp program that calls `add_nums`
    let program = "(add_nums 10 20)";

    // Evaluate the program, and save the result.
    let sum: i64 = ctx.eval_string(program)?.try_into()?;

    assert_eq!(sum, 30);
    Ok(())
}

特性

  • defundefmacrolambda
  • 使用 intern 动态查找/创建符号
  • Backquote/Unquote 形式(例如 `(answer . ,(+ 2 3))
  • 线程宏(thread-firstthread-last
  • 从 alists 和 plists 读取的方法
  • 词法作用域和词法绑定
  • 尾调用优化
  • 用于将 Rust 函数暴露给 Tulisp 的 Proc 宏
  • 用于快速创建列表和解构列表的 Decl 宏
  • 易于使用的 解释器对象
  • 错误时的回溯信息

性能

Tulisp 具有轻量级的树遍历解释器,启动时间非常短,对于许多配置/模拟需求来说速度足够快。

内置函数

当前可用的内置函数列表可在此处找到 此处

依赖项

~1.5MB
~36K SLoC