340字节装下完整FORTH:史上最小真实编程语言milliForth全景概览
【免费下载链接】milliForthA FORTH in 340 bytes — the smallest real programming language ever as of yet.项目地址: https://gitcode.com/gh_mirrors/mi/milliForth
milliForth 是一个仅 340 字节的 FORTH 编程语言解释器,截至目前它是已知最小的"真实"编程语言实现——小到能完整塞进一个 512 字节的硬盘启动扇区(boot sector),却依然是图灵完备、可以写完整程序的可用语言。对于想理解"编程语言到底由什么构成"的初学者来说,它是极其难得的极限设计教材。🔬
340字节意味着什么?比"扇区"还小的编程语言
milliForth 的 340 字节指的是整个解释器的机器码体积,而非某个高级语言的压缩脚本:
- 它比著名的 436 字节 LISP 实现 sectorLISP 还小 96 字节;
- 比 99 字节的 Brainfuck 玩具解释器更"真实"——milliForth 附带了完整的交互式 REPL(读取-求值-打印循环)和词的定义机制,是生产级的可运行语言;
- 整个语言就是一个可以
dd写进软盘第一扇区的启动程序。
用一句话概括:milliForth 证明了"真实编程语言"的下限可以低到令人吃惊。
如何运行milliForth:克隆仓库后一条make命令启动
milliForth 用 x86 实模式汇编编写,通过 makefile 驱动 QEMU 运行。前提环境:安装yasm和qemu-system-i386。
git clone https://gitcode.com/gh_mirrors/mi/milliForth cd milliForth make # 重新汇编 sector.asm 并用 QEMU 启动makefile 中还有几个常用目标:
| 命令 | 作用 |
|---|---|
make emulate | 直接运行预编译好的sector.bin |
make runfile file=hello_world.FORTH | 自动把示例源码"敲进"解释器执行 |
make sizecheck | 汇编并打印sector.bin的真实字节数 |
其中make runfile会借助 py_autotype.py 逐字符向 QEMU 发送源码——模拟"人手敲键盘"的效果,非常直观。⌨️
极简词汇表:milliForth 只有 11 个原语单词
milliForth 的整个解释器只内置了下面这些"硬件级"单词(s@返回一个状态结构指针,包含解释器状态、输入位置、词表链接等):
| 单词 | 功能 |
|---|---|
@/! | 从地址取值 / 向地址存值 |
sp@/rp@ | 取数据栈顶 / 返回栈顶指针 |
0=/+/nand | 零判定 / 加法 / NAND 逻辑门 |
exit | 从返回栈弹地址并恢复执行 |
key/emit | 读一个按键 / 输出一个字符 |
s@ | 取"状态结构"指针 |
注意nand:NAND 是通用逻辑门,意味着一切逻辑运算都可以由它推导出来——这也是 milliForth 能把算术、比较、分支全部"长"出来的根本原因。
53行纯FORTH:hello_world.FORTH 如何"生长"出完整语言
hello_world.FORTH 是理解 milliForth 设计哲学的最佳入口。它从 11 个原语出发,纯 FORTH 逐行定义出完整的语言高层词汇,例如:
: dup sp@ @ ; : 2 1 1 + ; : - invert 1 + + ;- 负数是"取反加二"的补码运算:
: - invert 1 + + ; if / then、begin / while / repeat、do / loop等控制结构全部由branch、?branch和词表地址操作拼出来- 文件最后一行
." hello, world"打印出经典的 Hello World
也就是说:**解释器本体只有 340 字节,而"完整的 FORTH"是这 53 行源码在运行时自己定义出来的。**这正是 FORTH"语言即数据"思想的极限演绎。🌱
bf.FORTH:在 340 字节里再套一层解释器
为了证明 milliForth 图灵完备,项目附带了 bf.FORTH——一个用 milliForth 编写的 Brainfuck 解释器,并在末尾直接运行了一段 Brainfuck 程序打印 hello world。
在 340 字节的语言里再写一层解释器,是检验"这是否算真语言"的最硬核标准。运行试试:
make runfile file=bf.FORTH项目文件结构速览
整个项目小而完整,主要文件如下:
| 文件 | 说明 |
|---|---|
| sector.asm | x86 实模式汇编实现(核心代码,约 250 行) |
sector.bin | 汇编产物,即 340 字节的启动扇区镜像 |
| makefile | 汇编与 QEMU 运行入口 |
| hello_world.FORTH | 示例:从原语构建完整语言并打印 Hello World |
| bf.FORTH | 示例:milliForth 编写的 Brainfuck 解释器 |
| py_autotype.py | 把源码文件逐字"键入"QEMU 的小工具 |
| README.md | 项目说明与运行指南 |
从milliForth能学到什么?
- 通用门的威力:
nand+++ 存取,就能表达任何计算; - 约束驱动设计:"必须放进 512 字节扇区"这一个约束,倒逼出极简状态结构
s@、无ok.提示的稀疏错误处理; - 极致抠字节的工程文化:仓库提交历史里满是 "shave another byte" 这样一笔一字节抠下来的提交,是阅读极限编程案例的最佳素材。
如果你只给新手推荐一个"最小可用语言"去解剖,milliForth 就是那个答案——340 字节,装得下完整的 FORTH,也装得下对编程语言本质的全部思考。🚀
【免费下载链接】milliForthA FORTH in 340 bytes — the smallest real programming language ever as of yet.项目地址: https://gitcode.com/gh_mirrors/mi/milliForth
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考