yfaming on Nostr: 本书作者似乎非常推崇 Lua 的实现,clox 也多处借鉴了 Lua ...
本书作者似乎非常推崇 Lua 的实现,clox 也多处借鉴了 Lua 的设计,包括函数调用和 closure。
作者还特别提到,The Implementation of Lua 5.0 论文,是他最喜欢的论文之一。
今天简单浏览了一下这篇论文,有一种熟悉的感觉。
第 3 节 The Representation of Values,所用的 tagged union 技术,clox 也用上了。
第 5 节 Functions and Closures,更不用说,clox 就是借鉴了这一节所描述的 upvalue 技术。
另外注意到,Lua 与 clox 一样,也是手写 scanner 和 recursive descent parser。
当然,clox 与 Lua 还是有很多不同之处的。
Lua 是 register-base VM,而 clox 是 stack-based 的。Lua 支持 coroutine 但 clox 不支持,等等。
作为小七的嵌入式语言,Lua 5.0 在简洁性方面确实很极致。扣除空行和注释后只有 1.1w 行代码,而 Lua 虚拟机也只有 35 条指令。
https://www.lua.org/doc/jucs05.pdf 接下来,开始 Crafting Interpreters 第二部分,用 C 实现的 Lox 字节码解释器 clox。
在第一部分,用 Java 实现的 tree-walk interpreter jlox 中,我们完整实现了 Lox 解释器,包括 scanner、parser、resolver、interpreter 等等。
但是,第一部分的解释器利用了 Java 语言的许多特性。
比如,Lox 的值,全部用 Java 的 Object 类型表示。
Lox 里的 return,用 Java 的异常来实现。
而 Java 自带 GC,所以 Lox 中对象的生命周期,我们也完全没考虑过。
在第二部分,我们将使用 C 语言实现解释器。C 比 Java 更加 low-level,它不支持 OOP,不支持异常和 GC。
因此,这几个问题,我们就需要在 C 里面手动处理了。
而且,第二部分我们实现的是字节码解释器。我们需要定义字节码,并在 parsing 将 ast 编译为字节码。
用不同语言实现同一门语言,但采用略有不同的技术,可以加深我们的理解,并学习 compiler/interpreter 领域的不同主题。
Published at
2026-09-05 10:14:44 UTCEvent JSON
{
"id": "22935a24122e22d05d06e80ad61f32c6e63042d50c80594945767656dd2f0872",
"pubkey": "908fbc3babc322eea473a0ab1e6bf6b3adcf899288ac97b2fa79f34ad408d4e4",
"created_at": 1788603284,
"kind": 1,
"tags": [
[
"q",
"1aea59b1f714db6bebf6019f30c55e36795d9bbba666682c752163c90db1acff",
"wss://lang.relays.land/zh",
"908fbc3babc322eea473a0ab1e6bf6b3adcf899288ac97b2fa79f34ad408d4e4"
]
],
"content": "本书作者似乎非常推崇 Lua 的实现,clox 也多处借鉴了 Lua 的设计,包括函数调用和 closure。\n\n作者还特别提到,The Implementation of Lua 5.0 论文,是他最喜欢的论文之一。\n\n今天简单浏览了一下这篇论文,有一种熟悉的感觉。\n\n第 3 节 The Representation of Values,所用的 tagged union 技术,clox 也用上了。\n\n第 5 节 Functions and Closures,更不用说,clox 就是借鉴了这一节所描述的 upvalue 技术。\n\n另外注意到,Lua 与 clox 一样,也是手写 scanner 和 recursive descent parser。\n\n\n当然,clox 与 Lua 还是有很多不同之处的。\n\nLua 是 register-base VM,而 clox 是 stack-based 的。Lua 支持 coroutine 但 clox 不支持,等等。\n\n作为小七的嵌入式语言,Lua 5.0 在简洁性方面确实很极致。扣除空行和注释后只有 1.1w 行代码,而 Lua 虚拟机也只有 35 条指令。\n\nhttps://www.lua.org/doc/jucs05.pdf\n\n\nnostr:nevent1qvzqqqqqqypzpyy0hsa6hseza6j88g9tre4ldvade7ye9z9vj7e0570nft2q348yqyvhwumn8ghj7mrpdenjuun9d3shjuewd3skuep00f5qzxrhwden5te0wfjkccte9ehx7um5wfaxstn0wfnj7qpqrt49nv0hzndkh6lkqx0np327xeu4mxam5enxstr4y93ujrd34nls7vs4y9",
"sig": "c881bc2a2d940b70b75762031964bb6aecf4182dd1079521969a2865be28b8e739ece621927c5fc9fc5b30cc4027a055e150ce47e1d0e56528d2f1dd6b4ab813"
}