| 宿主身份 TLS 回调栈: 彻底消除 HostCell 显式定义, 用户零样板 应评审诉求"消除显式定义 hicc::HostCell"。关键观察: 宿主身份只在 C++ 回调(代理 override/析构)的动态作用域内被需要, 而回调进入时代理天然 持有全部所需信息。 - hicc/src/host.rs: HostEntry + thread_local 栈 + hicc_host_push/pop (extern "C") + _hicc_host_find(地址+类名逆序扫描匹配) - export.hpp: HostGuard(RAII), 生成代码在每个代理 override 与析构首行 注入, 回调进出严格配对(含异常展开) - try_host_of 改为扫描 TLS 栈重建宿主句柄; 回调外 try_host() 返回 None (对象移交 C++ 后本只能在回调中触达, 无实际损失) - 净删除: HostCell、_hicc_host_cell 接线方法、set_host 槽位/trampoline、 fname_set_host 尾部占位; 接口 trait 与 Methods 结构零附加 修复槽位访问器模板实例共享缺陷(本轮暴露): export_func<N,M,T> 实例内 函数级 static 首次调用即定型, 宿主/常规访问器共用 <行号,类> 实例时, 先构造的风味表污染后构造者(HostCell 时代因宿主表在代理构造期先建而 侥幸正确; TLS 方案构造顺序反转后 host().f() 无限递归回 Rust)。 宿主槽位访问器改用负行号 export_func 实例, 两风味彻底隔离。 验证: hicc_autogen 63 项单测(含负行号隔离回归用例) + hicc host 单测 + 15 样例全绿; protected_super 输出同名 super/as_base/纯虚 abort 全部正确。 Co-Authored-By: Claude Code <noreply@anthropic.com> | 13 天前 |
| 特性: hicc-bridge 可执行程序更名 hicc-bridge 且头模式仅导出类适配内容 - [[bin]]/GN bin_name 更名为 hicc-bridge(库名/GN 目标标签 hicc_bridge 不变) - generate_cpp_codes(src, header): 头模式仅输出 cpp!/import_class! 及 import_lib 内 #[interface]/#[cpp(class)] 类的类适配内容, 不生成导出表 - hicc-autogen 新增 ImportLib::export_classes(复用 generate_import_classes 重解析流程), ExportLib::export 前两段复用, cpp 模式输出字节不变 - --help 补充头模式过滤说明; 单测 15 个(hicc_bridge)/53 个(hicc_autogen) 通过 | 22 天前 |
| 宿主身份 TLS 回调栈: 彻底消除 HostCell 显式定义, 用户零样板 应评审诉求"消除显式定义 hicc::HostCell"。关键观察: 宿主身份只在 C++ 回调(代理 override/析构)的动态作用域内被需要, 而回调进入时代理天然 持有全部所需信息。 - hicc/src/host.rs: HostEntry + thread_local 栈 + hicc_host_push/pop (extern "C") + _hicc_host_find(地址+类名逆序扫描匹配) - export.hpp: HostGuard(RAII), 生成代码在每个代理 override 与析构首行 注入, 回调进出严格配对(含异常展开) - try_host_of 改为扫描 TLS 栈重建宿主句柄; 回调外 try_host() 返回 None (对象移交 C++ 后本只能在回调中触达, 无实际损失) - 净删除: HostCell、_hicc_host_cell 接线方法、set_host 槽位/trampoline、 fname_set_host 尾部占位; 接口 trait 与 Methods 结构零附加 修复槽位访问器模板实例共享缺陷(本轮暴露): export_func<N,M,T> 实例内 函数级 static 首次调用即定型, 宿主/常规访问器共用 <行号,类> 实例时, 先构造的风味表污染后构造者(HostCell 时代因宿主表在代理构造期先建而 侥幸正确; TLS 方案构造顺序反转后 host().f() 无限递归回 Rust)。 宿主槽位访问器改用负行号 export_func 实例, 两风味彻底隔离。 验证: hicc_autogen 63 项单测(含负行号隔离回归用例) + hicc host 单测 + 15 样例全绿; protected_super 输出同名 super/as_base/纯虚 abort 全部正确。 Co-Authored-By: Claude Code <noreply@anthropic.com> | 13 天前 |
| chore: 版本号提升 patch 号 (hicc 0.2.7, hicc-autogen 0.2.5, hicc-bridge 0.1.1, hicc-std/hicc-build 0.2.4) | 22 天前 |
| chore: 版本号提升 patch 号 (hicc 0.2.7, hicc-autogen 0.2.5, hicc-bridge 0.1.1, hicc-std/hicc-build 0.2.4) | 22 天前 |
| chore: hicc-rs 0.2.2 -> 0.2.3, hicc-cbindgen 0.3.3 -> 0.3.4 同步更新 workspace.dependencies 中的版本号引用(hicc-cbindgen 顺带对齐 0.3.1 -> 0.3.4)。 | 29 天前 |
| 宿主身份 TLS 回调栈: 彻底消除 HostCell 显式定义, 用户零样板 应评审诉求"消除显式定义 hicc::HostCell"。关键观察: 宿主身份只在 C++ 回调(代理 override/析构)的动态作用域内被需要, 而回调进入时代理天然 持有全部所需信息。 - hicc/src/host.rs: HostEntry + thread_local 栈 + hicc_host_push/pop (extern "C") + _hicc_host_find(地址+类名逆序扫描匹配) - export.hpp: HostGuard(RAII), 生成代码在每个代理 override 与析构首行 注入, 回调进出严格配对(含异常展开) - try_host_of 改为扫描 TLS 栈重建宿主句柄; 回调外 try_host() 返回 None (对象移交 C++ 后本只能在回调中触达, 无实际损失) - 净删除: HostCell、_hicc_host_cell 接线方法、set_host 槽位/trampoline、 fname_set_host 尾部占位; 接口 trait 与 Methods 结构零附加 修复槽位访问器模板实例共享缺陷(本轮暴露): export_func<N,M,T> 实例内 函数级 static 首次调用即定型, 宿主/常规访问器共用 <行号,类> 实例时, 先构造的风味表污染后构造者(HostCell 时代因宿主表在代理构造期先建而 侥幸正确; TLS 方案构造顺序反转后 host().f() 无限递归回 Rust)。 宿主槽位访问器改用负行号 export_func 实例, 两风味彻底隔离。 验证: hicc_autogen 63 项单测(含负行号隔离回归用例) + hicc host 单测 + 15 样例全绿; protected_super 输出同名 super/as_base/纯虚 abort 全部正确。 Co-Authored-By: Claude Code <noreply@anthropic.com> | 13 天前 |
| chore: 版本号提升 patch 号 (hicc 0.2.6, hicc-autogen/hicc-macros 0.2.4) | 24 天前 |
| refactor: 多语言输出重构为 LanguageOutput trait,并新增 --no-output/--no-async 将 Builder::generate() 尾部硬编码的多语言输出逻辑(guard 派生、 Cython 伴生 .h、Python 绑定)重构为统一 LanguageOutput trait: - 新模块 output/:OutputLanguage(C/Cxx/Cython/Python,与 cbindgen 解耦)、OutputContext(with_language/with_output/c_header_request 覆盖机制)、LanguageOutput trait、output_for 分派 - cbindgen.rs:C/Cxx/Cython 共用 generate_header 模式(仅参数不同), guard 派生为模块私有;python.rs 独立模块,经 Builder 公开接口 generate_output 跨语言复用取 C header,不依赖其他语言实现 - Builder 只保留 option;新增 generate_output(&ctx) 输出阶段复用 接口(只消费流水线产物,不重跑流水线);generate() 返回 Result<()> - CLI:--no-output(仅与 --rs-output 搭配,抑制所有语言输出)、 -l python 必须带 --lib、parse_language 返回 OutputLanguage async 语义反转:--async 改为 --no-async,默认生成 Python async 接口,设置 --no-async 才生成回调类(block_wait/async_wait)接口; generate_python 改收 &[syn::Item],移除 parse_str 往返。 验证:130 单元 + 4 e2e + 2 集成全绿;basic_lib 的 C/Cython/Python 真实样例 + async 样例语义反转实测通过。 | 1 个月前 |
| chore: 版本号更新 hicc-rs-macros 0.2.3, hicc-cbindgen 0.2.5 | 1 个月前 |
| !110 merge armv7 into ohos fix(hicc-rs): use core::ffi::c_char instead of hardcoded *const i8 Created-by: SparrowLii Commit-by: root Merged-by: hunting Description: fix(hicc-rs): use core::ffi::c_char instead of hardcoded *const i8 See merge request: xuanwu/hicc!110 | 19 天前 |
| CStr非FFI兼容类型 | 19 天前 |
| 宿主身份 TLS 回调栈: 彻底消除 HostCell 显式定义, 用户零样板 应评审诉求"消除显式定义 hicc::HostCell"。关键观察: 宿主身份只在 C++ 回调(代理 override/析构)的动态作用域内被需要, 而回调进入时代理天然 持有全部所需信息。 - hicc/src/host.rs: HostEntry + thread_local 栈 + hicc_host_push/pop (extern "C") + _hicc_host_find(地址+类名逆序扫描匹配) - export.hpp: HostGuard(RAII), 生成代码在每个代理 override 与析构首行 注入, 回调进出严格配对(含异常展开) - try_host_of 改为扫描 TLS 栈重建宿主句柄; 回调外 try_host() 返回 None (对象移交 C++ 后本只能在回调中触达, 无实际损失) - 净删除: HostCell、_hicc_host_cell 接线方法、set_host 槽位/trampoline、 fname_set_host 尾部占位; 接口 trait 与 Methods 结构零附加 修复槽位访问器模板实例共享缺陷(本轮暴露): export_func<N,M,T> 实例内 函数级 static 首次调用即定型, 宿主/常规访问器共用 <行号,类> 实例时, 先构造的风味表污染后构造者(HostCell 时代因宿主表在代理构造期先建而 侥幸正确; TLS 方案构造顺序反转后 host().f() 无限递归回 Rust)。 宿主槽位访问器改用负行号 export_func 实例, 两风味彻底隔离。 验证: hicc_autogen 63 项单测(含负行号隔离回归用例) + hicc host 单测 + 15 样例全绿; protected_super 输出同名 super/as_base/纯虚 abort 全部正确。 Co-Authored-By: Claude Code <noreply@anthropic.com> | 13 天前 |
| chore: 将 hicc-inline 移出代码仓库, 本地保留不删除 取消跟踪 hicc-inline/(Cargo.toml、src/lib.rs、src/main.rs), 加入 .gitignore; 本地文件原样保留. | 25 天前 |
| feat: GN 构建系统整合(gn-build 集中化 + hicc_bridge 自动构建) GN 工程落地与整合,全部构建脚本与源码分离: - 根因修复:原 .gn buildconfig 指向不存在的 //build/BUILD.gn 导致 gn gen 失败;重建为自洽 GN 工程骨架,构建脚本统一集中到根目录 gn-build/ 下 (BUILDCONFIG.gn / 根聚合 / templates / 各 crate 与样例 BUILD.gn), 根 BUILD.gn 仅作 GN 硬约束指向 - hicc-build CLI 可执行程序更名 hicc_bridge(含源文件同步改名),由 GN 构建期自动构建(//gn-build/hicc-build:hicc_bridge),rust_hicc 模板与 hicc-std 头生成自动依赖,无需手动 cargo install;hicc_build_exe 保留为覆盖项 - cargo-as-action:新增 cargo_{exe,static,dynamic}_library 模板与 run_cargo.py (离线 vendor 源替换 + CARGO_HOME 隔离 + cargo json 产物按 crate/扩展名 精确挑选后固定名落盘) - rust_hicc 模板 headers 双形态:headers(缺省命名同 cpp 仅 .hpp)/ headers + header_outputs(等长断言 + 变量索引配对自定义目录与文件名); hicc-std 头文件变换规则(std_string.rs → hicc/std/string.hpp)归位其 BUILD.gn, 删除 gen_std_headers.py - 核心 crate(hicc / hicc-macros / hicc-autogen / hicc-std)与 14 个样例、 gn 示例均可在 gn-build 下构建;hicc-examples:all 一键全量 - fix: class 样例 lib+bin 同包时 bin 链接缺 -l example(rustc-link-arg-bins) - chore: 移除误提交的 gn_build/out 构建产物;.gitignore 忽略 out/ 与 third_party/vendor/(vendor 不入库) - 约定:ninja 构建一律 -j1 串行;py 脚本统一收纳于 gn-build/templates/ (run_hicc_bridge.py / run_cargo.py / gn_run_binary.py 透传 helper) | 26 天前 |
| 特性: hicc-bridge 可执行程序更名 hicc-bridge 且头模式仅导出类适配内容 - [[bin]]/GN bin_name 更名为 hicc-bridge(库名/GN 目标标签 hicc_bridge 不变) - generate_cpp_codes(src, header): 头模式仅输出 cpp!/import_class! 及 import_lib 内 #[interface]/#[cpp(class)] 类的类适配内容, 不生成导出表 - hicc-autogen 新增 ImportLib::export_classes(复用 generate_import_classes 重解析流程), ExportLib::export 前两段复用, cpp 模式输出字节不变 - --help 补充头模式过滤说明; 单测 15 个(hicc_bridge)/53 个(hicc_autogen) 通过 | 22 天前 |
| 支持 Rust 重载 C++ protected 虚函数并调用父类实现 新增 #[cpp(method="...", this|super[="Base"]|protected)] 标记: - this:Rust 重载 C++ protected/public 虚函数时,回调注入 C++ this 句柄,可在回调内访问父类 protected 成员(方法与数据) - super / super="Base":Rust 侧调用父类(或指定祖先)虚函数实现, 类似 this->Super::virtual_member() - protected:在 C++ 句柄上虚分发调用 protected 成员 实现要点: - RemoteThisMethod + CALL_REMOTE_METHOD_THIS_BY_IDX:override 转发时 将 this 作为额外参数注入 Rust 函数指针表 - 槽位访问器模式:方法表结构体字段初始化器调用前置声明的 _hicc_slot_*() 访问器(返回 const void*),其定义置于代理类之后, 经 export_func/export_except_func 导出代理类内 thunk 地址, 解决方法表先于代理类生成的顺序矛盾 - protected 成员指针经派生(代理)类名取得(&Proxy::method), 满足 C++ [class.protected] 访问规则 - 字段访问 thunk 用 trailing-return decltype 推导未知字段类型 - super 调用 thunk 经 Base:: 限定符静态分派到父类实现 新增 hicc-examples/protected_super 完整样例与 docs/protected-super-design.md 设计文档。 验证:hicc_autogen 57 单测全绿;interface/class/datas/memory 既有样例回归通过;新样例运行断言全过。 Co-Authored-By: Claude Code <noreply@anthropic.com> | 14 天前 |
| docs: 移除 #[member] 宏说明, 关联函数统一改为 impl 语句方式; 修正 build.rs 样例 cargo:: 为单冒号 - hicc/src/lib.rs: 删除整节 #[member] 使用说明与样例; impl 章节与内嵌 class 章节改述为『提取为自由函数/与内嵌 class 方式等价』; class 函数体语法的 关联函数说明去 member 化 - hicc/README.md: 关联函数两种方式(内嵌 class 与 impl), 去 member 提及; build.rs 样例 cargo:: -> cargo: + rerun-if-changed 笔误修正 - hicc/reference.md: build.rs 样例同修正 - README.md: impl 章节等价性表述去 member 化 | 25 天前 |