#解释器 #命令行 #cli

bin+lib brim

优化的大脑* 解释器

10 个稳定版本

4.1.0 2024 年 5 月 13 日
4.0.1 2023 年 12 月 2 日
3.0.3 2023 年 9 月 18 日
2.2.2 2023 年 9 月 12 日

#258命令行界面

MIT 许可证

25KB
440

边缘

build status license version

边缘是一个优化的大脑* 解释器,尽管如此,它仍然努力变得非常愉悦和易于使用。

特性

详细信息

边缘支持两种类型的磁带:30000 长的环绕,或非环绕动态宽度。前者是默认的;后者通过功能 dynamic_array 实现。

单元格本身有三个可定制的功能:环绕、宽度和有符号性。默认情况下,单元格是无符号字节且环绕。然而,通过组合以下功能,您可以实现多种不同的单元格:- nowrap:禁用增减时的环绕 - wide_cell:将单元格更改为 64 位 - signed_cell:将单元格更改为有符号

调试

如果以调试模式编译,或带有功能标志 debug,边缘将识别字符 ;。这将输出有关信息(磁带、磁带指针和三个上下文指令)到提供的输出。

文件 I/O

使用 -i | --input-o | --output 标志,边缘可以读取/写入到文件而不是 stdin/stdout。

无论来源或目的地如何,所有 I/O 都会进行缓冲,以提供快速且可靠的体验(输出在每行结束时刷新,并在退出时刷新)。

优化

边缘内部使用基于标记的中间结构来执行代码。首先,它将加、减、左移和右移指令分组在一起以消除重复的循环(以及丢弃冗余指令)。

然后,它执行多个宏优化以将常见操作减少到单个“指令”。目前,它识别

  • 清除单元格([-]
  • 将单元格设置为值([-]++++
  • 将一个单元格移动到另一个单元格([->+<] / [>+<-]
    • 还识别乘法([->+++<]
  • 从另一个单元格减去一个单元格([->-<]
  • 扫描零单元格([>>>]
  • 复制一个单元格([->+>+<<]
    • 还识别乘法(与移动一样)

基于令牌的结构使得这些操作很容易识别,因为重复的指令已经合并为一个。

最后,它遍历每个括号([/])并预加载其目标,因此执行它们不需要查找时间(它只是覆盖IP)。

这些都是在缓冲I/O环境中运行的,如上所述。

导入

这个crate也作为库提供。可执行文件只是提供了一个到库的CLI接口。值得关注的是parseoptimize函数,以及Token枚举。

路线图

Brim还没有完成!我对未来的希望包括

  • 更多的宏优化
  • 通过功能特性进行磁带自定义
  • 通过功能特性进行单元格行为变体

贡献

总是欢迎贡献,尤其是优化。请在创建pull request之前,运行cargo fmtcargo clippy

如果您想实现一个新功能,考虑将其置于功能标志之后。这可以减小代码大小并略微提高运行时间。它并不适用于所有添加,但值得考虑。

依赖

~58KB