3 个不稳定版本

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

#982魔力豆

Download history 189/week @ 2024-07-01 33/week @ 2024-07-08 106/week @ 2024-07-29 36/week @ 2024-08-05 5/week @ 2024-08-12

每月 147 次下载
用于 2 crates

Apache-2.0

445KB
11K 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 编码的字符串。

词法分析器

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

解析器

手写的递归下降解析器负责实现语言的语法。您从整个程序开始自顶向下,然后解析一系列函数,其中每个函数都有一个参数列表,依此类推。最终,您将获得一个包含您整个程序分解为有意义的段落的 Concrete Syntax Tree (CST)。

AST

CST 并不理想用于编译器处理,因为它未类型化且包含编译器不关心的令牌,例如空格和关键字。因此,在这个阶段,CST 被转换为一个 Abstract Syntax Tree (AST),它是我们关心编译器和相邻工具中语法各部分的强类型表示。但是,您仍然可以在任何时间获取 AST 节点并获取其底层 CST 节点,用于错误报告等。

HIR

抽象语法树(AST)经过几步转换成高级中间表示(HIR)。首先,符号表填充了函数声明。这使得你可以在评估的代码之后调用已定义的函数。接下来,函数本身被评估,将AST表达式转换为HIR节点。在这一阶段进行类型检查、名称解析和错误报告。

LIR

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

代码生成

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

依赖项

~18–31MB
~601K SLoC