#解释器 #befunge #完整 #永久 #98 #93

应用 bff

使用 Rust 实现的完整 Befunge 98 解释器

4 个版本 (1 个稳定版本)

1.0.0 2022 年 2 月 4 日
0.3.0 2022 年 1 月 19 日
0.2.0 2022 年 1 月 18 日
0.1.0 2022 年 1 月 16 日

编程语言 类别中排名 458

MIT 许可证

61KB
1.5K SLoC

bff - 使用 Rust 实现的完整 Befunge 98 解释器

CI Lines of code codecov Crates.io

是什么?

bff(代表 Befunge 永恒)是一个玩具项目,其次要目的是解释 Befunge 98 程序。

其主要目的是学习 Rust。

Befunge?

Befunge 93 是一种很棒的 另类 栈编程语言,其中程序不是序列,而是一个 网格 指令,如下面的程序从 stdin 读取一个整数并打印其阶乘:

&>:1-:v v *_$.@
 ^    _$>\:^

程序计数器/指令指针从左上角开始,在网格中移动,执行指令并改变方向,直到遇到 @ 指令,终止程序的执行。

您可以在这里了解更多关于 Befunge 93 的信息。

Befunge 98 是 Befunge 93 的图灵完备扩展。它扩展了程序网格到无限(Befunge 93 限制为 80x25),增加了文件 I/O 操作,支持库(它称为“指纹”)等等。

您可以在这里了解更多关于 Befunge 98 的信息。

状态?

bff 正在积极开发中(在 dev 分支上)。

目前,它是一个完全符合 官方语言规范 的 Befunge 98 解释器,并且成功通过了 Mycology 测试套件

目前,bff 不实现任何不属于语言核心的功能(例如,指纹、并发等)。计划在 bff 的后续版本中引入更多功能。

欢迎以问题表单形式提出任何评论/意见/批评.

欢迎以拉取请求的形式贡献,如果它们有适当的文档和测试。

为什么?

因为我相信,编写一个有趣的解释器是学习类似Rust这样的系统级、内存安全、类型严格的编程语言的最佳方式之一。

我也能玩吗?

要使用 bff,你有 2 种选择

  1. 下载/克隆此存储库并构建它(如果需要克隆并针对Mycology测试套件进行测试,请使用 --recurse-submodules 标志)
$ cd bff
$ cargo build --release

现在,bff 可执行文件将在 ./target/release/ 目录下。

  1. 使用 crates.io 通过 cargo 安装它
$ cargo install bff

如何?

如果你通过 cargo 安装了它,你可以将 bff 用作可执行文件

$ cat hello_world.bf
"!dlrow olleH">:#,_@
$ bff hello_world.bf
Hello world!

或者,如果你下载/克隆了仓库

$ cargo run -- tests/bf93/hello_world.bf
[...]
Hello world!

通过执行 bff -hcargo run -- -h 可以找到 bff 的完整参数列表。

您还可以将 bff 用作 REPL。请注意,每行后面都有一个隐含的 @ 指令,并且 0 是始终返回给操作系统的退出代码

$ cargo run
[...]
bff - Unefunge 98 REPL
version 1.0.0
(type "exit" or "quit" and press <Enter> or press <Ctrl> + C to quit)
> 2a*.
20 
> exit
$

作为未来的目标,REPL 将仅限于 Unefunge 98 指令集,以避免以下无限循环等不受欢迎的行为

$ cargo run
[...]
bff - Unefunge 98 REPL
version 1.0.0
(type "exit" or "quit" and press <Enter> or press <Ctrl> + C to quit)
> ^

依赖项

~7.5MB
~129K SLoC