饭点课按问题划分,文本按文件与调用链组织。它们不必一一对应:一个流程可能跨三个文件,一个文件也可能拆出多个知识小点。
打开饭点课目录。每个小课页面可以跳回相关文本;匹配的文本页也会在正文前显示可听的小课。这些双向链接来自小课自己的 readHref 和 relatedReadings,不另维护一份注册表。
两条路线
流程课:先知道一件事怎样完成
保留一个贯穿全课的具体输入,讲清谁先做什么、状态归谁、结果或错误到哪里。允许跨文件,不按文件顺序逐行念。
路线:普通请求 → 工具错误 → PLM → prefix → 内存复用。
知识小点:只解开一个局部疑问
从一段短代码或一张小图开始,一集只回答一个问题。细节不为时长硬凑,重复背景留给对应文本。
路线:变量赋值 → defer → slice 别名 → 函数值/闭包 → 接口 → channel/取消 → 跨语言 ABI。
这些是选题路线,不是必须先听完才能读代码的先修链。
已有课程
已有两集,继续保留
- 两行 Python,怎么跑出 42?:流程课,建立 Go、Guest 与工具边界的整体印象。
- Go 变量不会记住公式:知识小点,理解赋值保存当时的结果。
新增一集流程课、两集知识小点
- 工具错误怎样回到 Python:跟一次失败的查价请求,观察 Go 错误、桥接响应与 Python 异常。接回 bridge 带读 与 Python 封装。
- defer 的登记与逆序执行:区分“现在登记、现在求参数”和“返回前执行”。接回 入口代码 与 Run 清理。
- slice 别名与元素复制:区分复制 slice 描述和复制整数元素存储。接回 Go 的值与内存。
第二组:工具注册、提前启动与完成通知
- 函数为什么能放进 map:从一个简化 Go 例子看名字怎样找到函数,再接回 工具桥接 与 入口注册。
- PLM 怎样在原位置交付:按执行阶段观察准备、等待、完成与交付,接回 PLM 转换 与 Future。图示不使用虚构的性能秒数。
- 关闭 channel,通知结果已就绪:把结果盒与完成通知分开,看先写结果、再关闭通知、最后读取的顺序。接回 Future 带读。channel 的广播能力与项目中单次消费的 handle 分开讲。
三课可以连听:先认识工具函数如何被找到,再看它何时启动,最后看等待方如何知道它已经完成。
第三组:流式输入、取消与闭包
- prefix:源码没收齐,先准备完整读取:只扫描连续的合格前缀,收流结束后整段执行。接回 prefix Host 与 Guest 过滤和领取。
- context:通知取消,等待退出:工具协作退出,等待组确认收尾;接回 Future 生命周期。
- 闭包:什么时候读取外层变量:对比登记时保存的整数与执行时读取的变量,再结合 defer 的逆序执行。接回 入口带读。
建议的试听方式
先听一集流程课,再听一个知识小点,比较哪种更适合饭点。听完能回答下面的问题就够了:
- 这件事由谁完成?
- 哪个值或状态改变了?
- 回到代码时,应该打开哪个文件或函数?
不要求靠听书记住 API 拼写。代码中需要停下来推敲的部分,仍由文本带读负责。
最后一组:Go、内存与运行环境
规划中的 20 集已齐。这九集接完语言边界、内存复用和运行环境,不再逐篇文本机械拆集。
Go 与跨语言边界
- Go 接口:同一约定,不同实现:接口方法调用与命名函数类型的区别。
- 指针与所有权:共享变量、资源持有,以及 Run / Runner 的关闭顺序。
- Wasm 字节 ABI:Guest 偏移、字节长度、返回值拆包与释放。
- CPython 引用责任:新引用、借用数据,以及 Py_DECREF 与 free 的分工。
内存复用与运行环境
- Prepared full-copy:保存干净线性内存,每轮整段写入新实例。
- COW 共享与写隔离:同一页在基线、A、B 中的视图,以及写入后的私有化。
- 地址与 memory.grow:预留范围、Wasm 可访问长度和超限失败。
- Guest 构建链:固定输入、编译链接、嵌入 Python 文件、校验与加载。
- 离线网络 namespace:先备依赖,再让探针和验收在同一个隔离子进程中运行。
建议按本组顺序听;COW 前先听 full-copy,跨语言引用责任前先听字节 ABI。每课仍保留相关文本入口,方便回到真实源码。