1 个不稳定版本
0.1.0 | 2023年2月27日 |
---|
#882 in 编程语言
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”值替换它们。
参考资料
- Lazy K 规范.
- 2002 年 Esoteric Awards 的原始提交。这包含 C++ 中的参考实现。
- Lazy K - Esolang.
- 由 msullivan(C++)提供的源分发.
- SKI 组合子演算.
依赖项
~1.4–2MB
~38K SLoC