|
| 1 | +# 1130: 将 tree_observer / tree_patch / tree_modify / tree_traverse 迁移到 moebius |
| 2 | + |
| 3 | +## 目标 |
| 4 | +将 `src/Data/Tree` 下的 `tree_observer`、`tree_patch`、`tree_modify`、`tree_traverse` |
| 5 | +四对头文件/实现文件迁移到 `moebius/Data/Tree`,使其作为 moebius 库的一部分编译。 |
| 6 | + |
| 7 | +## 背景 |
| 8 | +moebius 是 Mogan 的基础 C++ 库,已包含 `tree`、`modification`、`observer`、`patch`、`drd`、`scheme` 等核心抽象。 |
| 9 | +上述模块均直接依赖这些基础类型,天然适合放入 moebius。 |
| 10 | +迁移后上层代码仍通过同样的公开头文件使用这些接口。 |
| 11 | + |
| 12 | +## 完成记录 |
| 13 | +1. 将 `tree_observer.hpp`/`tree_observer.cpp` 从 `src/Data/Tree` 移动到 `moebius/Data/Tree`。 |
| 14 | +2. 将 `tree_patch.hpp`/`tree_patch.cpp` 从 `src/Data/Tree` 移动到 `moebius/Data/Tree`。 |
| 15 | +3. 将 `tree_modify.hpp`/`tree_modify.cpp` 从 `src/Data/Tree` 移动到 `moebius/Data/Tree`。 |
| 16 | +4. 将 `tree_traverse.hpp`/`tree_traverse.cpp` 从 `src/Data/Tree` 移动到 `moebius/Data/Tree`。 |
| 17 | +5. 由于 `tree_observer.cpp`/`tree_modify.cpp` 包含 `observers.hpp`,而该头文件原位于 `src/Data/Observers`, |
| 18 | + 为保持 moebius 不自依赖 src,将 `observers.hpp` 移动到 `moebius/Kernel/Abstractions`。 |
| 19 | + 其实现文件(`ip_observer.cpp`、`list_observer.cpp` 等)仍保留在 src,通过 libmoebius 的公开 include 路径引用新头文件。 |
| 20 | +6. 在 `tree_observer.cpp` 中替换对 `src/Texmacs/tm_debug.hpp` 的依赖: |
| 21 | + - `failed_error` 改为 `cerr`; |
| 22 | + - 显式包含 `basic.hpp` 以获得 `TM_FAILED`。 |
| 23 | +7. 将本次迁移模块暴露给 Scheme 的 glue 函数从 `glue_tree.lua` / `glue_patch.lua` |
| 24 | + 迁移到 `src/Scheme/L3/glue_moebius.lua`: |
| 25 | + - 从 `glue_tree.lua` 迁移:tree 修改/遍历相关函数(如 `tree-ip`、`tree-assign`、 |
| 26 | + `tree-var-insert`、`tree-remove`、`tree-split`、`tree-join`、`tree-assign-node`、 |
| 27 | + `tree-insert-node`、`tree-remove-node`、`tree-simplify`、`cpp-tree-correct-node`、 |
| 28 | + `cpp-tree-correct-downwards`、`cpp-tree-correct-upwards`、各类 `path-*`、`tree-search-sections`、 |
| 29 | + `herk-tree->utf8-tree`、`utf8-tree->herk-tree` 等)。 |
| 30 | + - 从 `glue_patch.lua` 迁移:`patch-apply`、`patch-inplace-apply`。 |
| 31 | + - 在 `glue_moebius.lua` 中补充对应 include(`observers.hpp`、`tree_modify.hpp`、 |
| 32 | + `tree_observer.hpp`、`tree_patch.hpp`、`tree_traverse.hpp`、`tree_helper.hpp`、 |
| 33 | + `object_l3.hpp` 等)。 |
| 34 | +8. 调整 glue helper 文件: |
| 35 | + - 将 `tree_assign`、`tree_insert`、`tree_remove`、`tree_split`、`tree_join`、 |
| 36 | + `tree_assign_node`、`tree_insert_node`、`tree_remove_node`、`var_clean_apply`、 |
| 37 | + `var_apply` 从 `glue_tree_extra.hpp` / `glue_patch_extra.hpp` 移至 |
| 38 | + `src/Scheme/L3/glue_moebius_extra.hpp`。 |
| 39 | + - 从 `glue_tree_extra.hpp` / `glue_patch_extra.hpp` 中移除已迁移的 helper 及多余 include。 |
| 40 | +9. 运行 `gf fmt` 格式化迁移后的 C++ 文件。 |
| 41 | +10. 构建验证: |
| 42 | + - `xmake b libmoebius` 成功 |
| 43 | + - `xmake b libmogan` 成功 |
| 44 | + - `xmake b stem` 成功 |
| 45 | +10. 测试验证: |
| 46 | + - `xmake test`:moebius 单元测试全部通过 |
| 47 | + - `xmake run 0138`:headless 启动测试正常完成并自动退出,3 checks passed, 0 failed |
| 48 | + |
| 49 | +## 涉及文件 |
| 50 | +- `moebius/Data/Tree/tree_observer.hpp`(新增,从 src 迁移) |
| 51 | +- `moebius/Data/Tree/tree_observer.cpp`(新增,从 src 迁移) |
| 52 | +- `moebius/Data/Tree/tree_patch.hpp`(新增,从 src 迁移) |
| 53 | +- `moebius/Data/Tree/tree_patch.cpp`(新增,从 src 迁移) |
| 54 | +- `moebius/Data/Tree/tree_modify.hpp`(新增,从 src 迁移) |
| 55 | +- `moebius/Data/Tree/tree_modify.cpp`(新增,从 src 迁移) |
| 56 | +- `moebius/Data/Tree/tree_traverse.hpp`(新增,从 src 迁移) |
| 57 | +- `moebius/Data/Tree/tree_traverse.cpp`(新增,从 src 迁移) |
| 58 | +- `moebius/Kernel/Abstractions/observers.hpp`(新增,从 src 迁移) |
| 59 | +- `src/Data/Tree/tree_observer.hpp`(删除) |
| 60 | +- `src/Data/Tree/tree_observer.cpp`(删除) |
| 61 | +- `src/Data/Tree/tree_patch.hpp`(删除) |
| 62 | +- `src/Data/Tree/tree_patch.cpp`(删除) |
| 63 | +- `src/Data/Tree/tree_modify.hpp`(删除) |
| 64 | +- `src/Data/Tree/tree_modify.cpp`(删除) |
| 65 | +- `src/Data/Tree/tree_traverse.hpp`(删除) |
| 66 | +- `src/Data/Tree/tree_traverse.cpp`(删除) |
| 67 | +- `src/Data/Observers/observers.hpp`(删除) |
| 68 | +- `src/Scheme/L3/glue_moebius.lua`(新增 glue 函数及 include) |
| 69 | +- `src/Scheme/L4/glue_tree.lua`(移除已迁移的 glue 函数及 include) |
| 70 | +- `src/Scheme/L3/glue_patch.lua`(移除已迁移的 glue 函数及 include) |
| 71 | +- `src/Scheme/L3/glue_moebius_extra.hpp`(新增 helper 函数) |
| 72 | +- `src/Scheme/L4/glue_tree_extra.hpp`(移除已迁移 helper) |
| 73 | +- `src/Scheme/L3/glue_patch_extra.hpp`(移除已迁移 helper) |
| 74 | +- `devel/1130.md` |
0 commit comments