2 个版本
0.1.1 | 2023 年 5 月 22 日 |
---|---|
0.1.0 | 2023 年 5 月 22 日 |
652 在 编程语言 中
每月 28 次下载
77KB
2K SLoC
codebake(工作标题)是一个受网络厨师启发的玩具数据处理框架和 Lisp 语言。它还有很长的路要走,所以请多包涵!另外,我们有一个wiki,其中包含 codebake 的教程和参考文档。
用法
codebake 中的主要对象是 菜肴,它只是一个由 操作 处理的 可变 数据容器。有关 codebake 中实现的所有操作的列表,请查看操作参考
Lisp
嵌入的 Lisp 目前是使用 codebake 的主要(也是唯一)方式。计划很快构建一个类似于网络厨师 的网络应用程序,但到目前为止,Lisp 是使用 codebake 的方式。以下是一个示例
codebake> (def my-dish d"hello world!")
my-dish
codebake> (def my-recipe (recipe (rot13 13) reverse to-base64))
my-recipe
codebake> (def undo-my-recipe (recipe from-base64 reverse (rot13 13)))
undo-my-recipe
codebake> (bake my-recipe my-dish)
Dish("IXF5ZWJqIGJ5eXJ1")
codebake> (bake undo-my-recipe :ans)
Dish("hello world!")
注意
- 字面量
d"hello world!"
不是一个普通字符串,它是一个 菜肴字面量,它创建了一个Dish
。 recipe
函数从其参数创建一个菜谱(只是对菜肴进行操作的函数列表)。菜谱按 顺序 应用。也就是说,菜谱(recipe (rot13 13) reverse)
将在应用reverse
之前应用rot13
操作。bake
函数将菜谱应用于Dish
。:ans
符号始终定义,并且是从解释器中获取的最后一个 成功 结果。
bake
和 recipe
函数为方便起见而实现,但直接将操作应用于菜肴也是完全可行的。此外,Lisp 支持 lambda
和 defn
以定义函数。以下是一个演示所有这些的示例
codebake> (defn rot-reverse (n text) (reverse ((rot13 n) (dish text))))
rot-reverse
codebake> (rot-reverse 13 "hello world!")
Dish("!qyebj byyru")
有关 Lisp 的更多信息,请参阅Lisp 参考。
网络解释器
核心代码烘焙项目可以编译成 WASM,以便在网页上运行。这使得我们可以在浏览器中嵌入Lisp。我们希望将其集成到类似于 Cyberchef 的脚本环境中,该环境在浏览器中与Web应用一起运行,但我们距离这个目标还很远。不过,这里有一个网页解释器的演示:https://saviour.dev/0013
仓库结构
codebake是一个包含所有主要codebake项目的cargo工作区。目前,有以下项目:
- codebake - 主要的codebake项目。它包含codebake API、操作本身以及Lisp解释器。
- web-interpreter - 一个包含一个(非常)简单应用的项目,该应用将Lisp解释器嵌入到浏览器中。Yew
- wiki-updater - 一个自定义GitHub操作,用于在推送时自动更新wiki。
我们打算很快在这个工作区中添加第三个项目,即Web应用。
贡献
欢迎贡献!查看CONTRIBUTING文件以获取更多信息。
构建
codebake遵循标准的cargo build
过程!
依赖项
~5.5MB
~94K SLoC