《两周自制脚本语言》权威学习地图

按中文版完整目录与日文原版出版社目录,把3部分、19天、80个编号小节和7篇专栏组织为可运行Stone语言增量。 覆盖22个正式目录层级。

为什么不能只看最终输出

、、、、共同构成本页坐标。按中文版完整目录与日文原版出版社目录,把3部分、19天、80个编号小节和7篇专栏组织为可运行Stone语言增量。

最终输出相同不代表实现相同:词法器可能吞掉错误字符,解析器可能生成错误结合性的树,解释器可能从调用点而非定义点捕获环境,优化器也可能只在当前样本上碰巧得到正确值。因此每次增量都保留源文本、Token范围、AST快照、环境或帧状态、标准输出、错误输出与退出状态。

Stone增量实现台账

先冻结上一日全部样本和公开接口,再为本日功能写一个最小成功程序、一个边界程序、一个故意失败程序和一个跨功能程序。成功样本证明新语法能到达执行层;边界样本暴露空输入、嵌套、遮蔽、短路、越界或缓存失效;失败样本必须在最早确定的位置停止;跨功能样本防止新节点破坏旧的表达式、控制流与函数语义。

处理流水线分为六个可观察检查点:源字符是否完整消费,Token是否携带类型和值及源位置,文法是否选择唯一分支,AST是否表达优先级与作用域,运行环境或虚拟机是否遵守所有权和调用约定,最终值与错误是否满足语言合同。只记录最终打印文本会丢失前五层最有诊断价值的证据。

每个错误对象至少含阶段、源文件、行列范围、实际符号、期望集合、原因和恢复建议。不要在底层捕获后返回null继续执行,因为后续空指针会掩盖真正错误;也不要把Java反射异常原样暴露给Stone程序,而应保留cause并映射为稳定的语言错误类别。

性能增量采用差分验证:同一语料分别运行基线解释器和优化版本,先比较值、输出、错误类别与位置,再比较预热后的时间、分配量与查找次数。若槽位分配、内联缓存或字节码改变异常顺序,性能再高也不能通过语义验收。

每次提交还要附带增量契约:本日新增哪些Token、文法产生式、AST节点、环境槽位、虚拟指令或类型规则,哪些旧接口保持不变,失败后如何回退到上一日可运行状态。将生成的Token、AST或字节码快照纳入版本比较,但不把快照更新本身当成修复;先解释结构变化为何符合语言设计,再接受新的基线。这样可把19天连续演进变成可二分、可撤销、可复查的工程历史。

六阶段证据链

1. 核对3部分

围绕3部分19天保存输入、结构化中间状态与输出。进入“完成基础解释器”前,先断言当前检查点成立并记录首个偏离。

2. 完成基础解释器

围绕Stone语言保存输入、结构化中间状态与输出。进入“加入对象函数”前,先断言当前检查点成立并记录首个偏离。

3. 加入对象函数

围绕解释器保存输入、结构化中间状态与输出。进入“验证性能优化”前,先断言当前检查点成立并记录首个偏离。

4. 验证性能优化

围绕性能优化保存输入、结构化中间状态与输出。进入“进入VM与类型”前,先断言当前检查点成立并记录首个偏离。

5. 进入VM与类型

围绕理论回链保存输入、结构化中间状态与输出。进入“回做理论自习”前,先断言当前检查点成立并记录首个偏离。

6. 回做理论自习

围绕3部分19天保存输入、结构化中间状态与输出。进入“核对3部分”前,先断言当前检查点成立并记录首个偏离。

可运行骨架

基础篇(1-10) -> 性能优化篇(11-14) -> 解说篇(15-19)
find samples -name '*.stone' -print0 | xargs -0 -n1 ./run-regression
source -> tokens -> AST -> eval -> optimized env -> VM -> typed bytecode

正式目录逐项讲解

第1部分 基础篇

“第1部分 基础篇”要求先给出可运行正例,再列出语法、环境、对象、返回值和失败合同,最后沿处理流水线停在第一处分叉。在本日增量中,“3部分19天”服务于“核对3部分”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“完成基础解释器”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第1天 来,我们一起做些什么吧

“第1天 来,我们一起做些什么吧”要求先给出可运行正例,再列出语法、环境、对象、返回值和失败合同,最后沿处理流水线停在第一处分叉。在本日增量中,“Stone语言”服务于“完成基础解释器”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“加入对象函数”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第2天 设计程序设计语言

“第2天 设计程序设计语言”要求先给出可运行正例,再列出语法、环境、对象、返回值和失败合同,最后沿处理流水线停在第一处分叉。在本日增量中,“解释器”服务于“加入对象函数”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“验证性能优化”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第3天 分割单词

“第3天 分割单词”要求规定Token类别、最长匹配、跳过规则、转义与源位置,确保每个字符要么被消费一次,要么产生明确词法错误。在本日增量中,“性能优化”服务于“验证性能优化”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“进入VM与类型”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第4天 用于表示程序的对象

“第4天 用于表示程序的对象”要求明确对象布局、字段或变量槽位、查找守卫和失效条件,先冻结语义基线,再用相同样本比较时间与内存。在本日增量中,“理论回链”服务于“进入VM与类型”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“回做理论自习”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第5天 设计语法分析器

“第5天 设计语法分析器”要求把规则写成可执行文法,检查递归、歧义、优先级、结合性、前看集合和失败位置,再用AST快照证明结果。在本日增量中,“3部分19天”服务于“回做理论自习”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“核对3部分”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第6天 通过解释器执行程序

“第6天 通过解释器执行程序”要求先给出可运行正例,再列出语法、环境、对象、返回值和失败合同,最后沿处理流水线停在第一处分叉。在本日增量中,“Stone语言”服务于“核对3部分”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“完成基础解释器”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第7天 添加函数功能

“第7天 添加函数功能”要求画出词法环境、调用帧、参数绑定、返回值和闭包捕获关系,逐节点记录求值顺序、副作用与异常传播。在本日增量中,“解释器”服务于“完成基础解释器”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“加入对象函数”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第8天 关联Java语言

“第8天 关联Java语言”要求标明Stone与Java边界上的成员解析、参数转换、返回包装、异常映射和类路径依赖,避免宿主细节泄漏为语言语义。在本日增量中,“性能优化”服务于“加入对象函数”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“验证性能优化”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第9天 设计面向对象语言

“第9天 设计面向对象语言”要求明确对象布局、字段或变量槽位、查找守卫和失效条件,先冻结语义基线,再用相同样本比较时间与内存。在本日增量中,“理论回链”服务于“验证性能优化”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“进入VM与类型”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第10天 无法割舍的数组

“第10天 无法割舍的数组”要求明确对象布局、字段或变量槽位、查找守卫和失效条件,先冻结语义基线,再用相同样本比较时间与内存。在本日增量中,“3部分19天”服务于“进入VM与类型”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“回做理论自习”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第2部分 性能优化篇

“第2部分 性能优化篇”要求明确对象布局、字段或变量槽位、查找守卫和失效条件,先冻结语义基线,再用相同样本比较时间与内存。在本日增量中,“Stone语言”服务于“回做理论自习”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“核对3部分”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第11天 优化变量读写性能

“第11天 优化变量读写性能”要求明确对象布局、字段或变量槽位、查找守卫和失效条件,先冻结语义基线,再用相同样本比较时间与内存。在本日增量中,“解释器”服务于“核对3部分”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“完成基础解释器”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第12天 优化对象操作性能

“第12天 优化对象操作性能”要求明确对象布局、字段或变量槽位、查找守卫和失效条件,先冻结语义基线,再用相同样本比较时间与内存。在本日增量中,“性能优化”服务于“完成基础解释器”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“加入对象函数”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第13天 设计中间代码解释器

“第13天 设计中间代码解释器”要求先写出指令、操作数、程序计数器、栈效应和调用帧布局,再把每次状态变化与源表达式对齐。在本日增量中,“理论回链”服务于“加入对象函数”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“验证性能优化”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第14天 为Stone语言添加静态类型支持以优化性能

“第14天 为Stone语言添加静态类型支持以优化性能”要求明确对象布局、字段或变量槽位、查找守卫和失效条件,先冻结语义基线,再用相同样本比较时间与内存。在本日增量中,“3部分19天”服务于“验证性能优化”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“进入VM与类型”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第3部分 解说篇(自习时间)

“第3部分 解说篇(自习时间)”要求先给出可运行正例,再列出语法、环境、对象、返回值和失败合同,最后沿处理流水线停在第一处分叉。在本日增量中,“Stone语言”服务于“进入VM与类型”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“回做理论自习”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第15天 手工设计词法分析器

“第15天 手工设计词法分析器”要求规定Token类别、最长匹配、跳过规则、转义与源位置,确保每个字符要么被消费一次,要么产生明确词法错误。在本日增量中,“解释器”服务于“回做理论自习”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“核对3部分”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第16天 语法分析方式

“第16天 语法分析方式”要求把规则写成可执行文法,检查递归、歧义、优先级、结合性、前看集合和失败位置,再用AST快照证明结果。在本日增量中,“性能优化”服务于“核对3部分”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“完成基础解释器”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第17天 Parser库的内部结构

“第17天 Parser库的内部结构”要求先给出可运行正例,再列出语法、环境、对象、返回值和失败合同,最后沿处理流水线停在第一处分叉。在本日增量中,“理论回链”服务于“完成基础解释器”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“加入对象函数”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第18天 GluonJ的使用方法

“第18天 GluonJ的使用方法”要求标明Stone与Java边界上的成员解析、参数转换、返回包装、异常映射和类路径依赖,避免宿主细节泄漏为语言语义。在本日增量中,“3部分19天”服务于“加入对象函数”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“验证性能优化”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

第19天 抽象语法树与设计模式

“第19天 抽象语法树与设计模式”要求区分树结构与树上操作,列出新增节点和新增操作各自影响的模块,并用非法节点与跨版本回归检验扩展边界。在本日增量中,“Stone语言”服务于“验证性能优化”:输入保存原始Stone源码、预期Token或AST、初始环境与宿主版本,输出保存结构化结果、标准错误和退出状态。

验证时只改变一个运算符、分隔符、绑定、对象布局、类型标注或输入规模,并在进入“进入VM与类型”前停住第一条Token范围、语法分支、AST节点、环境绑定、虚拟指令或类型约束分叉。修复后重放此前所有日次样本;若旧语义改变,必须说明是有意语言演进还是回归。

分步视觉验证

常见误区

四类样本与验收

样本只改变什么必查证据通过条件
正常一个最小语言功能Token、AST、状态与输出与手工预测一致
边界空值、嵌套、遮蔽或规模首个边界分支与源位置边界可解释
非法一个字符、规则、绑定或类型最早错误类别与期望集合不继续污染状态
回归与上一日相同语料结构、值、错误与性能基线旧语义保持

练习

小结

  • 3部分19天:连接“核对3部分”的源文本、中间结构、运行状态与回归证据。
  • Stone语言:连接“完成基础解释器”的源文本、中间结构、运行状态与回归证据。
  • 解释器:连接“加入对象函数”的源文本、中间结构、运行状态与回归证据。
  • 性能优化:连接“验证性能优化”的源文本、中间结构、运行状态与回归证据。
  • 理论回链:连接“进入VM与类型”的源文本、中间结构、运行状态与回归证据。
  • 本页22个正式目录层级全部进入Stone可运行增量与差分回归链。

术语表

讨论

评论区加载中…