|
3 | 3 | > 本文件追踪 `mcpp-community/mcpp` 公开仓的版本演进。 |
4 | 4 | > 格式参考 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/)。 |
5 | 5 |
|
| 6 | +## [0.0.2] — 2026-05-09 |
| 7 | + |
| 8 | +第二个公开版本。新增 C 语言一等公民支持、xpkg 风格依赖命名空间,以及包管理子系统骨架重构。 |
| 9 | + |
| 10 | +### 新增 |
| 11 | + |
| 12 | +- ✅ **C 语言源文件支持** — `mcpp.toml` 的 `[build]` 段新增 `cflags`、 |
| 13 | + `cxxflags`、`c_standard` 三个字段;ninja 后端探测 `.c` 源文件后自动派 |
| 14 | + 生兄弟 C 编译器(`g++ → gcc`、`clang++ → clang`、跨编译器前缀如 |
| 15 | + `x86_64-linux-musl-gcc` 同样适用),发出独立的 `c_object` 规则。 |
| 16 | + 按文件扩展名分发:`.cppm → cxx_module`、`.c → c_object`、其它 → |
| 17 | + `cxx_object`;dyndep / 模块扫描自动跳过 `.c`。**实测可直接编译 |
| 18 | + mbedtls 3.6.1 全部 108 个 `.c` 源文件**(SHA-256 测试向量与 FIPS |
| 19 | + 180-4 一致)。 |
| 20 | + |
| 21 | +- ✅ **xpkg 风格依赖命名空间** — `mcpp.toml` 现在原生支持三种依赖书写形式: |
| 22 | + - 平铺默认命名空间:`gtest = "1.15.2"` ⇒ `(mcpp, gtest)`,无引号 |
| 23 | + - TOML 子表命名空间:`[dependencies.mcpplibs] cmdline = "0.0.2"` ⇒ |
| 24 | + `(mcpplibs, cmdline)`,无引号 |
| 25 | + - 老式带点字符串(向后兼容):`"mcpplibs.cmdline" = "0.0.2"` 仍能解析 |
| 26 | + - CLI 同步:`mcpp add mcpplibs:cmdline@0.0.2` 接受 `<ns>:<name>` |
| 27 | + 冒号分隔形式,写出仍是子表写法 |
| 28 | + - 解析层在 `DependencySpec` 增加 `namespace_` + `shortName` 结构化 |
| 29 | + 字段,fetcher / lockfile / cache 等下层逻辑沿用现有完全限定 key。 |
| 30 | + |
| 31 | +### 改进 |
| 32 | + |
| 33 | +- 🛠 **`src/pm/` 包管理子系统(7 步重构,全部完成)** — 包管理相关代码 |
| 34 | + 从 `cli.cppm`(3510→2900 行) / `manifest.cppm` / `lockfile.cppm` / |
| 35 | + `fetcher.cppm` / `publish/xpkg_emit.cppm` 中抽出,集中到独立的 |
| 36 | + `src/pm/` 目录下,跟 `build/` / `toolchain/` / `pack/` 平级。 |
| 37 | + 最终 8 个内部模块: |
| 38 | + - `pm/pm.cppm`(子系统门面,re-export 数据类型) |
| 39 | + - `pm/dep_spec.cppm` — `DependencySpec` + `kDefaultNamespace` |
| 40 | + - `pm/index_spec.cppm` — 占位,等索引仓配置实现 |
| 41 | + - `pm/lock_io.cppm` — `mcpp.lock` IO |
| 42 | + - `pm/package_fetcher.cppm` — xlings NDJSON 客户端 |
| 43 | + - `pm/resolver.cppm` — `resolve_semver` + `is_version_constraint` |
| 44 | + - `pm/commands.cppm` — `cmd_add` / `cmd_remove` / `cmd_update` |
| 45 | + - `pm/publisher.cppm` — `emit_xpkg` + tarball / sha256 / release helpers |
| 46 | + |
| 47 | + 整个重构严格保持**零行为变更**:每一步独立 PR、独立 CI 通过、独立可 |
| 48 | + 回滚;旧模块名(`mcpp.lockfile` / `mcpp.fetcher` / `mcpp.publish.xpkg_emit`) |
| 49 | + 保留薄 shim 透传到新模块,所有调用点零改动。规划与依赖图见 |
| 50 | + `.agents/docs/2026-05-08-pm-subsystem-architecture.md` §3-§5。 |
| 51 | +- 📄 **新增设计文档** `.agents/docs/`: |
| 52 | + - `2026-05-08-package-index-config.md` — 多源包索引仓配置 + |
| 53 | + `mcpp.lock` 索引 commit 锁定 + 两层不可变性 |
| 54 | + (L1 publish policy + L2 lock mechanism) |
| 55 | + - `2026-05-08-pm-subsystem-architecture.md` — 包管理子系统目标布局 |
| 56 | + 与 7 步落地计划 |
| 57 | + |
| 58 | +### 修复 |
| 59 | + |
| 60 | +- 🐛 path 依赖的 `[package].name` 比对支持 xpkg 标准 `name` + 旧式 |
| 61 | + `<ns>.<name>` 复合名两种形式,兼容当前 mcpp-index 描述符尚未迁移的 |
| 62 | + 状态。 |
| 63 | + |
| 64 | +### 兼容性 |
| 65 | + |
| 66 | +向后兼容。老的 `mcpp.toml` / `mcpp.lock` 不需要任何改动即可在 0.0.2 下 |
| 67 | +继续工作。带引号的 `"ns.name"` 形式继续被解析,只是新写出的 `mcpp add` |
| 68 | +会用无引号的子表形式。 |
| 69 | + |
6 | 70 | ## [0.0.1] — 2026-05-07 |
7 | 71 |
|
8 | 72 | mcpp 首个公开发版本。 |
|
0 commit comments