1 个不稳定版本
0.1.0 | 2020年8月16日 |
---|
#312 in FFI
25KB
620 行
unlambda
这是一个Rust unlambda解释器,您可以将其用作库。代码大部分还可以,(我完全是指它运行正常,没有内存泄漏(据我所知)且API不会让我感到厌恶)。但是,它的文档比我想提供的要少得多。
无论如何,这在我心血来潮的时候写的。我本来打算写一个rust unlambda二进制文件,也许我会做到这一点,但这个项目如果放在我的~/code
文件夹里,对任何人都没有好处。我正在尝试将90%以上的项目上传到crates.io,如果它们至少有点用处,那么我们就到这里。
无论如何,它的边缘有点粗糙(有些事情我现在不会做),暴露了比您预期的更多内部结构,而对于超出基本功能的文档几乎不存在。
尽管如此,API的重要部分都在顶层暴露,尽管几乎所有内容都是pub
。我的意思是,如果您想编写一个评估unlambda的程序,并且不想自己编写解释器,那么我真的没有必要保留可能会妨碍您的任何东西?我不知道。由于unlambda基本上是一个固定格式并且不会更新,因此除非是修复错误,否则这可能是最终的。
示例
let source = "`.!`.d`.l`.r`.o`.w`. `.,`.o`.l`.l`.e`.Hi";
// `unlambda::Input` is the "stdin", which can be a string,
// a file, actual stdin, ... It defaults to the empty string.
let input = unlambda::Input::default();
// Produces an error if we fail to parse, or if the
// unlambda program does some IO which itself produces an error.
let output = unlambda::eval_to_string(source, input)?;
assert_eq!(output, "Hello, world!");
许可证
此代码为公有领域,如[./LICENSE-CC0]所述。
值得注意的是,Unlambda分发本身是在GPL下分发的,但我相信我没有做任何会让这适用于此代码的事情。