Python 3.14 编译为原生代码 - 无解释器
pon 是一个针对 Python 3.14 的 JIT 和 AoT 原生编译器及运行时,使用 Rust 编写。没有解释器,没有字节码:每个模块都通过 ruff 解析器解析,降低为一个共享的中间表示 (IR),并通过 Cranelift 编译为机器代码 - 可以在进程内部即时执行 (pon run),也可以预编译为独立的本地可执行文件 (pon build)。内存由 Green Tea 垃圾收集器管理,而不是引用计数,正确性通过与 CPython v3.14.0 的字节精确差异测试进行强制验证。最终目标是 Python 的 bun/v8:一个通过 CPython 测试套件,远超 CPython 运行多层 JIT,提供单个二进制可执行文件,并带有现成的工具 (包管理器、工具) 的运行时。该项目处于重度活跃开发中 - 请查看状态了解当前的真实情况与未来的发展。快速入门 # JIT: 解析 → IR → Cranelift → 运行,进程内 printf ' def add(a, b):\n return a + b\n\nprint("hello, world")\nprint(add(2, 3))\n ' > hello.py cargo run -p pon -- run hello.py # AoT: 通过 cranelift-object 生成相同的 IR,链接到本地可执行文件 cargo run -p pon -- build hello.py -o hello ./hello 两种方式都打印与 CPython 相同的字节。这个特性并不是期望,而是符合性测试套件的退出门槛 (见符合性)。 pon run <file> [args] pon build <file> -o <out> [--allow-dynamic] [--opt] [--target <triple>] pon repl pon -c 'print(40 + 2)' pon - < script.py 架构 一个 IR,两个后端,一个运行时 ABI。每个层次 - 基线 JIT,优化 JIT 和 AoT - 都降低相同的 IR,并调用相同的 pon_* 辅助函数:source.py │ ruff 解析器 (固定版本 0.14.0, PythonVersion::PY314) AST ──> PON IR (pon-ir,针对每个层次的唯一 IR) │ ├── pon run: pon-codegen ──> cranelift-jit ──> 进程中的本地代码 │ tier-0 基线 (所有装箱) │ tier-1 类型化:内联缓存,OSR,后台编译 │ └── pon build: pon-codegen ──> cranelift-object ──> 物件文件 ──> 链接的可执行文件 │ pon-runtime (对象模型,内置,NULL 哨兵 pon_* ABI) pon-gc (Green Tea 垃圾收集器) 对象模型:CPython 的堆对象布局,去掉引用计数头。错误通过 ABI 作为 NULL 哨兵跨越,而不是展开。整数为任意精度 (num-bigint 在 PyLong 后面);一个标记的小整型快速路径正在输入类型化层。分层:tier-0 编译所有装箱,没有类型反馈,并作为正确性基线 (PON_TIER0_ONLY=1 强制执行)。运行时辅助函数从第一次执行的反馈单元提供类型信息;热门函数在后台线程上重新编译,正在运行的循环通过堆栈替换进入优化代码。 GC:Green Tea 收集器拥有所有 Python 对象。Tier-0 使用保守的堆栈扫描,在安全点处使用寄存器刷新跳板;类型化层升级到精确的 Cranelift 用户堆栈映射。工作区 装箱角色 pon-ir 基于 ruff 的前端:解析 Python 3.14,降低为共享 PON IR pon-codegen IR → Cranelift CLIF,每个后端和层次共享 pon-jit 进程内编译,分层,内联缓存,OSR,后台编译 pon-aot cranelift-object 后端:对象文件和链接的本地可执行文件 pon-runtime 对象模型,内置,标准库本地模块,pon_* 辅助 ABI pon-gc Green Tea 垃圾收集器 pon-abi 代码生成和运行时之间共享的 ABI 类型 pon 这个 pon 二进制:运行 / 构建 / REPL 入口点 + 包管理器 (索引客户端,解析器,wheel/sdist 安装) pon-conformance 差异符合性套件,模糊测试,基准测试,底线保持 所有依赖项都在根 Cargo.toml 中的 [workspace.dependencies] 部分声明一次;成员箱只继承 (见 AGENTS.md)。符合性 & 测试 正确性合同是差异性的:一个模块只有在 pon 产生与 CPython v3.14.0 (TZ=UTC,PYTHONHASHSEED=0) 字节完全匹配的输出时才会通过。通过的集合会被计入已确认的底线文件,CI 在任何低于底线的回归上失败。 套件 测量内容 确认的底线 CPython 模块,JIT,与 CPython 3.14 字节完全相同 244 个模块 (conformance-floor.json) cpython-aot-subset 相同模块,编译 AoT 并作为本地二进制执行 206 个模块 (aot-parity-floor.json) cpython-full CPython 自己的测试套件 (Lib/test),在 pon 启动时运行 (conformance-full-floor.json) fuzz 与 CPython 的差异模糊测试;必须保持零偏差 - ft-stress 在默认运行时的无 GIL/线程压力测试 - 门控制脚本为 scripts/gate.sh;只有它的输出才视为门声明: bash scripts/gate.sh fast # 构建 + 工作区测试 + 符合性底线 + AoT 底线 + ft-stress bash scripts/gate.sh full # + cpython-full,基准,tier0-only diff,fuzz,包管理器 E2E # 单个计量器 cargo run -q -p pon-conformance -- --suite cpython --check-floor cargo run -q -p pon-conformance -- --mode aot --suite cpython-aot-subset --check-floor cargo run -q -p pon-conformance -- --suite cpython --modules < file.py > # 一个模块,差异性 c
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡