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
61KB
1.5K SLoC
bff - 使用 Rust 实现的完整 Befunge 98 解释器
是什么?
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 种选择
- 下载/克隆此存储库并构建它(如果需要克隆并针对Mycology测试套件进行测试,请使用
--recurse-submodules
标志)
$ cd bff
$ cargo build --release
现在,bff
可执行文件将在 ./target/release/
目录下。
- 使用
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 -h
或 cargo 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