# PJ2026-05 PikaPython 总规格

## 修改历史

| 版本 | 对应 commit id | 更新日期 | 变更说明 |
| --- | --- | --- | --- |
| v0.1 | `205e3a70` | 2026-07-21 | 创建 PikaPython 双路线战略、系统边界和全局验收规格。 |
| v0.2 | `d72a1f52` | 2026-07-21 | 已批准：明确 V2 重写优先、阶段性 parser 适配器、原子 capability、职责化实现命名和冷/热 benchmark 生命周期。 |

修改历史只记录规格语义变更，不记录实现进度、阶段基线或一次性证据。

v0.2 及其引用的 PIKA-CAP v0.1 已批准生效，作为当前实现合同。

## 正文

## PJ2026-05 PikaPython 总项目需求规格

## 1. 文档控制

| 字段 | 内容 |
| --- | --- |
| 编号 | PJ2026-05 |
| 短名 | PikaPython |
| 层级 | L0 总项目 |
| 规格状态 | 已生效 |
| 当前生效版本 | v0.2 |
| 实现引用版本 | v0.2 |
| 需求规格模板 | [ISO/IEC/IEEE 29148 需求规格模板](../../templates/iso-iec-ieee-29148-requirements-spec-template.md) |

本文采用 ISO/IEC/IEEE 29148 需求规格模板的项目裁剪版。

本文的正文边界如下：

- 只定义预期终态、稳定使命、路线边界、原子需求和验收契约；
- 当前实现状态和阶段差距进入 TaskTree 或阶段报告；
- 提交、PR、benchmark 作业和日志进入执行 issue，不进入本规格正文。

## 2. 目的和范围

### 2.1 项目使命

PikaPython 面向资源受限微控制器提供可裁剪的 Python 运行能力：

- 应用在受控 Flash 和 RAM 预算内运行；
- 应用可以选择足够的 Python 语法、模块和本地扩展能力；
- 运行时性能和确定性与功能范围共同参与设计裁决。

项目采用两条互相隔离、可独立验收的技术路线：

- V2 内核路线：
  - 重写 V1 路线的动态 Python 子集内核；
  - 从第一版开始以运行时性能、Flash 和 RAM 为核心设计输入；
  - 允许语法兼容性弱于 MicroPython；
  - 延续并强化 V1 的编译期和构建期裁剪能力；
  - 允许以主机侧、阶段性的 V1 parser 适配器引导前端，但长期合同必须是 V2 中性类型化 IR；
  - 使用原子 capability、显式依赖图和命名 profile 组织能力，不把语法能力建模为单一直线等级；
  - 每个 profile 独立满足语义、性能和资源合同，较大能力闭包不得掩盖最小配置退化。
- 静态加速路线：
  - 面向显式静态约束或编译加速场景独立演进；
  - 不作为 V2 的依赖、兼容层、发布判定前提或架构前提；
  - strict type、LLVM 或其他静态编译技术只能在该路线的独立规格中决策。

### 2.2 预期终态

PikaPython 应形成一个可持续演进的嵌入式 Python 产品族：

- V1 保持已有用户、语法、模块和板级生态的稳定交付；
- V2 以重新设计的内核显著超越 V1，并在能力等价的代表性运行时负载上相对 MicroPython 形成可解释的 Pareto 优势；
- 静态加速路线面向适合编译期约束的代码提供独立加速能力；
- 两条新路线共享 capability 语义、可比较配置、benchmark 方法和板级接口原则，但不共享必须同步演进的内核架构；
- 所有路线都能对不支持的语法、资源耗尽和运行时错误给出清晰、确定且可测试的结果。

### 2.3 范围内

- Python 子集的解析、编译、字节码或其他执行表示。
- VM、对象模型、调用约定、内存管理、异常和模块系统。
- C 模块绑定、平台移植和微控制器资源裁剪。
- capability 依赖、命名 profile 和跨实现能力等价比较。
- Linux 功能、性能与资源基线，以及目标架构功能和资源验证。
- V1、V2、MicroPython 和适用静态实现的版本化比较。

### 2.4 范围外

- 以完整 CPython 兼容性作为嵌入式内核的首要目标。
- 为追求语法数量而牺牲资源边界、错误可见性或可裁剪性。
- 用 QEMU 性能数据替代 Linux 性能裁决。
- 把静态类型、LLVM、JIT 或目标相关 native emitter 设为 V2 必需能力。
- 要求 V2 复用 V1 的内部对象布局、字节码、调用栈或源码架构。
- 把 V1 parser 或 MicroPython fork 设为 V2 目标运行时的长期依赖。

## 3. 术语表

| 术语 | 定义 |
| --- | --- |
| V1 | 已交付的 PikaPython 内核和兼容生态。 |
| V2 | 重新设计和实现的动态 Python 子集内核，不表示 V1 内部架构的第二版补丁。 |
| 静态加速 | 依赖显式静态约束或编译期类型事实的独立执行路线。 |
| 可裁剪性 | 在构建期按语法、opcode、对象类型、模块和平台能力移除不需要代码与数据的能力。 |
| 可比较配置 | 为各实现选择相同 workload 所需语义和模块后的最小可运行配置。 |
| capability | 可独立标识、声明依赖、测试语义和报告资源成本的语言或 runtime 能力。 |
| profile | 有稳定名称和产品意图的 capability 根集合，不表示线性兼容等级。 |
| 能力等价配置 | 所需 capability 闭包和被测语义一致，并只启用 workload 必需平台模块的配置。 |
| 代表性 suite | 覆盖产品 profile 真实使用路径的版本化 benchmark 集合；不等同于单一内核上限测试。 |

## 4. 系统边界和接口

| 边界项 | 内容 |
| --- | --- |
| 外部使用者 | 嵌入式应用开发者、模块开发者、移植维护者和自动化构建系统。 |
| 外部输入 | Python 源码或预编译产物、C 模块、构建裁剪配置、平台端口和资源预算。 |
| 受控资源 | 解析器、编译器、执行内核、对象与堆、模块注册表、平台抽象和生成产物。 |
| 外部输出 | 可执行固件或库、字节码、运行结果、异常、资源报告和 benchmark 报告。 |
| 用户接口 | Python 子集、C API、模块绑定、构建配置和 workspace CLI。 |
| 系统边界 | PikaPython 负责语言子集和运行时语义，不替代板级操作系统、驱动、工具链或应用资源规划。 |

## 5. 路线分工与规格索引

| 编号 | 路线 | 规格文档 | 主责边界 | 上游依赖 | 下游支撑 |
| --- | --- | --- | --- | --- | --- |
| PJ2026-0501 | V2内核 | [PJ2026-0501 V2内核](PJ2026-0501-v2-kernel.md) | 动态 Python 子集、紧凑 VM、对象模型、资源裁剪和 V1 演进替代能力。 | V1 用户语义、嵌入式平台约束、先进 VM 技术。 | 新应用、V1 迁移、模块与板级生态。 |
| PJ2026-0502 | 静态加速 | [PJ2026-0502 静态加速](PJ2026-0502-static-acceleration.md) | 显式静态约束下的独立编译和执行加速。 | 静态语义契约、编译工具链。 | 计算密集且可静态化的函数或模块。 |

### 5.1 共享规格

| 规格编号 | 短名 | 规格文档 | 适用范围 |
| --- | --- | --- | --- |
| PIKA-CAP | 能力配置档 | [PikaPython 能力与配置档](pikapython-capability-profiles.md) | V1、V2、静态加速及后续内核。 |

### 5.2 目标路线关系

```mermaid
flowchart LR
  APP[嵌入式 Python 应用] --> V1[V1 稳定交付]
  APP --> V2[V2 动态子集内核]
  APP -. 显式选择 .-> S[静态加速路线]
  V1 -->|行为经验与迁移需求| V2
  V2 -. 不依赖 .-> S
  S -. 不约束 .-> V2
  V2 --> MCU[微控制器运行面]
  S --> MCU
```

## 6. 全局原子需求

### 6.1 PIKA-L0-REQ-001 双路线隔离

| 编号 | 短名 | 主责模块 | 关联模块 |
| --- | --- | --- | --- |
| PIKA-L0-REQ-001 | 路线隔离 | [PJ2026-0501 V2内核](PJ2026-0501-v2-kernel.md) | [PJ2026-0502 静态加速](PJ2026-0502-static-acceleration.md) |

V2 和静态加速必须保持以下隔离：

- 分别声明语言前提、内核架构、性能结论和发布适用范围；
- 任一路线的实验失败不得阻塞另一条路线；
- 任一路线的工具链限制或语法要求不得进入另一条路线。

### 6.2 PIKA-L0-REQ-002 嵌入式优先

| 编号 | 短名 | 主责模块 | 关联模块 |
| --- | --- | --- | --- |
| PIKA-L0-REQ-002 | 嵌入式优先 | [PJ2026-0501 V2内核](PJ2026-0501-v2-kernel.md) | [PJ2026-0502 静态加速](PJ2026-0502-static-acceleration.md) |

嵌入式优先要求如下：

- 语言能力、数据布局、调度机制和模块边界必须考虑 Flash、RAM 和栈限制；
- 确定性限制必须参与内核结构裁决；
- 新增语法或模块不得默认进入最小配置。

### 6.3 PIKA-L0-REQ-003 可重复比较

| 编号 | 短名 | 主责模块 | 关联模块 |
| --- | --- | --- | --- |
| PIKA-L0-REQ-003 | 版本比较 | [PJ2026-0501 V2内核](PJ2026-0501-v2-kernel.md) | [PJ2026-0502 静态加速](PJ2026-0502-static-acceleration.md) |

性能主张必须满足以下条件：

- 使用版本固定、配置可见、一次性容器运行的 Linux benchmark；
- Linux 原生执行是快速主裁决环境；涉及 MCU 发布主张时，必须在对应真实 Cortex-M 或 RV32 目标上复核；
- QEMU 只用于功能、Flash 和静态 RAM 验证，不参与性能结论；
- benchmark 必须区分内核上限、动态能力等价、产品代表性和静态加速对照四类 suite；
- benchmark 必须区分 cold-start 与 warm execution：
  - cold-start 分别报告 runtime 或 root 创建、解析或编译、首次执行和销毁；
  - warm execution 的计时区间只包含已加载或已编译程序的重复执行；
  - 无法分离生命周期阶段的结果必须标记为不可与 warm execution 直接比较；
- 同时披露运行时、Flash、静态 RAM、峰值堆、VM 栈、宿主栈和动态分配；
- 同时披露功能配置、样本数、原始样本、离散度和统计方法；
- allocation、峰值堆和栈数据必须来自 instrumentation；无法测量时报告 unavailable 和原因，不得以手工零值代替；
- Viper 或其他静态实现只属于静态加速对照，不得作为 V2 动态路线的产品基线。

### 6.4 PIKA-L0-REQ-004 错误确定性

| 编号 | 短名 | 主责模块 | 关联模块 |
| --- | --- | --- | --- |
| PIKA-L0-REQ-004 | 错误确定性 | [PJ2026-0501 V2内核](PJ2026-0501-v2-kernel.md) | [PJ2026-0502 静态加速](PJ2026-0502-static-acceleration.md) |

错误确定性要求如下：

- 不支持的语法、非法字节码、类型错误和资源耗尽必须产生明确且可测试的诊断；
- 栈耗尽属于微控制器致命故障时，系统必须先报告清晰原因；
- 报告后进入确定停机状态，不得静默继续、无限解析或未报告崩溃。

### 6.5 PIKA-L0-REQ-005 能力可比性

| 编号 | 短名 | 主责模块 | 关联模块 |
| --- | --- | --- | --- |
| PIKA-L0-REQ-005 | 能力可比性 | [PIKA-CAP 能力配置档](pikapython-capability-profiles.md) | PJ2026-0501、PJ2026-0502 |

路线和实现之间的比较必须以 capability 闭包为基础：

- 每个产物声明所需 capability，runtime 声明提供 capability；
- 比较双方必须使用相同的能力闭包、workload 语义和必要平台模块；
- profile 名称不能替代能力清单，也不能暗示未声明的兼容性；
- 能力差异、模块差异和资源预算差异必须在报告中分别披露。

## 7. 全局验收合同

- 路线验收：
  - V2 不依赖 strict type、LLVM、JIT 或静态加速路线产物即可独立构建、测试和发布；
  - 静态加速路线不得改变 V2 的默认语言语义或资源基线。
- 性能验收：
  - Linux 原生是快速主裁决，真实 Cortex-M 或 RV32 目标用于对应发布主张的确认；
  - 单一 fib、启动时间或 parser 时间只能作为内核上限证据，不能替代动态等价和产品代表性 suite；
  - MicroPython 的 `+5%` 吞吐只作为延伸目标；
  - MicroPython 对照采用能力等价条件下的 Pareto 分析；
  - 性能、Flash、峰值 RAM 至少一项明确领先，其余项不得越过本 profile 的资源预算；
  - 每项结果必须绑定实现版本、提交、编译器、优化级别和可比较配置。
- 资源验收：
  - Flash、静态 RAM、峰值动态 RAM、VM 栈、宿主栈和单次 workload 动态分配必须分别披露；
  - 资源补偿可以发生在同一发布范围的其他模块，但总配置不得通过隐藏功能差异制造优势。

## 8. 过程控制

- V2 内核实现引用 `PJ2026-0501 V2内核 v0.2`。
- V2 的 capability 和 profile 实现引用 `PIKA-CAP v0.1`。
- 静态加速实现引用 `PJ2026-0502 静态加速 v0.1`。
- 稳定需求变化先修改 SPEC，再进入代码或执行 issue。
- 当前状态、阶段 benchmark、PR 和阻塞统一进入 TaskTree、阶段报告或 GitHub issue。
- 新增或修改的手写内核源码应在文件头标注：
  - 适用 SPEC 编号；
  - 短名；
  - 实现引用版本。
- 生成文件、vendored 文件和二进制产物由生成入口追溯 SPEC。
