3 个不稳定版本

0.2.0 2024年8月4日
0.1.1 2024年7月6日
0.1.0 2024年7月6日

#2078神奇豆子

Download history 214/week @ 2024-07-04 11/week @ 2024-07-11 18/week @ 2024-07-25 125/week @ 2024-08-01

157 每月下载量
用于 3 crates

Apache-2.0

89KB
2.5K SLoC

Rue 语言

Rue 是一种强类型编程语言,编译成 CLVM 字节码。它旨在成为 Chialisp 的替代品,用于编写 Chia 区块链上的链上代码。

这是一个非常实验性的编译器,目前不应在生产环境中使用。不过,您可以随意尝试示例!

设置

首先,安装 Rust 并克隆此仓库。然后从仓库根目录,运行以下命令安装 CLI

cargo install --path crates/rue-cli

现在您可以使用示例运行,例如

rue hello_world.rue
rue factorial.rue

您目前无法向程序传递参数,但您也可以使用 chia-dev-tools 运行

brun -x ff02ffff01ff018d48656c6c6f2c20776f726c6421ff0180 80

编译

使用一系列编译器遍历构建最终的 CLVM 输出

源代码

目前,单个文件被用作 Rue 程序的源代码。它以 UTF-8 编码的字符串形式读入内存。

词法分析器

源文本随后由词法分析器分割成令牌。每个令牌代表诸如标点符号、字符串、标识符和关键字等事物。这是为了提高性能并在解析阶段增强错误消息。

解析器

手写的递归下降解析器负责实现语言的语法。您从整个程序开始,例如解析一系列函数,每个函数都有一个参数列表,依此类推。最终,您得到一个包含您整个程序分解为有意义的段落的抽象语法树 (AST)。

AST

抽象语法树(CST)不适合编译器处理,因为它是无类型的,并且包含编译器不关心的标记,例如空格和关键字。因此,在这个阶段,CST被转换为一个抽象语法树(AST),这是编译器和相邻工具中我们关心的所有语法部分的强类型表示。然而,您仍然可以在任何时候取一个AST节点,获取其底层CST节点,以用于错误报告等。

HIR

AST通过几个步骤转换为HIR(高级中间表示)。首先,符号表被填充了函数声明。这允许您调用在您正在评估的代码之后定义的函数。接下来,函数本身被评估,将AST表达式转换为HIR节点。类型检查、名称解析和错误报告在这个阶段完成。

LIR

一旦构建了有类型的HIR,它就会被转换为一个更简单的形式,所有语言结构都简化为其CLVM对应物。这是低级中间表示。在这个阶段应用优化,包括摇树优化(删除死代码)和表达式简化。

代码生成

最后,您可以通过一系列转换从LIR生成CLVM,并且在最后还可以应用一些额外的优化。

依赖项

~1.3–2MB
~39K SLoC