源码阅读 - picol - 一个 500line 的 TCL Script 解释器
这是 Redis 的作者 antirez 在无聊的时候写的一个健脑锻炼 - 写了一个大约 500 行左右的解释器,可以运行 TCL 脚本代码。代码看起来很优雅,没有用什么奇奇怪怪的技术,实打实地用好了字符串解析,内存分配这些技巧。
main
: 根据参数进入 REPL 模式或者执行脚本picolInitInterp
: 初始化解释器,解释器的数据结构是栈帧的链表和TCL语言内部函数的链表。picolRegisterCoreCommands
: 将用 C 实现的函数注册为 TCL 语言的内部函数 - 体现了 SICP 中介绍的语言抽象picolEval
: 解释执行 TCL 字符串形式的代码。picolGetToken
: 将 TCL 字符串形式的代码变为有语法意义的 Token。
从实现上看,Picol 简化了解释器实现,省略掉了 OPCODE 的编译,直接将 token 用于解释执行,这与 TCL 这门脚本语言相对比较简单有关系 - 整个语言只需要定义命令,赋值,取值,调用函数,替换命令这么几个,其余的注入流程控制什么的都是命令。
衍生思考:闲来无事,写点大约 500 行左右的 C 代码是一件很好玩的事情。