先把结论撂这:这人没在交认知税,他在存一笔别人看不太懂的本金。这事最值得聊的从来不是技术,是他干了一件跟所有人反着来的事——亲手把 23MB 的 Brainfuck 代码一行一行抠出来,只允许 LLM 参与一道工序。你算算这笔账,会发现自己对“效率”的理解可能是反的。
起因特简单。这人准备一场 C++ 比赛,重新学 CMake,教程里提了一嘴:代码生成器、加密签名、甚至光线追踪器都有人拿 CMake Language 写过,但不推荐。正常人看到这句划过去就完事了,他不,他去写了。而且选的是 Brainfuck——八种操作符、一根单向磁带的语言。换个别人,这事儿写成博客标题就叫《我又闲得慌了》,但你真读进去,发现这人每一步都有账本。
先说他怎么处理浮点数。Brainfuck 的单元是 u8,一个字节,没寄存器、没跨单元指令、加减乘除全没有。他就拿多个单元拼一个 double,一半比特存整数、一半存小数,小数点固定夹在中间。他自己说后来才知道这叫 Q 格式——先造轮子后查手册,这顺序放今天就是认知税,但人家乐意。一开始想用省字节的 Q8.8,分辨率 1/256、范围 [-128,128),结果场景里充当地面的球体半径得取 1000 才够平,只得换成更贵的 Q16.16。就这么一个参数调整,背后是几天的代码改拆。(插一句不相干的,这种细节读多了你会对“第一性原理”这词脱敏,因为它就是肯不肯自己把那笔账算到头的事。)
乘法怎么做的?反复加法。复制一个操作数当外层循环,另一个操作数在每轮内层里再复制一份当内层循环,内层每跑一次给结果加一。四单元乘四单元的时候,每个单元对每个单元配一遍,累加到八单元结果的 i+j 位,回写的时候丢掉最低两个单元。除法更狠,按笔算长除法的思路,余数 R = R*256 + A[next] 逐字节读入被除数,然后反复减去除数,每减一次商加一,余数变负就回退一步处理下一个单元——每个单元最多减 255 次。你算算,一个 400x225 的图像,每像素一次主光线加若干次反弹,这中间的减法次数是天文数字。他做完这些,项目跑起来大概每分钟渲染一个像素。头一回估算整个跑完要 62.5 天,还没算球体反弹——算上反弹,估计得奔着几个月去。截至他那篇文章发出来,已经渲染了 1229 个像素,其中只有 10 个跟参考实现不一致,大多差 1。这个准确率放在一个用单向磁带语言写的光追里,我看了是服气的。
说句扫兴的。这人文章里提了一句:源码 23MB,目标图片才 0.9MB,所以它是个很差的压缩技术。这话是自嘲,但你要是只把这事儿当行为艺术,你就没看懂。真正值得追问的是:他为什么坚持手写,只把类 SSA 转换这一道工序交给 LLM?
他自己在文章里没展开,但你从流程里能看出来。他把代码先转成类 SSA 形式,递归改写成迭代,函数内变量用匈牙利式前缀命名避免地址冲突。解析和代码生成拆开,中间搁一个自定义 DSL,支持 abs、add、call、copy、div、sqrt、while 那二十几个操作。这个 DSL 就是他的中间表示,是整座楼的地基。地基以下——也就是 DSL 里的那些 op 怎么映射到 Brainfuck 的 +-<>[]——全是他自己设计的。地基以上——比如把高阶结构翻译成 DSL——他才让 LLM 干。这个划分太清醒了。他知道哪一步是在搭思维框架、哪一步只是体力搬运。把后者交给模型,前者必须自己走一遍,不然他根本没法 debug,更没法在精度出问题的时候知道该怀疑长除法开根还是 Q 格式取舍。
这里头藏着一笔 vibe coding 的人该交的学费。现在一堆人用 Claude Code、Cursor 从需求到实现一路推过去,代码跑通了就算赢,中间没有一层自己的 DSL 卡着,出了问题就抓瞎——不是不能改,是不知道从哪改起,因为所有的映射关系都在模型肚子里,不在你脑子里。这人把 LLM 当搬砖工使,不是因为看不起 AI,是因为他清楚哪部分砖头搬完就完事、哪部分砖头的摆法决定整栋楼会不会塌。这个认知差,就是现成的一笔课学费。(顺带说一句,这类无人维护的 C 解析器,他说不如交给 Anthropic 的 C 编译器,这句话我笑了半分钟。)
他为什么选 Brainfuck?两个原因。一是它是最简单的语言,简单语言应当对应极简代码库——这个逻辑听着怪,但你用算账的眼光看是成立的:语言越简单,你自己要搭的构件越多,越容易把所有东西想清楚。第二个原因更有意思:Brainfuck 作者 Urban Müller 在自己的 README 里写了句瞧不上这语言的话,这人想用实际作品反驳他。说句不好听的,这动机像赌气。但你仔细品,这种赌气就是第一性原理的原始形态——别人说不行,我不信,我自己试。现在 AI 时代最缺的其实就是这个。因为 LLM 的答案永远是平滑的、中庸的、受过大量互联网文本训练后的主流判断,它不会赌气,所以它不会在“没人做这件事”的地方突然起身去做。
(插一句不相干的,我上次算过类似的账,结论是:能让一个人花几个月去抠一个跑 62 天才出图的项目,要么是真的无聊,要么是真的在意某种东西。无聊撑不了那么久。回正题。)
平方根这步他排除了 Heron 公式,因为含除法;排除了反复减法,因为太慢。用 Desmos 验证过泰勒展开在编码值 20000 以下拟合极差,最后选了长除法式的“学校算法”,依赖一个整数平方根。他论证说,编码结果差 1 只让解码后的平方根变化不到 1/2^16,也就是约 0.00001526,所以可以用 isqrt。这个误差分析有多扎实?扎实到他最后图像只有 10 个像素和参考实现不同。这种人在做的事,本质上是在一个完全不可写的语言里,先把可写的边界推到底,然后看看自己能在边界内做到什么精度。
那咱们说回开头那笔账:这人交认知税了吗?从时间成本看,交了,而且交得血重。但从另一个角度看,他在存一笔本金——别人用 AI 生成代码赚的是执行差的钱,他用这种极端项目赚的是判断差的钱。执行差,窗口期短,一两年就关;判断差,是那种你能在以后任何一个坑面前知道该怀疑哪一步的底子,这玩意儿复利期长得多。你拿这个去比那些“我用 AI 一个月赚了多少万”的帖子,账本上根本不是同一栏。人家没在赚那点快钱——或者说,等哪天他想赚了,他比谁都清楚该在哪一步砍成本、哪一步没法省。这个判断我目前不敢下死话,再看看。
最后提一嘴更新部分。Reddit 上有人问他怎么用 fork/join 原语改进这程序,他被吸去优化自己用的 JIT 解释器,说性能提升显著。实际渲染结果像梵高的画——他自己说的,精度误差导致。你看,连他自己都承认最后产物是“画的”不是“算的”。这事儿往深了想挺有味道:一个人把每个加法、每个除法、每个符号位都抠到了逐位可解释的程度,最后得到的图像却是一幅印象派。但你要问他值不值,我猜他会说:那 10 个不一样像素的差异,每一处他都能说清是哪一步误差灌进来的。这种账,比“我让 AI 帮我生成了一个网页”那本烂账,不知道干净哪儿去了。
这笔账,你自己算。咱下篇见。
