1 个不稳定版本

0.1.0 2023年2月27日

#882 in 编程语言

MIT 许可证

29KB
706

LazyK-rust

Lazy K 编程语言的解释器,用 Rust 编写。

Lazy K 是一种由 Ben Rudiak-Gould 设计的纯函数式编程语言,基于 SKI 组合子演算。

作为二进制程序使用

要获取二进制文件,请克隆此存储库并运行 cargo build

以下命令从给定的源文件运行 Lazy 程序,从标准输入读取并写入标准输出

lazyk-rust <path_to_source>

以下命令从给定的内联源运行 Lazy 程序,从标准输入读取并写入标准输出

lazyk-rust -e <source>

例如,lazyk-rust -e I 运行恒等函数,它将输入复制到输出(直到达到 EOF)。

有关 I/O 的工作方式,请参阅下面的规范。

作为库使用

使用 LazyKProgram 类。例如

use lazyk_rust::LazyKProgram;
let source = "I";
let mut program = LazyKProgram::compile(source).unwrap();
assert_eq!(program.run_string("abcd").unwrap(), "abcd");

有关更多详细信息,请参阅测试和 LazyKProgram 类文档。

实现细节

此解释器完全实现了规范。它也是完全安全的(它不使用 unsafe Rust)。

它通常采用与参考实现(lazy_orig.cpp)相同的方法,其中所有转换都是在原地进行的,以避免复制子树。

参考实现使用指针和手动引用计数。Rust 中的指针是不安全的,因此此实现将所有表达式保留在向量中,该向量充当表达式池,并使用整数索引而不是指针。

此实现不使用引用计数,而是使用垃圾回收。它不时地找到所有不可达的表达式,并用特殊的“Free”值替换它们。

参考资料

依赖项

~1.4–2MB
~38K SLoC