3 个版本
0.1.2 | 2023 年 8 月 27 日 |
---|---|
0.1.1 | 2023 年 2 月 19 日 |
0.1.0 | 2023 年 2 月 3 日 |
#376 in 编程语言
125KB
3K SLoC
BrainOxide
[ 在 crates.io 上 ]
一个用于 Rust 的优化 Brainfuck 解释器/编译器到 C。
作为一个学习 Rust 的项目。代码肯定不是惯用的,有些地方相当混乱。
特性
- 优化
- 模糊测试
- 回归测试套件
- 两种后端模式:解释或生成 C 代码
为什么?
世界还需要另一个 BF 实现?其实不需要。制作它的过程中我好玩吗,学到了东西吗?是的。
优化
BrainOxide 执行以下优化
- 指令合并
- 循环降低:while → if,while → 方程 / 集合
- 常量折叠
- IO 操作合并:将常数输出合并到单个字节数组输出中。
- 死存储消除
- 窥孔优化:[>][>], [>][>][>], ... → 各种搜索
BrainOxide 在内部区分平衡和不平衡代码部分。这指的是 > 与 < 的数量。在平衡代码部分,我们知道所有偏移量,因此可以更好地优化。在不平衡部分,我们优化能力非常有限。
对于平衡代码部分,BrainOxide 构建一个有向无环图(DAG),并在 DAG 上执行优化。
优化愿望清单
-
部分评估直到第一个输入指令
这可以将大型程序常量折叠成一个单个的
fputs()
调用。它必须是 opt-in。此外,它仅适用于代码生成模式。 -
更好的方程处理
目前将循环降低到方程相当有限且简单。代码不能降低已包含方程的循环,例如,只支持循环索引步长为
-1
。 -
循环/If 展开循环
如果我们知道迭代次数是静态的,并且这样做有意义,则展开循环。需要一个启发式方法。
代码稳定性
该代码库没有稳定的API。它不打算用作库。命令行标志也不稳定,因为我想要进行一些更改以允许更灵活的日志记录选项。
该软件仅在最新的Arch Linux x86-64安装上进行过测试。如果它在非Linux系统上工作,那是一个意外的惊喜。
最小支持的Rust版本(MSRV)
因人而异。截至撰写时,它在rustc 1.67.0上工作。它应该在最新的稳定Rust版本上继续工作(除了需要nightly进行模糊测试)。我不会在比当时最新稳定版本更旧的版本上进行测试。
总结来说:没有MSRV政策。
许可证
BrainOxide在GPL 3.0下发布(仅此版本,而不是“或更高版本”)。
依赖项
~5–15MB
~173K SLoC