CodeBridge
四语言结构转译器。在 C、C++、Java、Python 之间进行代码结构转译。
核心目标
给定源代码和目标语言,生成等价代码,要求:
- 使用目标语言惯用模式(不只是功能等价)
- 添加行内注释解释每个结构替代
- 警告不可转译的语义
- 提供目标语言的学习建议
Gotchas
> 每次 agent 翻车后追加一条。按时间顺序积累,只追加不修改。
> 修改 description 会影响所有 Skill 的路由,除非合入后第一件事就是改 description,否则不要改。
- Gotcha 1(内存管理,C→C++):agent 最初混用了
new/delete和智能指针。修复:强制使用std::unique_ptr<T>或std::shared_ptr<T>,禁止混用。 - Gotcha 2(联合体,所有方向):agent 保留了
union语法。修复:推荐std::variant(C++17)/Object+instanceof(Java)/ 独立变量(Python);添加"⚠️ union 内存共享语义丢失,往返后可能无法恢复"注释;禁止在同一转译方向中混用多种方案。 - Gotcha 3(goto 重构,C→Java/Python):agent 忘记重构
goto。修复:C→C++ 允许保留但必须加注释// ⚠️ goto 不推荐,建议重构为 return + flag;C→Java/Python 强制重构为return + flag或自定义异常,禁止保留goto。 - Gotcha 4(文件 I/O,含动态成员):agent 对含
std::string的对象使用了内存布局 I/O(fwrite)。修复:必须用流式 I/O(std::fstream)或序列化,禁止按内存布局写入。 - Gotcha 5(往返等价性警告):agent 未警告语义丢失。修复:每次转译后,若源语言特性无法在目标语言中直接表达(如
union内存共享、setjmp/longjmp跨函数跳转、指针运算语义),必须添加⚠️ 往返等价性警告:此部分在从目标语言转回源语言时可能无法恢复原始语义。 - Gotcha 6(枚举,所有方向):agent 用
int常量模拟枚举。修复:C→C++ 用enum class(强类型);C→Java 用enum Type { A, B; };C→Python 用from enum import Enum;禁止用int常量模拟。 - Gotcha 7(错误处理统一):agent 混用了返回值和异常。修复:同一转译结果中错误处理风格必须统一,禁止混用。
- Gotcha 8(并发原语映射):agent 忽略了线程安全问题。修复:并发原语必须正确映射(
pthread_mutex→std::mutex→synchronized→threading.Lock),并在注释中说明线程安全边界。
输出格式
转译结果按以下结构输出:
## 转译结果:C → C++
### 转换要点(改动说明)
- [改动1] printf → cout:说明
- [改动2] struct → class:说明
### 目标代码(C++)
```cpp
// 转换后的代码,含逐行注释
⚠️ 语义差异说明(不可转译的部分)
- 说明1
- 说明2
📚 学习建议
- 建议1
- 建议2
```
翻译指南
内存管理
- C→C++:强制使用
std::unique_ptr或std::shared_ptr,禁止混用new/delete - C++→Java/Python:依赖 GC,删除所有手动内存管理
- C→Java/Python:无
free,GC 处理所有
联合体(union)
- C→C++:推荐
std::variant<T1,T2>(C++17),注释说明内存共享语义丢失 - C→Java:用
Object + instanceof,注释说明 - C→Python:用独立变量模拟,
typing.Union仅类型标注 - 禁止在同一转译方向中混用多种方案
goto 语句
- C→C++:允许保留但必须加注释警告
- C→Java/Python:强制重构为
return + flag,禁止保留goto
文件 I/O
- 含动态内存的对象必须用流式 I/O 或序列化
- 禁止用
fwrite按内存布局写入
枚举
- C→C++:推荐
enum class(强类型),加入EnumName::限定符 - C→Java:用
enum Type { A, B; },加入Type.限定符 - C→Python:用
from enum import Enum; class Color(Enum): RED=1 - 禁止用
int常量模拟枚举
预处理指令(#define / #ifdef)
- C→C++:用
const/constexpr替代宏常量,inline函数或模板替代宏函数,#if defined()替代#ifdef - C→Java:用
static final常量、static方法替代宏,运行时if (DEBUG)替代#ifdef - C→Python:用函数替代宏函数,
import替代#include,运行时if DEBUG:替代#ifdef
语义警告
每次转译必须包含警告部分,若代码含有:
- 指针(C/C++):警告 Java/Python 无指针运算等价物
- 手动内存管理(C/C++):警告 Java/Python 使用 GC
- 多重继承(C++):警告替换为接口/混入
- 模板/泛型差异:警告 Java 泛型 ≠ C++ 模板
- 静态类型:警告 Python 动态类型丢失编译期类型检查
- Union:警告无直接内存共享 union,提供替代设计
- 可变参数函数(va_list):警告类型不安全的 varargs,推荐类型安全替代
- Setjmp/longjmp:警告无等价物,推荐异常或状态机重构
- 移动语义(C++):警告 Java/Python 无移动语义,赋值是引用复制
学习建议
每次转译后,提供 2-3 条针对性学习建议:
1. 关于被更改的特定语法结构
2. 编写目标语言时的常见陷阱
3. 推荐的下一步(例如:"尝试下次使用列表推导式")
参考文档
以下文档按需加载(Runtime 阶段),不要在 Load 阶段全部加载:
按方向加载(用哪个方向就加载哪个)
references/syntax_c_to_cpp.md:C → C++ 语法映射references/syntax_c_to_java.md:C → Java 语法映射references/syntax_c_to_python.md:C → Python 语法映射references/syntax_cpp_to_java.md:C++ → Java 语法映射references/syntax_cpp_to_python.md:C++ → Python 语法映射references/syntax_java_to_python.md:Java → Python 语法映射
专题文档(需要时加载)
references/syntax_edge_cases.md:边界情况与不可直接转译汇总references/syntax_error_handling.md:错误处理转译对照表references/syntax_concurrency.md:并发与多线程转译对照表references/syntax_std_lib.md:标准库映射对照表references/syntax_advanced.md:高级语言特性对照表references/syntax_code_quality.md:代码质量与风格对照表
> 原始总表保留在 references/syntax_table.md 作为备份,可按需删除。
脚本工具
scripts/translive/server.py:实时双屏代码转译 Web 服务器(Flask)scripts/translive/launcher.py:转译器启动器
资产模板
assets/output_template.md:转译结果输出格式模板