极简语言编年史:milliForth、sectorForth 与 sectorLISP 深度对比
【免费下载链接】milliForthA FORTH in 340 bytes — the smallest real programming language ever as of yet.项目地址: https://gitcode.com/gh_mirrors/mi/milliForth
在 340 字节的极限空间里塞进一门图灵完备的编程语言,听起来像开玩笑——但这就是milliForth做到的事:它是截至目前最小的"真正可用"的编程语言实现,整个解释器可以装进一个 512 字节的硬盘启动扇区,并随附 Brainfuck 解释器和 Hello World 示例。这篇文章带你快速上手 milliForth,并深度对比它、sectorForth 与 sectorLISP 这三位"极限编程"时代的代表。
📏 为什么是 512 字节?——一个迷人的约束
故事要从磁盘的**启动扇区(boot sector)**说起:每个传统磁盘的第一个扇区固定只有 512 字节,而扇区末尾 2 字节还要留给 55AA 引导签名,留给代码的其实不到 510 字节。
于是出现了一个硬核挑战:能不能在 512 字节内装下一门完整的编程语言?
| 语言 | 诞生时间 | 大小 | 亮点 |
|---|---|---|---|
| sectorForth | 2013 年 | 约 449 字节 | 首个扇区级 FORTH,开创者 |
| sectorLISP | 2014 年 | 436 字节 | 让"4 字节内核写 LISP"出圈 |
| milliForth | 2024 年 | 340 字节 | 最小的"真实"语言,图灵完备 |
💡 注意 milliForth 对"真实"的定义:排除 Brainfuck 之类的玩具语言(作者自己都能用 99 字节写出 BF 解释器,但那不算生产用途),只比较能实际编程的完整实现。
🚀 快速上手:3 步跑起 milliForth
milliForth 的仓库非常精简,核心文件一目了然:
sector.asm—— 汇编源码,解释器本体就在这里sector.bin—— 汇编后的成品二进制(正好 512 字节的合法引导扇区)hello_world.FORTH/bf.FORTH—— 两个可以直接运行的 FORTH 示例makefile+py_autotype.py—— 一键运行与自动"打字"脚本
运行方式(三步走):
# 1. 克隆仓库 git clone https://gitcode.com/gh_mirrors/mi/milliForth cd milliForth # 2. 直接运行(需要 qemu-system-i386) make emulate # 3. 运行示例文件 make runfile file=hello_world.FORTH原理很简单:sector.bin被当作软盘镜像交给 QEMU 启动,BIOS 执行完启动代码后,你就坐在一个 FORTH 提示符前了。make runfile则会通过命名管道,用py_autotype.py把示例文件"逐字符敲"给模拟器,效果就像真人输入。
🔍 深度对比:三者的设计哲学差异
milliForth 的语言有多"裸"?
milliForth 的内核单词只有寥寥几个:
| 单词 | 功能 |
|---|---|
@/! | 从内存取 / 存一个 16 位值 |
sp@/rp@ | 取数据栈顶 / 返回栈顶指针 |
0=/+/nand | 判零、加法、与非 |
exit | 从返回栈弹出地址继续执行 |
key/emit | 读键盘、打印字符 |
s@ | 取"状态结构"指针(解释器状态、输入偏移、字典头、字典尾 4 个单元) |
再加上:和;(定义新单词),就能构建出完整 FORTH。注意它把解释器全部状态打包进一个结构体s@,而 sectorForth 里是分开的独立变量——这是省字节的巧思之一。
与 sectorForth 的"师承关系"
milliForth 的设计大量借鉴了 sectorForth,作者甚至坦言两者"在几处不约而同地收敛"。主要差异:
- 状态结构体化:所有状态词合并为
s@一个入口 - 定义中单词不隐藏:写错了可能把解释器挂死(够硬核)
- 砍掉
tib:输入缓冲区固定从 0 地址开始,直接用>in即可 - 无退格键(生产版):为了公平对比,注释掉了退格支持——但注释里承认加回来仍然比 sectorLISP 小
- 错误提示极简:出错时只多打印一个空行
与 sectorLISP 的"擂台赛"
sectorLISP 以 436 字节写出一门 LISP(+ - * /四字节内核扩展出完整算术),是当年爆火的里程碑。milliForth 比它小了整整 96 字节。
💪 图灵完备?拿 Brainfuck 解释器说话
"340 字节"会不会只是玩具?milliForth 的回应是仓库里的bf.FORTH:一份完整的 Brainfuck 解释器,纯 FORTH 词法写成。看它的味道:
: dup sp@ @ ; : -1 s@ s@ nand s@ nand ; : 0 -1 dup nand ;数字、逻辑、循环全靠最底层的+、nand、exit往上垒。既然能在里面跑 BF(图灵完备的标杆),milliForth 本身的图灵完备性就实锤了。而hello_world.FORTH则展示了一个." hello, world"是如何一步步用 52 行 FORTH"自举"出字符串输出单词的。
✅ 小结:谁该关注 milliForth?
- 好奇极限工程的读者:看
sector.asm里每字节如何精打细算,是学汇编的绝佳范文 - FORTH 爱好者:它演示了 FORTH"一切皆单词"的最小骨架
- 历史爱好者:449 字节(sectorForth)→ 436 字节(sectorLISP)→ 340 字节(milliForth),这条"字节瘦身编年史"本身就是编程语言史的精彩注脚
512 字节的扇区装不下一张照片,却装得下一门语言——这大概是软件极简主义最浪漫的证明了。
【免费下载链接】milliForthA FORTH in 340 bytes — the smallest real programming language ever as of yet.项目地址: https://gitcode.com/gh_mirrors/mi/milliForth
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考