Show HN:把 GOTO 和 AVX2、多线程、四元数揉在一起,他做了一台能在 UEFI 上裸跑的 BASIC 解释器

Thoreau BASIC:把 PC 直接启动进 BASIC 的认真玩笑

Hacker News 上最近有个帖子挺有意思,作者直接把它当 Show HN 甩出来,标题问了一句「如果 BASIC 从来没过时,它会变成什么样」。帖子没什么大公司的动静,就是一个人花了很多精力,造了一台叫 Thoreau BASIC 的东西。它是免费的 x64 解释器,灵感来自 GW-BASIC,但最离谱的是,它既能当普通 Windows 程序跑,也能直接裸跑在 UEFI 上,连操作系统都不要。

这事的起点是个玩笑。作者说,他想要一个能接收 DIM A%(12000000000) 这种荒唐命令、而且真的能执行的 BASIC,然后一直往里加东西,加着加着就变成了现在的 3.2 版。语言表面上还是老微软 BASIC 那股味:行号、GOTO、GOSUB、PRINT、PSET、LINE、CIRCLE、DRAW 全都在,可底下已经堆了一堆机器级的东西——原生 x64 JIT 编译、PARFOR 多线程数值循环、SSE2/AVX2 加速、64 位寻址,以及原生支持复数、四元数和其他超复数。

这些不是花架子。作者最近花了很多时间,让 BASIC 程序跑得快到「不再像解释器的演示」。他举的例子是 Mandelbrot:鼠标移动平移分形,左键放大、右键缩小,程序持续重绘并实时显示帧率。整个 demo 就活在这块画布上,跟着鼠标一路实时重算。

整个项目始终被一个约束压着——Windows 和 UEFI 上要执行「基本相同」的 BASIC 语言。作者的原话是,程序不该因为底下没有操作系统就变成另一个物种。所以这个项目里既有 3D 和程序化生成的 demo、精灵程序、网络示例、超复数分形,也有游戏。它甚至有 CREATEEXE,能把 BASIC 程序变成独立的 Windows 可执行文件;还有 CREATEEFI,把同一个程序变成能直接引导的 UEFI 应用。另外还有集成的 profiler、调试器、跟踪和程序分析工具,以及一份相当详细的 SYSTEMINFO$ 诊断,排查性能差异时可以直接对照 CPU 能力和执行环境。

声音系统也膨胀得有点不成比例。Thoreau BASIC 现在能同时处理最多 32 路乐器通道加 64 路音效通道、256 个 voice,还带实时声像和亮度控制。NOTE 和 SOUNDKEY 已经接近可演奏的合成器原语,不再是老式 BASIC 那种哔哔声。

作者自己很清楚这有多荒诞,他在帖子里原话是「我完全知道把 GOTO 100 和 AVX2、多线程、TCP/IP、四元数算术揉在一起有多离谱,而这恰恰是重点」。他想要的就是那种如果 BASIC 从没退出历史舞台、会一直长成什么样子的答案,Thoreau BASIC 3.2 就是他现在的回答。

评论区也很活。有人在怀念 VB.NET,说自己几年前还用它在写一切,直到它彻底沦为二等公民才切到 C#,还坚持觉得 VB.NET 比 C/C#/Java 可读得多。有人问是不是必须用行号、有没有计划做系统音量或屏幕亮度这种 OS 级控制,也有人直接表示想要一个能按 10 的倍数自动编号行的代码编辑器。dang 还翻出一条关联帖——作者之前在八月发过一版「能启动在 UEFI 机器上的 BASIC 解释器」,那时候就有 44 条评论。这个解释器从八月那版一路磨到今天,不是临时起意。

我对这类项目总是有点复杂情绪。一方面它确实好玩,也确实是那种「足够不讲道理的人」才会享受的东西——把一台现代 x64 PC 直接启动进一个 BASIC 解释器/JIT 编译器。另一方面我又忍不住想,这种「如果当初没转弯」的假设其实没法真正检验。语言过时从来不是因为技术不够,而是因为生态、库、人才和工具都迁移走了。一个再精致的复古解释器,也补不回这几十年长出来的这部分。但这不妨碍它作为一个认真的、技术密度很高的个人项目成立,而且作者要的反馈也挺具体:记得 GW-BASIC/QBasic 的人、编译器和解释器圈子的人、以及足够疯到想看 PC 裸奔进 BASIC 的人。

与其把这个帖子当趋势信号来评判,不如把它当成一个人对「编程语言另一种可能」的长期自问。他已经在答了,答得还挺认真。

相关链接