# dj-rs **Repository Path**: study_less_shape/dj-rs ## Basic Information - **Project Name**: dj-rs - **Description**: DJ的rust实现。 - **Primary Language**: Rust - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-09-18 - **Last Updated**: 2024-02-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README DJ lang ----------- 我自己的lisp方言的rust实现。 [C#那边](https://gitee.com/ZerAx/DJLang)暂时顾不上了,因为个人精力原因只能按使用需求开发。 ### 开发目标 DJ旨在成为一门领域专用语言(DSL)。因此最主要的开发目标是持续加强其解析和运行的易用性。 其次是完善其作为编程语言的基本功能与性能优化。 DJ的最常用场景将是作为结构化的配置文件使用(类似JSON或XML)。 简单举例: ``` (layout (label "Label") (button "Button" (on-click || (println "Clicked!)))) ``` ### 开始使用 在你所使用的rust项目的 `Cargo.toml` 文件下的 `dependencies` 条目下,按下方代码块所示添加一行即可引入本解释器。 ``` TOML [dependencies] dj = { git = "https://gitee.com/ZerAx/dj-rs.git" } ``` 下面是一段让DJ计算 `1 + 1` 并用 `println!` 输出其结果的代码。 ```rust fn main() -> dj::Result<()> { use dj::runtime::EnvExt; // 创建一个新的dj的运行环境global let global = dj::Env::root(); // 解析字符串(+ 1 1)到dj表达式并让其在glabal环境中求值 let ans = global.eval(dj::parse("(+ 1 1)")?)?; // “编译”期求值:本例中的表达式都是字面量。 // 因此可以利用“编译”期求值的特性,不借助eval直接化简求值。 // let mut expr = dj::parse("(+ 1 1)")?; // expr.eliminate(); // println!("The answer is {expr}"); println!("The answer is {ans}"); Ok(()) } ``` (TODO: 更多教程文档) ### Feature Flags + builtin: 为dj添加一个 `builtin_method` 过程宏。该宏可以自动解析函数的参数表然后生成 `BuiltinMacro` 格式的函数实现。详细解释[参见](dj-builtin/Readme.md) (感谢[学少何](https://gitee.com/study_less_shape)提供的实现) ### 衍生项目 + [dj-runner](https://gitee.com/study_less_shape/dj-runner) 朋友为DJ开发的Shell