docs: 固化扁平 C 源目录合同

This commit is contained in:
pikastech
2026-07-21 13:59:08 +02:00
parent 7d4a0b0af8
commit 5c133ed2ed
@@ -6,7 +6,7 @@
| --- | --- | --- | --- |
| v0.1 | `205e3a70` | 2026-07-21 | 定义 V2 动态子集重写内核的架构原则、能力边界和量化验收合同。 |
| v0.2 | `d72a1f52` | 2026-07-21 | 已批准:明确阶段性 V1 parser 适配器、原子 capability、职责化实现命名、候选内核比较和 cold/warm benchmark 生命周期。 |
| v0.3 | `待追溯` | 2026-07-21 | 已批准:增加语法能力组 TDD、CPython 逐字节脚本回归严格 ISO C99 硬门禁。 |
| v0.3 | `待追溯` | 2026-07-21 | 已批准:增加语法能力组 TDD、CPython 逐字节脚本回归严格 ISO C99 硬门禁和扁平 C 源目录合同。 |
修改历史只记录规格语义变更,不记录实现进度、阶段基线或一次性证据。
@@ -68,6 +68,7 @@ V2 的目标是:
- C 模块绑定、平台抽象和可预测错误合同。
- 实现文件和代码标识符的职责化命名合同。
- 项目自有 C 源码的严格 ISO C99 编译合同。
- 项目自有 C 源码和头文件在单一 `src/` 目录中的扁平集成合同。
- 分层内部测试和与 CPython 逐字节对照的脚本回归。
- Linux 快速性能裁决及真实 Cortex-M、RV32 目标的功能、性能、Flash 和 RAM 确认。
@@ -505,6 +506,26 @@ V2 作为路线和规格称谓,不得进入实现仓库的文件名或项目
- 构建系统配置和实际编译命令必须同时验证,任一编译单元偏离即构建失败;
- C++ 仅可用于主机测试和 benchmark harness,不得成为目标 runtime 或 C ABI 的依赖。
### 6.13 V2-L1-REQ-013 扁平 C 源目录
| 编号 | 短名 | 主责模块 | 关联模块 |
| --- | --- | --- | --- |
| V2-L1-REQ-013 | 扁平源码 | PJ2026-050104 裁剪移植 | PJ2026-050101 语言编译、PJ2026-050102 VM执行、PJ2026-050103 对象内存 |
版本控制内全部项目自有 `.c``.h` 文件必须直接平铺在单一 `src/` 目录中:
- 不设置独立 `include/` 目录;
- 不按 parser、VM、runtime 或平台职责建立存放 `.c``.h` 的子目录;
- 文件职责通过职责化文件名表达;
- 公开头文件和内部头文件通过构建及打包清单区分,不通过物理目录区分;
- 嵌入式项目必须能够把 `src/` 作为唯一项目头文件搜索目录;
- 包管理器必须能够从同一目录枚举待集成源码和公开头文件。
以下对象不属于项目自有 C 源码平铺范围:
- 明确隔离的第三方 vendored 文件;
- 构建目录内生成且不进入版本控制的 C 中间产物。
## 7. 验收合同
### 7.1 语义验收
@@ -616,7 +637,14 @@ V2 作为路线和规格称谓,不得进入实现仓库的文件名或项目
- 配置阶段必须断言 C 标准为 99 且扩展关闭;
- 编译命令清单必须证明全部项目自有 `.c` 文件使用严格 C99 方言和 `-pedantic-errors`
- 默认构建和显式候选构建都必须通过同一 C99 合同检查;
- 任意 GNU extension、C11 语法或漏检 C 编译单元都必须使测试失败。
- 任意 GNU 扩展、C11 语法或漏检 C 编译单元都必须使测试失败。
### 7.8 C 源目录验收
- 版本控制内项目自有 `.c``.h` 文件必须全部是 `src/` 的直接子项;
- 仓库不得存在项目自有 `include/` 目录;
- 构建和打包清单必须从 `src/` 显式选择源码与公开头文件;
- 使用者只增加 `src/` 头文件搜索路径即可构建受支持的内核配置。
## 8. 过程控制