如果还不能解释这里的 Go、并发或 Wasm 概念,先走 前置课程,再回来排练;本页不是要求你在没理解时背稿。
这是一份操作顺序,不是逐字稿,也不是已确认的面试议程。目标是你能解释自己的实现,并判断 AI 给出的补丁。运行前进入独立仓库根目录。
主线先覆盖核心机制
主线见 四个核心 demo 与流程图:
make walkthrough
用 ./demos/core.sh call|plm|prefix|isolation 分别演示普通调用、提前读取、源码流与实例隔离。按主题运行,不把整套日志一次讲完。./demos/core.sh info 是可选通知状态扩展,没有 LLM,也没有证明信息反馈提升任务成功率。
PLM 与 prefix 已进入核心主线,编号交易脚本仍可作为细节备用,不必全部运行。
核心机制的备用入口
make demo # 真实 Wasm CPython + Host lookup,结果 47
make explain # 同例 PLM,显示 Guest 实际转换
make check # 现有真实 Guest 测试、文档例子、AST 单测和 go vet
可选背景:make prefix 演示文件分段输入;make prepared 演示私有内存全量复制。后者不是 COW,不占主要讲解时间。
不要在演示前自动更新工具链或下载新 artifact。当前 dist/spine.wasm 与 Guest 源码配套;若缺失,按 构建说明 解决,不能拿本机 Python 替代。make check 不会帮你部署、发布、下载 CPython 或测性能。
离线准备与本地阅读
联网时先准备真实 dist/spine.wasm、Go 依赖缓存,以及站点依赖(cd site && pnpm install --frozen-lockfile)。本站没有公开 Wasm 下载服务,不要把缺失 artifact 换成本机 Python 来假装通过。
make offline # macOS 子进程禁网:测试、站点重建和两条演示
make read # 打开提示的 localhost 地址;Ctrl-C 关闭
offline-check.sh 使用 macOS sandbox-exec,只限制检查子进程,不改整机网络。先确认 socket 连接被 OS 以 EPERM 拒绝,再运行原有测试、站点构建和真实 PLM/prefix 演示;Go 下载和包管理器联网也显式关闭。本机已在这个条件下通过验证,不能把结论推广为“全新空机器无需准备”或 Linux 已验证。
缺少 Wasm、站点依赖或静态产物时会给明确提示,不自动尝试下载。make read 使用 Python 标准库提供静态页,不调用 npm;所以已有 site/dist 时不需要启动 Astro。站内讲义、源码、图片可本地读,外部参考链接仍需要网络。
打开源码页后可点行号定位,或从函数目录跳转。手机可展开“跳到函数”;行号不混入复制的源码文本。辅助材料:调用图、追问卡。
约十分钟讲解的顺序
先自己讲,不需要同时打开所有文件:
- 问题与范围:为什么让 Python 保留控制流,让 Host 持有外部工具?这份实现只保留了什么?
- 跑一个结果:从两行 lookup 到带运费的 order。明确输入、工具返回值与 Python 输出。
- 沿工具往返读:
bootstrap.tool → C python_call → bridge.hostCall,然后说明错误怎样回到原 Python 调用处。 - 看一次转换:执行
make explain;指出 prepare 和 resolve 的位置,而不是只念术语。 - 读最小状态:
future.go的 request/response/done/cancel,说明谁创建、谁消费、谁收尾。 - 说明限制:只有显式允许的稳定只读快照能提前;未知语法正常执行;没有失败自动重试。
- 按问题展开:对方关心流式输入才打开 prefix;对方问基线与隔离才讲 full-copy。
这只是练习的时间安排,不把论文性能数字或原系统全部能力带进来。不要把文件分段回放说成已接入 LLM provider,也不要把 full-copy 说成共享物理页。
五个边界例子 是备用材料,不要求逐个演示。对方问到哪个点,再开对应短文件。
新需求通常在哪一层
- 新增业务工具、改变固定演示数据:先看 CLI 的
demoTools,不是 C 或 AST pass。 - 调整 Python 结果/错误的呈现:先看 bootstrap 的 execute/decode 和 Go Output。
- 改提前位置或支持语法:看
guest/plm.py,先明确不会改变哪些依赖/控制流行为。 - 改流式输入来源:看
RunPrefix的 channel 接口;prefix 是否可提前解析是另一层问题。 - 改结果领取、取消、失配行为:看
future.go;不要复制第二套 Future。 - 改 Guest 初始化策略:看
prepared.go,一般与工具业务或 PLM 无关。
这是一张定位图,不是“任何新需求都只改一个文件”的承诺。Guest C/bootstrap/pass/prefix 有改动时必须重建实际 Wasm。
两个练习题:只留题目,不提前实现
练习 A:更有用的 Python 错误定位
需求草案:目前只有异常类型和消息,希望定位用户源码出错的位置。
你先决定:
- 哪些信息是必需的:用户行号、完整 Guest traceback,还是其他形式?
- 是否保留已有 error 文本?是否需要改变 Output?
- 应不应该显示 bootstrap 内部 frame?
- 被用户
try/except捕获的错误,要不要额外输出?
练习时先写一个失败例子和期望输出,再给 AI 修改任务。现阶段没有加入 traceback 功能,也没有替你选协议。
练习 B:Prefix 支持一种更丰富的参数形式
需求草案:当前 prefix 只识别一层输入下标,希望讨论 inputs["order"]["item"]。
你先决定:
- 支持几层、哪种索引?是否接受任意表达式?
- 缺失 key 或类型不符时,错误应该在哪里出现?
- 半条语句到达时应该做什么?
- 原有 whole-program PLM 和 prefix 是否需要完全相同的支持范围?
先预测要改哪里、哪些函数不该改。现阶段没有实现这项扩展。
协作规则
每题按这个顺序:你说需求与期望 → 你猜改动位置 → AI 查调用链并建议小补丁 → 确认行为 → 实现/验证 → 你解释 diff。
如果你解释不清某个条件,就记录这个缺口再回到对应章节;不要直接让 AI 把条件删掉。只要当前实现能完成这个题,就不扩成新的通用协议、调度器或证明框架。
本轮自动收尾完成了什么
- 对照 core 路径检查责任分布,没有因此重写 runtime、扩大优化语法或加入默认证据管线。
- 修复原有测试在单独筛选子用例时误用整组工具计数的问题。
- 将演示工具表提成小函数,五个文档例子直接复用它,不复制另一份假工具数据。
- 明确显示未转换/未启用状态,减少演示歧义;核心执行语义不变。
- 保留当前范围:快照只读工具、有限语法、配合 context 的可信工具、固定 Guest 的 full-copy。没有宣称全面安全审计或通用 Wasm checkpoint。
剩下不能由 AI 代替的是:你亲自讲一遍、选择练习中的行为、解释实现补丁。后续已按用户要求部署 Astro 文档站;练习题仍未提前实现。站点禁止索引,但不是需要登录才能访问的私有站。