供学习和协作 coding 的独立小实现:Go/wazero 启动真实 CPython Wasm,Python 调用 Host 工具并交付结果。已实现普通执行、小型 whole-program PLM、prefix,以及 prepared full-copy 和 Linux COW 两种内存复用方式。基准实验保存在独立的 experiments/ 目录。
从 代码带读 的执行地图开始,再进入 cmd/demo/main.go。 先看每块代码的职责、输入状态和调用去向,再展开实现;保留主线、测试、示例、构建与站点教学源码的完整覆盖。基础课程 与 实现手册 可随用随查。文档站:https://pysolate-spine.pages.dev/,整站 noindex;这不是访问鉴权。
定位与未来方向
Pysolate 面向云端大规模 Agent 执行:以低驻留成本承载短时 Python 计算和工具编排,任务状态独立保存,完整工具链按需使用。 目标是在相同 CPU、内存预算下推进更多任务,并保持可接受的完成时间。
先读 云端 Agent 执行定位:部署假设、轻重执行分工、内存收益条件和验证顺序。当前优先研究内存密度、执行成本、Host 扩展与计算重组;容器交接仍是后续方案。
研究目录 区分当前定位、已有证据与历史讨论。文档站收录定位、内存优化和代码复用旁支;原版能力、Spine 实现与实验候选分别标明。
先补基础,或直接读实现
前置课程 默认只会最基本的编程,从工程工具、Go、值与内存、执行层次、ABI、并发讲到 PLM;Web 是可后读的旁支。每章都安排接回真实代码的位置。
有声图解小课
目录:https://pysolate-spine.pages.dev/listen/library/。旧 /listen/ 仍播放第一课。
公共播放器在 site/src/components/lesson-player/;每个小课独立放在 site/src/lessons/<id>/,只需讲稿/场景数据、View 和 render。自动发现课程,不需要内容作者修改中央注册表。并行分工与验证约定见 site/src/lessons/README.md。音频按课生成,现有音频可直接用于 Linux 构建和静态托管。
面试主线:四个核心 demo,一个入口
先看 核心演示与流程图,运行:
make walkthrough
# 或按讲解主题选择
./demos/core.sh call
./demos/core.sh plm
./demos/core.sh prefix
./demos/core.sh isolation
./demos/core.sh info # 可选:通知状态与未来研究
四个主 demo 覆盖普通工具调用、PLM、prefix、实例隔离与 prepared 复用。复用现有真实实现和握手测试,重点看控制流、工具顺序和状态归属,不做性能比较。通知状态作为可选研究扩展,没有接入模型,不构成信息反馈有效性的实验结果。
旧编号脚本保留作备用,主线按 core.sh 的主题选择,不需要记住所有脚本。Guest 源码改动后必须重建 dist/spine.wasm;仅更新 Git 不会同步本机旧产物。
Python 工具实现与 IDE
./demos/core.sh python 展示 Guest Python 经 Go Host 调用独立的 native Python 工具。看 Python provider;原有 PLM demo 仍直接使用 Go 工具,不受进程桥接影响。
IDE 使用 静态类型声明 识别 Guest 注入的工具名,不在示例头部添加会干扰 prefix 的 import。VS Code/Pylance 请打开整个仓库根目录。
模拟交易与时间戳日志
模拟交易演示 用固定行情、现金快照和本地下单展示控制流与 Host 许可。日志记录实际 UTC 时间、相对耗时、工具参数、返回值和拒绝原因;订单只存在于本轮内存中。
./demos/01-price-skip.sh # 价格条件不满足,不调用 buy
./demos/03-host-denied.sh # 条件满足,Host 拒绝下单
./demos/04-approved.sh # 本地模拟下单,带时间戳日志
可编辑 examples/trading.py,并用 -mode normal|plm|prefix 比较执行方式;-show-transformed 显示实际改写代码。
三个入口
make demo
make explain
make check
准备讲解时看 演示与协作练习;按问题选择 五个边界例子。练习题尚未实现,不需要先读全部底层代码。
离线演示准备:make offline;本地静态阅读:make read(前提是工具链、依赖和真实 artifact 已准备好)。
运行
需要 Go 1.25+、Python 3.9+、Git。仓库附带经过测试的压缩 Guest,首次运行无需编译 CPython:
make setup # 离线校验、解压到 dist/spine.wasm
make check # 核心 Go/Python 测试与 vet
make check-all # 加教学 module、实验 allocator/引擎和代码复用测试
make bench-analyze # 离线复算归档的内存结果
make bench-smoke # Linux:24 个小规模实测单元
make bench-full # Linux:完整当前候选矩阵
内存实验的源码、补丁、10 个 Guest 和历轮记录在 experiments/memory;生成代码复用实验在 experiments/reusable-code。首次 Go/pnpm 安装仍需要下载公开依赖。Linux COW 和 /proc 内存测量需要 Linux,macOS 可以运行普通 Guest、allocator/引擎测试和历史数据复算。
完整检查任务可直接交给 IDE Agent:Zed 验收 prompt。
只有修改 Guest C/bootstrap/pass 时才需重建:Linux x86_64 上运行 make setup-build && make guest。dist/ 是生成目录,压缩发布快照单独存于 artifacts/guest/,不随文档站发布。详见 构建与来源。
go run ./cmd/demo
# {"item": "book", "total": 42}
# 同一个查价例子加运费,普通 / PLM 结果一致。
go run ./cmd/demo -source examples/order.py
# {"item": "book", "total": 47}
go run ./cmd/demo -source examples/order.py -plm -show-transformed
# stderr 展示实际 Guest AST 转换或明确的无转换状态;stdout 仍是结果。
go run ./cmd/demo -source examples/order.py -prefix -show-transformed
# 文件按行片段回放,不是 LLM provider 接入。
go run ./cmd/demo -source examples/order.py -prepared-copy -prefix
# 同一条 prefix 路径,私有内存全量复制;不是 COW。
go run ./cmd/demo -source examples/order.py -prepared-cow -prefix
# Linux 私有 COW 映射;仍走同一条 prefix 路径。
go test ./... -count=1
go test -race -run TestPLMGuest -count=1
go test -race -run TestPrefixGuest -count=1
go test -race -run TestPreparedGuest -count=1
PYTHONPATH=guest python3 -m unittest guest/test_plm.py guest/test_prefix.py
go vet ./...
-source 换用户程序,-inputs 传 JSON,-wasm 指定 artifact。改用户程序无需重建解释器;改 Guest C/bootstrap/pass 必须重建。Ubuntu 本机构建入口是 make guest,复用 make setup-build 准备的静态库,不依赖远程构建机。
可选背景先读 prepared-copy,再读 Linux COW 教学。研究主线见上面的云端执行定位,PLM 保留为计算与等待重组的教学例子。
实现边界
Run普通执行;RunPLM只提前 Host 显式 opt-in 的稳定快照读取。- 小 AST pass 只在支持的程序里重排相邻工具赋值;保留依赖、分支和原调用处结果/错误交付。不支持的程序正常执行。
RunPrefix接收 append-only 源码片段,在同一 Guest / Future owner 中先准备、后执行。- Future 归本轮 Run,退出时取消/等待任务;工具必须配合 context。
- 无旧 Broker、Verified、certificate、receipts 或默认 hash 管线。没有失败后自动重试。
文件导航
examples/lookup.py 两行普通例子
examples/order.py 同例加一个独立读取
cmd/demo/main.go 工具注册、CLI 与模式选择
runner.go 普通 / PLM / prefix 共用执行生命周期
bridge.go Host 调用、prepare / resolve 入口
future.go 本轮 Future、匹配、取消与回收
prefix.go 源码 channel 接收与共用字节 ABI
prepared.go fresh / full-copy / COW 的共用初始化入口
cow.go COW 与公共创建路径之间的小接口
cow_linux.go Linux 匿名映射、memfd 封存与同地址私有映射
guest/bootstrap.py 执行约定与错误交付
guest/plm.py 小型 AST pass
guest/prefix.py 保守前缀解析与已准备 handle 领取
guest/runtime.c CPython / Wasm ABI 胶水
build-guest.sh Linux 链接与打包
tools/setup-build-inputs.py 首次准备本机 CPython/WASI 构建输入
tools/rebuild-guest.py 可选的历史远程构建入口
不需要旧 runtime 源码来运行新仓库。Go 直接依赖为 wazero 与提供 Linux 系统接口的 x/sys。普通路径 16 个、PLM 13 个、prefix 10 个、prepared-copy 7 个真实 Guest 子测试;另有 6 个 PLM 与 5 个 prefix 本机语法单测,以及 5 个文档例子同时验证普通/PLM 结果。
源码位于私有 GitHub 仓库;文档及选定源码视图由独立 Cloudflare Pages 站点提供。原 worktree 保留为备份。Wasm、凭据、机器配置和运行日志不随站点发布。