News Hacker|极客洞察

🧩在 Z-Machine 上做 Advent of Code:ZIL/MDL 历史、Inform 与 Dialog 的讨论
把 Advent of Code 强行塞进 Z-Machine,是怀旧还是自虐?

🎯 讨论背景

原文在探讨把 Advent of Code(一个年度编程谜题系列)用 Z-Machine(Infocom 为文本冒险创建的虚拟机)来实现的可行性与趣味性。评论中补充了 Infocom 开发史:ZIL 与 MDL(早期 Lisp 方言)之间的关系、实际游戏源码的公开情况,以及 ZIL 是否为“低层”语言的争论。讨论还延伸到使用 Inform 7 把 AoC 映射为房间/方向网格的尝试与限制,以及 Linus Åkesson 的 Dialog(一个可编译为 Z-code 的现代 DSL)和其社区版的复苏。另有评论把 Z-Machine 与 CHIP-8(1970s 的简易虚拟机)做比较,还有人将标题误解为 Sandia 的 Z Pulsed Power Facility,显示出命名上的跨领域歧义。

📌 讨论焦点

ZIL 与 Infocom 开发实践

讨论集中在 ZIL(Infocom 的游戏实现语言)是否真如文章所说那样“非常底层”。一位评论引用 Infocom 内部的 Learning ZIL 指南,指出该文档把 ZIL 当作程序员会直接编写的语言,并且其抽象程度仅略低于 Inform 6。另一位评论者提供了实证:多数 Infocom 游戏源代码已公开,确实存在直接以 ZIL 编写的实例。还有人补充说,实际开发常在 MDL(一种早期 Lisp 方言)中使用宏来生成 ZIL,遇到 MDL 特有的宏时会手动展开或把宏功能硬编码进 ZIL 编译器,因为 ZIL 自身不支持自定义宏。

[来源1] [来源2] [来源3]

把 Advent of Code 映射到交互式小说/IF 的可行性

有人从 Advent of Code 的题目特性出发,指出许多题目都涉及二维网格,这可以自然地映射为交互式小说中的房间和标准方向出口。评论里有人尝试用 Inform 7(一个以类自然语言写作的 IF 工具)来实现 AoC 的一道题,但在第二部分遇到困难,承认没解出来。评论还提到 Inform 7 的 'Mathematics Textbook English' 语法颇具魅力,但在构建更复杂项目时可能显得不够实用。

[来源1]

Dialog 语言与现代替代工具

多位评论者推荐 Linus Åkesson 的 Dialog 语言作为现代替代方案,称其为受 Inform 7 和 Prolog 启发的领域专用语言。Dialog 的编译器 dialogc 能把高阶 Dialog 代码编译为 Z-code,从而在 Z-Machine 上运行,这使得把现代 IF 代码搬上 Z-Machine 更为可行。原作者表示会在未来文章中探索 Dialog,并有评论指出 Dialog 的 Community Edition 在 GitHub 上活跃,且有人在 Termux(Android 下的类 Unix 环境)上用 Clang 编译成功。总体观点认为 Dialog 更接近“把 Inform 7 做对”的实现,比纯粹的 Inform 7 更可移植和可控。

[来源1] [来源2] [来源3]

是否把 Z-Machine 视作最早的“fantasy console”

有人对文章把 Z-Machine 称为最早的 'fantasy console' 提出疑问,并举出 CHIP-8 作为另一个候选。CHIP-8 是 1970s 时期的一个简易解释器/虚拟机,常被复古爱好者当作入门级的 'fantasy console' 平台;因此在“谁更早”的定义上存在讨论。评论指出,这类比较还取决于如何定义 'fantasy console'(文本冒险的虚拟机与像素/图形型虚拟机的差异)以及各自的历史时间线。

[来源1]

标题歧义:Z-Machine 与 Sandia 的 Z 机混淆

有评论指出标题可能引发歧义:一些读者以为 'Z-Machine' 指的是 Sandia National Laboratories 的 Z Pulsed Power Facility(一种高功率脉冲装置),而非 Infocom 的虚拟机。另一条评论补充了 Sandia 的 Z-Division 和基地历史,说明在工程/物理圈与游戏/软件圈中同一名称会被完全不同地理解。这个误解提示标题在没有上下文时容易产生跨领域的歧义。

[来源1] [来源2]

📚 术语解释

Z-Machine: Infocom 在 1979 年创建的虚拟机,用于运行 Z-code(文本冒险游戏的字节码/平台无关格式),经常被当作早期的“fantasy console”来讨论。

ZIL: ZIL (Zork Implementation Language)——Infocom 用来编写交互式小说的实现语言,语法和工具链源于 MDL,在开发中常与 MDL 宏配合生成可供 Z-Machine 运行的代码。

MDL: MDL(一个早期的 Lisp 方言/MIT Design Language),Infocom 开发者在编写 ZIL 时常借助 MDL 的宏和开发环境,部分开发流程是在 MDL 中进行再生成 ZIL。

Z-code: Z-code——Z-Machine 使用的中间字节码/运行格式,高层 IF 语言(如 Dialog)可被编译为 Z-code 以在 Z-Machine 上执行。

Inform 7 / Inform 6: Inform 7 是一个以接近自然语言('Mathematics Textbook English')编写交互式小说的系统,Inform 6 是其更底层的前身。评论中把 Inform 6 与 ZIL 的抽象程度做了对比,且有人尝试用 Inform 7 解 Advent of Code。

Dialog / dialogc: Dialog(Linus Åkesson 的交互式小说专用 DSL,受 Inform 7 与 Prolog 启发)及其编译器 dialogc,可把 Dialog 源码编译为 Z-code,社区版在 GitHub 有维护。

CHIP-8: CHIP-8(一个 1970s 的简易解释器/虚拟机)常被复古/教学社区当作早期或入门级的 'fantasy console',在历史上常被用来与 Z-Machine 作比较。