picol:用 500 行代码实现的 Tcl 解释器
发布: (2026年2月16日 GMT+8 16:04)
2 分钟阅读
原文: Hacker News
Source: Hacker News
Picol 是一个类似 Tcl 的解释器,使用约 500 行 C 代码编写(仅解析器大约 250 行)。它首次发布于 2007 年 3 月 15 日,并已在 GitHub 上归档,同时附带了原文的要点。
规则
在编写这段代码时,我遵循了以下几个目标:
- 使用普通的 C 编码风格,保持熟悉的缩进和注释。
- 将解释器的设计方式与真实的 Tcl 实现相似,使其成为任何想学习编写解释器的新手的有用示例。
- 确保解释器能够运行非平凡的程序——不仅仅是一个简单的 “设置变量并打印 hello world”。
结果解释器:Picol
解析器与 Tcl 非常接近,Picol 支持插值:
set a "pu"
set b {ts}
$a$b "Hello World!"
Picol 提供交互式 shell;直接运行可执行文件而不带参数即可。
编译
gcc -O2 -Wall -o picol picol.c
运行脚本
picol filename.tcl
支持的特性
- 字符串插值(例如
"2+2 = [+ 2 2]"或"My name is: $foobar")。 - 带
return的过程;如果省略return,则使用最后一条命令的结果。 - 控制结构:
if、if … else …、while(以及break和continue)。 - 递归。
- 通过调用帧实现的正确变量作用域,和 Tcl 一致。
- 内建命令:
set、算术运算符(+,-,*,/)、比较运算符(==,!=,>,=)。
“在每个大型程序内部,都有一个小程序想要逃离。” – 托尼·霍尔(Sir Tony Hoare)