|
5 | 5 |
|
6 | 6 | ## [2026.9.28.1] - 2026-09-28 |
7 | 7 |
|
8 | | -### 缺陷修复(#726) |
| 8 | +本版本合入 #717、#718、#720、#722、#723、#724、#725 与 #726 的修复与特性。设计与实施记录见 |
| 9 | +`.agents/docs/2026-09-27-eight-reports-by-home-and-one-optimisation-plan.md` 与 |
| 10 | +`.agents/docs/2026-09-27-eight-reports-implementation-plan.md`。 |
| 11 | + |
| 12 | +### 缺陷修复 |
| 13 | + |
| 14 | +- **带 `[package]` 的工作空间根的 `path` 依赖(#725)。** 这样到达的成员此前不被识别为成员: |
| 15 | + 2026.9.26.1 忽略其 `[workspace.dependencies]` 中钉住的版本,2026.9.27.1 拒绝其 |
| 16 | + `workspace = true`。现在工作空间的上下文由清单所在的位置决定,这样的成员按 SPEC-004 §9 第 1 条 |
| 17 | + 继承 `[workspace.package]`、`[workspace.build]` 与 `workspace = true`;`[toolchain]`、 |
| 18 | + `[target.<triple>]`、`[indices]` 仍只属于根。 |
| 19 | +- **`-p, --package <NAME>` 按包的身份解析(#725)。** 顺序为限定名、包名,然后是成员的路径或 |
| 20 | + 目录名(此前唯一的写法,保留)。同一个包名在两个命名空间下出现时拒绝并给出两个限定名;一个值 |
| 21 | + 既是某成员的包名又是另一成员的目录名时选择前者并警告。 |
| 22 | +- **宿主模块包的 lib root 参与本包单元的导入排序(#720)。** 导入同包其他单元的 lib root 此前 |
| 23 | + 先于被导入者编译而失败。不导入同包单元的包顺序不变。 |
| 24 | +- **规则认领的设备源不是编译单元(#724)。** 它此前出现在 S1 文档与 `mcpp build` 自己的 |
| 25 | + `compile_commands.json` 中,带一条 C++ 编译命令,`build.ninja` 也带一条无人引用的边。 |
| 26 | +- **构建程序失败时,其诊断得以保留(#724)。** 以构建程序的指令为前提的检查(设备源的认领)不再 |
| 27 | + 对构建程序已失败的包运行,规划失败路径也保留已记录的说明;此前报告的是「设备源无人编译」。 |
| 28 | +- **`emit build-database` 不写入工程目录(#724)。** 声明了 `[xlings]` 载荷的工程此前会得到 |
| 29 | + `.mcpp/.xlings.json`(SPEC-005 R2.1)。 |
| 30 | +- **一个放置目标一份内容、一个写入者(#723)。** 同一目标的多个来源在放置时逐字节核对,相同则 |
| 31 | + 放置一份,不同则失败并点名全部来源;此前在规划时即被拒绝,即使内容相同。链接后放置 DLL 的步骤 |
| 32 | + 不覆盖另一写入者放在程序旁的文件,内容不同时警告(SPEC-007 R4.2、R4.3)。 |
| 33 | +- **要求更新 mcpp 的索引不再报告为错误。** 读取处不再打印 `error: ... [E0006]`;失败的运行在 |
| 34 | + 使其停止的消息中给出 E0006;刷新了索引而遇到下限的运行在最后打印一行 `tip:`,信封中为说明 |
| 35 | + `MCPP_INDEX_REQUIRES_NEWER_MCPP`;`mcpp self doctor` 列出当前 mcpp 不满足其下限的索引。 |
| 36 | +- **Windows 上一次 xlings 调用只作用于 xlings 子进程(#726)。** 此前的 Windows 实现在两处与 |
| 37 | + POSIX 不一致: |
| 38 | + - 每次调用把 registry 的 `subos/default/bin` 加到进程 `PATH` 的最前面,并设置进程级的 |
| 39 | + `XLINGS_HOME`,调用后不恢复。同一次构建安装过载荷后,ninja 与每个动作都先找到 `xim:llvm` |
| 40 | + 注册的 `cl`、`link`、`lib`、`rc` shim,vcpkg 对宿主三元组的编译器检测因此失败。 |
| 41 | + - xlings 在 mcpp 的工作目录中运行,从那里向上找到工程的 `.xlings.json` 而进入工程模式,把 mcpp |
| 42 | + 工具链与载荷的 shim 写进工程的 SubOS。 |
| 43 | + |
| 44 | + 现在 `ScopedInvocationEnv` 在调用期间应用 `XLINGS_HOME`、作用域变量与 `PATH` 前缀并在调用后 |
| 45 | + 全部恢复;命令以 `cd /d "<home>" &&` 开头,与 POSIX 前缀中的 `cd` 相同。 |
| 46 | + |
| 47 | +### 特性 |
| 48 | + |
| 49 | +- **条件化的 `dialect_cxxflags`(#717)。** `[target.<selector>.build] dialect_cxxflags` 在命中的 |
| 50 | + 目标上把参数加入全图的方言参数:标准库 BMI、扫描与每个编译单元。只读取构建的根包;依赖包自己的 |
| 51 | + 全图键不进入其指纹。 |
| 52 | +- **MSVC ABI 的 CRT 模型(#718)。** CRT 是目标 ABI 的性质:cl 以 `/MD`、`/MT`,clang++ 以 |
| 53 | + `-fms-runtime-lib=dll`、`static` 表达同一模型,并到达编译、std BMI 与链接。MSVC ABI 的默认契约为 |
| 54 | + `toolchain-coupled`:动态 CRT,工具集的 `vcruntime140.dll`、`msvcp140.dll` 放到程序旁。 |
| 55 | + `cxx_runtime` 与 `linkage` 之外不增加新键;手写的 CRT 参数与模型一致时提示冗余,矛盾时拒绝。 |
| 56 | +- **构建数据库描述规则生成的文件(#724)。** S1 集合的 `ide.generated` 列出生成的文件与目录、 |
| 57 | + 同一组选择下 `mcpp build` 写入的路径以及生成它的步骤(S1 0.3.0)。命令仍不运行任何 action。 |
| 58 | +- **统一的下载进度。** 工具链与载荷的安装、索引中的库包、`[xlings]` 载荷、索引刷新、`git` 依赖的 |
| 59 | + 克隆与沙箱的首次引导由同一个渲染器报告。标准输出不是终端时,每一项只打印开始与结束两行,不含 |
| 60 | + 回车与擦除序列。索引刷新经 `xlings interface update_packages` 进行,需要 xlings 2026.9.28.1 的 |
| 61 | + 进度事件才逐步显示。 |
9 | 62 |
|
10 | | -**Windows 上一次 xlings 调用只作用于 xlings 子进程。** 此前的 Windows 实现在两处与 POSIX 不一致: |
| 63 | +### 内部 |
11 | 64 |
|
12 | | -- **调用后留下 `PATH` 前缀与 `XLINGS_HOME`。** 每次调用都把 registry 的 `subos/default/bin` 加到 mcpp 进程 `PATH` 的最前面,并设置进程级的 `XLINGS_HOME`,调用后不恢复。 |
13 | | - - 在同一次 `mcpp build` 中安装过工具链或载荷后,ninja 和每个动作都先找到这个目录。 |
14 | | - - 目录中有 `xim:llvm` 在 Windows 上注册的 `cl`、`link`、`lib`、`rc` shim,它们遮住了 MSVC 的同名工具,vcpkg 对宿主三元组的编译器检测因此失败。 |
15 | | - - 第二次构建不再调用 xlings,因而成功。 |
16 | | -- **xlings 在 mcpp 的工作目录中运行。** xlings 从工作目录向上查找 `.xlings.json` 来确定项目模式。项目根目录有 `.xlings.json` 时(例如项目在其中固定了 mcpp 的版本),registry 的 xlings 会进入该项目的模式,把 mcpp 工具链与载荷的 shim 写入该项目的 SubOS。 |
| 65 | +- **`src/build/prepare/` 的阶段函数按其小节拆分(#722)。** 代码逐字移动,不改变语句顺序;七个 |
| 66 | + 夹具的 `resolution.json`、`build.ninja` 与构建数据库输出与拆分前逐字节相同。 |
17 | 67 |
|
18 | | -现在的行为: |
| 68 | +### 兼容性 |
19 | 69 |
|
20 | | -- `ScopedInvocationEnv` 在调用期间应用 `XLINGS_HOME`、作用域变量和 `PATH` 前缀,调用结束后全部恢复。 |
21 | | -- 命令以 `cd /d "<home>" &&` 开头,与 POSIX 前缀中的 `cd` 相同。 |
22 | | -- 一次调用之后的进程环境与调用之前相同,所以安装过载荷的构建与未安装的构建看到同一个环境。 |
| 70 | +- **成员的编译命令可能改变。** 经 `path` 依赖到达、带 `[package]` 的工作空间根的成员,现在收到 |
| 71 | + `[workspace.build]` 与 `[workspace.package]`。 |
| 72 | +- **Windows 上 LLVM 行的程序改用动态 CRT。** 它们现在导入 `vcruntime140.dll` 等,文件放在程序旁; |
| 73 | + 写 `cxx_runtime = "self-contained"` 可恢复静态 CRT。cl 行的编译参数不变,程序旁多出这些 DLL。 |
| 74 | +- **新增三种拒绝。** 每一种都在消息中给出一行修法: |
| 75 | + - 手写的 CRT 参数与解析出的模型矛盾; |
| 76 | + - 在没有 redistributable 目录的行上显式写 `toolchain-coupled`; |
| 77 | + - 在两个命名空间下都有成员的包名上使用 `-p`。 |
| 78 | +- **S1 profile 版本为 0.3.0。** 0.2.0 的消费方忽略新字段。 |
23 | 79 |
|
24 | 80 | ## [2026.9.27.1] - 2026-09-27 |
25 | 81 |
|
|
0 commit comments