拓冰建站拓冰建站
首页 / 资讯中心 / 正文

字节极限的艺术:milliForth为何能从436字节压到340字节

字节极限的艺术milliForth为何能从436字节压到340字节【免费下载链接】milliForthA FORTH in 340 bytes — the smallest real programming language ever as of yet.项目地址: https://gitcode.com/gh_mirrors/mi/milliForthmilliForth 是一款仅340 字节大小的 FORTH 解释器——目前已知最小的真编程语言实现。它能把一门图灵完备的完整语言塞进 512 字节的硬盘引导扇区比 sectorLISP 的 436 字节实现还小 96 字节。本文带你拆解milliForth 是如何把一门完整语言压缩到极限的。一句话认识 milliForth340 字节的真语言先上一组对比感受一下这个体积概念项目语言体积定位sectorLISPLISP436 字节曾是最小引导扇区语言milliForthFORTH340 字节目前已知最小真语言参照某 99 字节 BF 解释器Brainfuck99 字节esolang不算真语言这里真real是有门槛的必须图灵完备、可用于严肃场景。milliForth 虽然只有 340 字节但它是一整套完整的 FORTH——能定义单词、能跳转、能循环、能读写键盘和屏幕。整个解释器就是一个引导扇区大小的二进制文件sector.bin由sector.asm汇编而来。340 字节是怎么省出来的4 个关键设计关键一只留 12 个原语剩下的全靠语言自己长出来milliForth 在汇编里硬编码的单词只有十几个其余能力全部用 FORTH 自身定义——这正是 FORTH 自我构建的经典魅力原语单词功能/!读 / 写内存sp/rp取数据栈 / 返回栈指针/nand/0加法 / 与非门 / 判零exit从返回栈弹出并跳转执行的核心key/emit读一个键 / 打印一个字符s取状态结构体指针注意nand这个非对称的选择与非门是万能门用它就能在纯 FORTH 层合成出and、or、-、甚至drop、swap、over等所有逻辑与栈操作。打开hello_world.FORTH你会发现前 52 行几乎全是这种用 FORTH 定义 FORTH的自举代码比如: dup sp ;——dup单词只靠sp和两个原语就实现了。关键二一个s结构体收拢全部解释器状态传统 FORTH 会用多个独立全局变量记录解释器状态。milliForth 把state编译/执行模式、in输入游标、latest字典头、here字典空间末端四个字段打包进同一个结构体只暴露一个s单词取地址。省下的不只是变量定义更是每个引用点的机器码。关键三输入缓冲固定在 0x0000直接删掉tib单词终端输入缓冲TIB在 milliForth 中永远从0x0000开始因此取游标时直接用in即可省掉了传统 FORTH 里tib这个加基址的单词。在 340 字节的世界里一个单词的字节数都是钱。✂️关键四敢删就删——回删键和ok提示统统砍掉回删键被注释掉了sector.asm中删除键的处理代码用%ifdef BACKSPACE整体包裹、默认编译进不去。作者的理由很竞技对比对象 sectorLISP 同样不支持退格保持公平而且就算加回来milliForth 依然更小。错误处理极简没有熟悉的ok提示输入出错只是多打一个空行。用make sizecheck可以验证真实体积——它会把sector.asm汇编成sector.bin并去掉引导扇区必需的填充报告出 340 字节的实际代码大小。图灵完备一份脑吃Brainfuck解释器给出答案只有 340 字节是不是玩具bf.FORTH给出了反驳这是一份用 milliForth 写的合规 Brainfuck 解释器包含磁带移动、条件循环嵌套[]配对等完整特性。文件末尾用BF( ... )单词把一段 Brainfuck 程序吃了进去——而 Brainfuck 是公认的图灵完备语言能跑它就能证明 milliForth 是货真价实的真语言。hello_world.FORTH则是另一份证明先自举出完整 FORTH 词库最后只有一行. hello, world打印问候语。快速上手3 条命令跑起 milliForth 环境只需两个工具汇编器yasm和模拟器qemu-system-i386。git clone https://gitcode.com/gh_mirrors/mi/milliForth cd milliForth makemake会先重新汇编sector.asm生成sector.bin再启动 QEMU。其他常用命令一览命令作用make emulate直接用现成的sector.bin启动模拟make runfile filehello_world.FORTH自动键入示例程序由py_autotype.py逐字符模拟键盘make runfile filebf.FORTH跑脑吃解释器验证图灵完备性make sizecheck汇编并报告真实代码体积340 字节 小提示make runfile模式下文件内容本身会被管道送入 QEMU所以当前版本暂时无法再从标准输入交互。项目文件地图文件说明sector.asm全部核心代码约 250 行 x86 汇编340 字节的源头sector.bin汇编产物带 510 填充 0x55AA签名可直接当引导扇区hello_world.FORTH自举词库 Hello World 示例bf.FORTHBrainfuck 解释器图灵完备性证明makefile汇编、模拟、跑文件、体积校验一条龙py_autotype.py把 FORTH 源文件逐字符打字进 QEMUREADME.md项目说明与语言设计文档写在最后milliForth 的故事本质上是一场字节级的语言设计实验用万能门替代逻辑指令集、用单个结构体收拢状态、用固定地址消灭无用的取址单词、用大胆删减砍掉一切非必要功能——最终把一门图灵完备的 FORTH 压进 340 字节把 sectorLISP 的 436 字节纪录甩开 96 字节。如果你对程序到底能做多小这个问题感兴趣从 250 行的sector.asm读起就是最好的起点。【免费下载链接】milliForthA FORTH in 340 bytes — the smallest real programming language ever as of yet.项目地址: https://gitcode.com/gh_mirrors/mi/milliForth创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门