[Paper] REMODEL-LLM:使用 LLM 将 C 代码转换为 Java
发布: (2025年12月12日 GMT+8 17:25)
7 min read
原文: arXiv
Source: arXiv - 2512.11402v1
概览
论文 REMODEL‑LLM 评估了紧凑、量化的大语言模型(LLM)在自动将 C 程序翻译成 Java 方面的表现。通过结合基于抽象语法树(AST)的代码分析与严格控制的提示(prompt),作者揭示了 19 种参数不超过 200 亿的模型之间的显著性能层级,突显了轻量级 LLM 在跨语言代码迁移中的潜力与当前局限。
关键贡献
- 全面基准:在精心挑选的 C→Java 翻译套件上对 19 种量化 LLM(≤ 20 B 参数)进行评测。
- 混合翻译流水线:首先将 C 源码分解为抽象语法树(AST)以获得语义依据,然后将基于规则的提示输入 LLM 生成代码。
- 分层性能分类(Tier 1、2、3),清晰区分能够生成可运行 Java 的模型与不能的模型。
- 实证洞察:指出
function pointers、sizeof、enums等特定 C 构造始终导致当前量化模型失效。 - 开源制品(数据集、提示、评估脚本),便于复现与后续研究。
方法论
- 数据集构建 – 收集了 200 条简短 C 代码片段,覆盖广泛的语言特性(控制流、内存管理、数据结构),并为每条提供手工编写的参考 Java 翻译。
- AST 提取 – 对每个 C 片段使用 Clang 前端生成 AST。AST 的作用有两点:
- 提供语言无关的结构化表示,供提示引用。
- 在调用模型前自动检测不受支持的构造(例如指针算术)。
- 提示设计 – 制作了高度受限的规则化提示:
- “You are a code translator. Use the following AST nodes to produce equivalent Java code. Do not add any imports beyond
java.util.*. Do not use unsafe casts.” - 提示中还加入了简短的“翻译检查清单”,引导模型正确处理内存模型(例如将手动
malloc替换为new)。
- “You are a code translator. Use the following AST nodes to produce equivalent Java code. Do not add any imports beyond
- 模型推理 – 在零样本设置下(无微调),对 19 种量化 LLM 使用相同的提示‑AST 对进行推理。随后将生成的 Java 代码编译并在基于原始 C 行为的单元测试套件上执行。
- 评估指标 –
- 编译成功率(可运行 vs. 不可运行)。
- 功能正确性(单元测试通过率)。
- 语义保真度(人工检查细微逻辑错误)。
结果与发现
| 层级 | 代表模型 | 编译成功率 | 功能通过率 |
|---|---|---|---|
| Tier 3 | llama3.1、gemma3、starcoder2 | 0 %(全部未编译) | 0 % |
| Tier 2 | mistral‑nemo、mistral | ~70 % 编译成功 | 10‑20 % 测试通过(存在大量语义错误) |
| Tier 1 | phi4、deepseek‑coder‑v2、codeqwen | > 90 % 编译成功 | 50‑65 % 测试通过 |
- 主要失效模式 – 即使是 Tier 1 模型也会在以下情形出错:
- 函数指针(无法映射到 Java 接口或 lambda)。
sizeof表达式(被误解释为字面数字)。- 基于枚举的 switch 逻辑(产生错误的 case 处理)。
- 推理上限 – 作者观察到量化(int8/int4)降低了模型进行多步逻辑推理的能力,而这对于正确处理指针别名和低层内存计算至关重要。
实际意义
- 遗留代码迁移 – 对于结构简单、模板化程度高的 C 模块(如简单 I/O 包装),Tier 1 量化模型已经能够生成可用的 Java 代码,迁移工作量可能降低 30‑40 %。
- 工具集成 – AST + 提示流水线可封装为 IDE 插件或 CI‑based 迁移助手,提供“自动建议”模式;当模型标记出不支持的构造时自动回退至人工审查。
- 成本效益部署 – 由于评测模型均能在单 GPU、低显存环境下顺畅运行,组织可以在内部部署翻译服务,无需昂贵的全尺度 LLM API。
- 安全网 – 明确的层级性能暗示一种实用工作流:运行模型 → 自动编译 → 仅提升通过单元测试的翻译结果,从而避免引入细微 bug。
局限与未来工作
- 基准范围 – 测试套件侧重于小型、独立的代码片段;未评估大型、多文件、构建系统复杂的项目。
- 量化影响 – 本研究未与全精度模型对比,仍需明确量化本身导致的性能损失程度。
- 提示刚性 – 虽然规则化提示提升了一致性,但可能限制模型生成更符合 Java 习惯的代码(如使用流式 API 或泛型)。
- 作者提出的未来方向 包括:
- 在特定领域的 C→Java 语料上进行微调或 LoRA 适配。
- 将 AST‑提示框架扩展至支持大规模代码库的增量翻译。
- 探索将 LLM 输出与传统规则式转译器相结合的混合方案,以应对最难的构造(函数指针、低层内存算术)。
作者
- Aryan Gupta
- Y. Raghu Reddy
论文信息
- arXiv ID: 2512.11402v1
- 分类: cs.SE, cs.AI
- 发布日期: 2025 年 12 月 12 日
- PDF: Download PDF