2 个版本

0.1.1 2023 年 5 月 22 日
0.1.0 2023 年 5 月 22 日

652编程语言

每月 28 次下载

MIT 许可证

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 符号始终定义,并且是从解释器中获取的最后一个 成功 结果。

bakerecipe 函数为方便起见而实现,但直接将操作应用于菜肴也是完全可行的。此外,Lisp 支持 lambdadefn 以定义函数。以下是一个演示所有这些的示例

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