用 Rust 从零实现的、语义对标 CPython 3.14 的 Python 方言。 核心是像 Lua 一样易嵌入:宿主直接实现沙箱接口、脚本不可信且不可逃逸、纯 Python 库逐字可用。 另提供程序级可选的安全谱(渐进类型,非强制)。目标不是更快的 Python。
当前状态:M0 · M1 · M2 · M3 · M4 · M5 · M6 均已成立。
- M0(文档集):13 份全部写出(状态列见
docs/SPEC-INDEX.md§1);两条判据(CX-1编号零悬空 +重复定义、CX-2文档集状态一致)由tests/ci/check.py承载,当前 14/14 绿 - M1(最小可嵌入内核,
docs/PLAN-milestones.md§6 ①):判据本件是examples/m1.c——45 行 ≤ 50(MS-21要求入库),真编译、真链接、真运行, 输出42、退出码 0;验收脚本tests/ci/t_ab_1.py(缺 C 编译器即红, 不降级)。M1 ② 的启动延迟与常驻内存按§13-17是提示项、不作判据,报告已出:tools/measure_footprint.py实测(release)VM 引导 48 µs、宿主整程 1.05 ms、峰值 RSS 3.4 MB,数值与口径的唯一出处是docs/DESIGN.md的"Pyawa(M1 最小内核)实测基线" - M2(核心语义,
docs/PLAN-milestones.md§6):判据是"对拍 harness 在MS-13的语料上无新差异"。 实测(cargo test -p pyawa-abi --test conformance):407/407 通过 · 0 已知差异 · 0 新差异;MS-8的比对项齐(退出码/stdout/stderr/未捕获异常 + 探针);MS-12自检 407/407;MS-13的语料下限逐面满足(可执行判据tools/check_corpus_floor.py);MS-25连跑三次数值一致。 在册已知差异 3 条(DIV-1/DIV-2/DIV-8)全属MS-19的合法类,且当前无语料命中 - M4(类型系统,
docs/PLAN-milestones.md§6):扩展模式(.pyawa)的渐进类型 A 批(类型链)——TS-46(T?)→TS-47+TS-48(变量标注即静态类型/平台类型)→TS-50(收束)。两层检查: 编译期静态检查器(crates/pyawa-core/src/compile/typecheck.rs,CompileError::TypeAssignment)+ 运行期CHECK_ASSIGNMENT(BC-65)/TypeAssignmentError。判据①(T-BC-8/T-BC-9可观测)的 可执行归档见crates/pyawa-core/tests/m4_acceptance.rs;判据②(渐进保证T-TS-1)见crates/pyawa-core/tests/gradual_guarantee.rs。.py下同源码合法且惰性(BC-15/TS-5,编译产物逐字节不变)。 如实缺口:BC-25①("两侧皆标注处禁止发射",需跨模块静态信息)未做;TS-50部分形态与类体/嵌套函数边界未覆盖 (台账卷 05 的 round 4–7 节) - M5(能力层正式化,
docs/PLAN-milestones.md§6):判据①SPEC-capabilities.md§11 的T-CP-*13/13 全绿—— 可执行归档crates/pyawa-abi/tests/capability_acceptance.rs(11 例)/crates/pyawa-runtime/tests/two_providers.rs(7 例)/t_cp10_cancel.rs(4 例)/select_dup2_shapes.rs(1 例)/capability_registration.rs(6 例),静态两条由tests/ci/check.py的T-CX-4承担;判据② 两 provider 写法不变(同一脚本逐字节相同,真实PosixFsvs 受限RestrictedFs);判据③ 启动延迟与常驻内存升为阻塞项(§13-17已升),阻塞阈值经用户拍板——三档基线数字与 阈值的唯一出处是docs/DESIGN.md§9 的「Pyawa(M5 实测基线)」末节(判据① Lib import ratio 466/628=74.2%)。 如实缺口(不阻塞判据):CP-22的os.getcwd/chdirstdlib 面未接;CP-21的逐段 Dir 能力链为 v1 简化档;T-CP-10不含无 timeout 的阻塞recv/send与 Python 层KeyboardInterrupt投递;AB-43消费方有界读取待做;dup/dup2到 0/1/2 未接;C 面_codecs_hk/iso2022/gb18030/hz 未做(台账卷 05 的 round 12–13 节) - M6(兼容性验收,
docs/PLAN-milestones.md§6):判据MS-14报告可发布、新差异为零——cargo test -p pyawa-abi --test conformance实测(参照 Python 3.14.4):407/407 通过 · 已知差异 0 · 新差异 0, 四要素齐,PYAWA_DANGLING=1双档均绿;语料 407 条与在册差异 3 条(DIV-1/DIV-2/DIV-8)未变。MS-19判据补充(合法 Python 被拒必须修)随P3-38surrogate epic 收口:Lib/test体检 语法错 0/可编译 397/397=100%,import test.support.os_helper通过、multibytecodec_support.py同步且可导入,\ud800字面量/PEP 383surrogateescape·surrogatepass/fs 路径·argv·readlink·输出边界均落地;判据① 477/628=76.0%、Lib/逐字节同步 739 文件(--check全一致)。如实缺口(不阻塞判据、留队列):未实现形态(\N{…}/except*/ async 推导式/PEP 695/下标删除/import *)、socketI/O、若干缺模块、3 个编译器 cell/free panic 用例、tb_next链、 fs/io 其余面(台账卷 05 的 round 22–30 节;技术落点见docs/PLAN-milestones.md§6「M6 的要求」) - 缺口:规格内已无未写小节(原先两处——
SPEC-bytecode.md的"超出 §10 的指令"与SPEC-c-modules.md的"逐模块合约表"——均已落地:前者为按需流程、后者为维护中的表);PLAN-milestones.md§10 里的 harness 实现与基线语料下限也均已落地, 余下只有 M6 的可执行判据已由cargo test -p pyawa-abi --test conformance承担(M3 判据① 477/628 = 76.0% ✓ 仪器tools/lib_import_ratio.py;判据② 已裁定达成 ✓ 仪器tools/corpus_coverage.py)。这是v0的既定含义
冲突时的优先级:REQUIREMENTS.md(决策)> SPEC-*.md(执行细则)> DESIGN.md(架构论证)。
跨文档引用只写编号、禁止重述内容,规则见 SPEC-INDEX.md §2。
文档清单(文件、范围、ID 前缀、状态)唯一出处为 docs/SPEC-INDEX.md §1,本文件不重述。
本文件只报完成度:共 13 份,已写 13 份 / 待写 0 份(含非规范的逐轮台账 ROUNDS.md)。
AGENTS.md 给 AI agent 的边界(每次任务都守)+ 细则索引
agents-rules/ 不常发生的细则:commit-rule.md / branch-rule.md / docs-rule.md
docs/ 文档集(13 份,全部平铺:引用以文件名 + 编号为准)
docs/rounds/ 逐轮台账分卷(**非规范**、只增不改;索引见 `docs/ROUNDS.md`)
crates/ Rust 工作区:pyawa-core / capabilities / abi / stdlib / runtime
tests/ conformance/(与 CPython 对拍)· ci/(不变量静态检查)
tools/ LSP、调试器、profiler(M6 后)
Lib/ CPython 3.14 纯 Python 标准库,逐字同步、禁止本地修改(M3 起引入)
main是主干,只接受合并:改动先提交在工作分支dev(需要并行时再从dev开dev/<主题>)- 合并一律
--no-ff,必须留下合并提交——合并提交是"这批改动是什么、何时进来"的唯一痕迹; 快进合并会让工作分支白建,也让main的历史失去阶段边界。仓库已设merge.ff = false, 因此git merge dev默认即留痕 - 合并提交的说明写清这批改动的范围与落点(工作分支上的提交号),便于日后定位
git checkout main && git merge --no-ff dev -m "Merge branch 'dev': <这批改动是什么>"
git checkout dev四条架构不变量唯一出处为 docs/DESIGN.md §3(不变量 1–4):违反其中任何一条都需要推翻重来。
本文件不重述其内容。
未决项按"什么时候必须定"分档,唯一出处为 docs/DESIGN.md §13。
- A 档(动手前必须定):只剩
§13-10的两个细项(MS-9规范化容差、MS-13基线语料下限), 要等首次对拍才有事实 - B 档(公开第一个 ABI 之前拍板):已清空——原 3 项(
§13-1/§13-4/§13-17)全部已决 - C 档(可边做边定):
§13-11(是否需要 WASM 目标)、§13-12(扩展特性清单为空—— 机制先于特性,有意如此)
⇒ 目前没有卡开工的未决项。