【论文速读】|利用大语言模型实现现实世界代码的翻译:一项针对翻译到Rust语言的研究

news2024/11/19 1:47:55

图片

本次分享论文:Towards Translating Real-World Code with LLMs: A Study of Translating to Rust

基本信息

原文作者:Hasan Ferit Eniser, Hanliang Zhang, Cristina David, Meng Wang, Maria Christakis, Brandon Paulsen, Joey Dodds, Daniel Kroening

作者单位:MPI-SWS, University of Bristol, TU Wien, Amazon Web Services, Inc.

关键词:代码翻译,Rust语言,大语言模型(LLMs),差分模糊测试,自动化反馈

原文链接:https://arxiv.org/pdf/2405.11514

开源代码:暂无

论文要点

论文简介:本论文探讨了利用大语言模型(LLMs)进行代码翻译的能力,特别是从其他编程语言翻译到Rust语言。研究主要评估了五种先进的LLMs,包括GPT-4、Claude 3等,在处理实际开源项目代码时的表现。为此,作者开发了一种名为FLOURINE的端到端代码翻译工具,通过差分模糊测试验证Rust翻译的输入/输出等效性,从而消除了对预先存在的测试用例的需求。研究显示,最成功的LLM可以翻译47%的基准代码,并提供了改进的见解。

研究目的:随着对Rust等安全编程语言的兴趣增加,将潜在的有缺陷的旧代码翻译成现代语言的需求也在增加。论文旨在回答大语言模型是否能有效地翻译真实世界的代码。为此,作者开发了一种新的工具FLOURINE,通过实际开源项目的代码进行测试和评估,研究大语言模型在生成初始翻译和修复错误翻译方面的能力。

研究贡献:

1. 开发了FLOURINE工具,能够在无需手写测试用例的情况下生成验证过的Rust翻译。

2. 构建了跨语言模糊测试器,能够在不同语言之间传递输入和输出。

3. 利用FLOURINE进行了首次大规模研究,评估了大语言模型在翻译真实世界代码方面的能力。

4. 证明了大语言模型能够翻译部分真实世界项目,并且直接向大语言模型提供反例反馈的效果不如重复原始提示。

5. 开源了所有代码、基准和结果,以便复现实验。

引言

代码翻译任务在编程语言之间变得越来越重要,尤其是在将可能有缺陷的旧代码翻译成Rust等现代安全语言的背景下。传统的“规则基础”翻译工具针对特定的源语言和目标语言,而大语言模型则有望胜任任意源语言和目标语言的翻译任务。过去的工作主要集中在竞赛编程网站、教育网站或手工设计的编码问题上,这些基准不具代表性。而本研究则着眼于真实世界的代码,利用大语言模型进行Rust翻译。

相关工作

相关工作主要分为代码翻译、跨语言差分模糊测试和大语言模型的反馈策略。多数代码翻译工作集中在竞赛编程风格的代码上,而本研究则评估了大语言模型在真实世界代码翻译中的表现。现有的跨语言差分模糊测试工作中,很少考虑不同语言实现的比较。

本研究开发的跨语言模糊测试工具是目前唯一一个尝试将不同语言编译成共享IR进行测试的工具。关于大语言模型的反馈策略,虽然有一些工作展示了使用反例反馈的成功,但我们的结果显示这种策略在大语言模型的代码翻译任务中效果并不好。

研究概述

本研究开发了一个名为FLOURINE的端到端代码翻译工具,旨在评估和改进大语言模型(LLM)在翻译真实世界代码时的表现。FLOURINE首先使用LLM生成候选翻译代码,然后应用编译驱动的修复,利用Rust编译器的错误信息进行逐步修复。一旦代码通过编译,FLOURINE使用跨语言差分模糊测试来验证翻译的输入/输出等效性,这种方法无需预先存在的测试用例。如果发现翻译不等效,工具将执行反馈策略,向LLM提供反例以修复错误翻译。数据集由七个开源项目的代码样本组成,这些项目涉及音频处理、文本处理、几何学、银行、二维三角测量、图算法和声卡仿真,确保翻译任务的多样性和复杂性。实验结果展示了LLM在生成和修复翻译代码方面的潜力,为未来的改进方向提供了宝贵的见解。

基于LLM代码翻译

本研究的代码翻译算法采用了迭代方法,首先通过大语言模型(LLM)生成候选翻译,然后通过编译驱动的修复阶段确保代码可以编译。编译驱动修复利用Rust编译器的错误信息进行逐步修复,以获得可编译的翻译代码。接着,使用跨语言差分模糊测试验证翻译代码与原始代码的输入/输出等效性。如果发现反例,则将这些反例反馈给LLM,以生成新的候选翻译。整个过程重复进行,直到找到通过所有测试的翻译代码或达到设定的迭代次数。

反馈策略

本研究评估了四种反馈策略,以提高代码翻译的成功率。简单重启策略在每次失败后重新生成翻译,不提供任何额外信息。提示重启策略在原始提示中加入模糊测试的正反例,帮助LLM识别正确行为和避免错误。基于反例的修复策略则将发现的反例反馈给LLM,要求其修正特定错误路径上的问题。对话式修复策略保留所有历史对话,每次在原提示基础上添加新的反例反馈,形成连续对话。结果显示,简单重启和提示重启效果最佳,而直接提供反例的策略效果不如预期。

研究评估

在研究评估中,我们对五种先进的LLM(包括GPT-4、Claude 3等)进行了8160次代码翻译实验,评估了它们在处理408个真实世界代码样本时的表现。结果显示,这些LLM的成功翻译率在21%至47%之间,且代码复杂度越高,翻译成功率越低。实验还揭示了反馈策略的有效性,尽管基于反例的修复策略效果不如预期,但简单重启和提示重启策略显著提高了成功率。研究还发现,LLM生成的Rust代码通常更简洁、语法更规范,但在某些情况下仍会产生非惯用或性能欠佳的代码。

图片

论文结论

本研究展示了大语言模型在翻译真实世界代码方面的能力,并提出了FLOURINE工具作为验证Rust翻译的有效方法。尽管反例反馈在本研究中的效果不佳,但LLM在代码翻译任务中展示了显著的潜力。未来的研究可以进一步优化反馈策略和模糊测试器,以提高翻译的成功率和代码质量。

原作者:论文解读智能体

校对:小椰风

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1856834.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【服务器07】之【GitHub项目管理】及【Unity异步加载场景】

登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字,点击创建存储库就可以了 现在我们下载Fork Fork - a fast and friendly git client for Mac and Windows (git-fork.com) 免费的 下载完成之后点击File下的Clone …

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑需求响应与储能寿命模型的火储协调优化运行策略》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【研究】2012年后日股的“牛市起点”:安倍“出海潮”与巴菲特买点

2012 年-2017 年日股长周期反转定价的核心是房地产负面拖累结束,日本完成某种意义上的新旧动能宏观叙事转变。2012 年之后安倍经济学之于日股的长周期反转定价并非简单财政货币化的估值推动,而是鼓励企业出海获得营收利润增长。日股在2020年出现的巴菲特…

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容…

Kotlin 中的解构

解构声明是 Kotlin 语言的一个特性,它允许我们从一个数据结构中提取多个变量,这样可以让我们的代码更加简洁易读,同时也提高了代码的可维护性。 在 Kotlin 中,解构可以用于多种数据类型,例如,列表&#xf…

数字化营销与传统营销的完美协奏曲!

在这个数字化的时代,营销的世界正在发生着巨大的变革!数字化营销如火箭般崛起,但传统营销也并未过时。那么,如何让它们携手共进,创造出无与伦比的营销效果呢?今天,就让我们讲述一下蚓链数字化营…

Toco x Databend:Databend Cloud 如何满足 Web3 大数据服务的严苛考验?

Toco 是一家位于瑞士的 Web3 服务提供商,致力于通过彻底改变全球金融体系的陈旧观念来应对气候变化。他们提供了一种开创性的碳货币 Tocos,每个流通中的 Tocos 代表一吨二氧化碳当量,存储在安全可靠的数字钱包中。用户可以使用 Tocos 应用轻松…

捕捉过往的时光,5个步骤,安卓手机找回删除的照片

手机不仅仅是一个通讯工具,更是一个记录生活点滴的神器。手机照相机的出现,让我们随时随地都能捕捉到美好的瞬间,留下珍贵的回忆。然而,随着时间的推移,我们可能会不小心删除了这些照片,或者因为各种原因导…

JavaScript的运行机制

阐述几个概念 1. ECStack ( Execution Context Stack)执行环境栈 浏览器会在计算机内存中分配一块内存,专门用来供代码执行的 2. Heap堆内存 存放东西(存放对象和方法即引用类型) 3. EC ( Execution Context ) 执行上下文 代码自己执行所在的环境 …

论文翻译 | SELF-RAG: 学习通过自我反思来检索、生成和评估

Akari Asai, Zeqiu Wu, Yizhong Wang, Avirup Sil, Hannaneh Hajishirzi 华盛顿大学,IBM人工智能研究院 摘要 尽管大语言模型(LLMs)具有非凡的能力,但是它们经常产生不符合事实的响应,因为它们只依赖于它们封装的参数…

Java 应用的性能优化技巧和方法

Java应用性能优化是一个复杂且多层次的过程,涵盖了从代码编写到系统架构,再到运行环境配置的各个方面。 一、代码优化 1. 合理的数据结构和算法 选择合适的数据结构和算法对提高应用性能至关重要。Java提供了丰富的数据结构和算法库(如Jav…

猫咪也怕油腻?选对猫粮是关键!福派斯鲜肉猫粮守护猫咪健康

亲爱的猫友们,我们都知道,猫咪的饮食健康是每一个铲屎官都非常关心的问题。最近,有些猫友向我反映,他们给猫主子喂食的猫粮油脂比较大,不禁让人担心这对猫咪是否真的好。 1️⃣ 首先,让我们来聊聊油脂在猫粮…

设计模式原则——里氏替换原则

设计模式原则 设计模式示例代码库地址: https://gitee.com/Jasonpupil/designPatterns 里氏替换原则 继承必须确保父类所拥有的性质在子类中依然成立 与开闭原则不同的是开闭原则可以改变父类原有的功能,里氏替换原则不能修改父类的原有的性质&#…

Clickhouse 的性能优化实践总结

文章目录 前言性能优化的原则数据结构优化内存优化磁盘优化网络优化CPU优化查询优化数据迁移优化 前言 ClickHouse是一个性能很强的OLAP数据库,性能强是建立在专业运维之上的,需要专业运维人员依据不同的业务需求对ClickHouse进行有针对性的优化。同一批…

用友 【U8+】供应链-暂估方式

【U8+】供应链-暂估方式 知识点:三种不同暂估方式的应用 应用场景: 对于采购业务如果货到票未到时,需要对采购入库进行估价入账,等收到发票时再按发票的成本核算采购入库成本。系统提供了三种暂估方式:月初回冲、单到回冲和单到补差。 操作流程: l 单到回冲 跨月全…

FreeCAD属性机制原理分析

1.实现原理 FreeCAD定义了一套属性层次结构,最上层是Property基类,该类主要提供了外部访问属性的接口及两个成员变量:属性名称、属性状态及属性容器类PropertyContainer。具体的属性直接或间接继承Property类,属性类中主要记录属性…

【机器学习】半监督学习可以实现什么功能?

目录 一、什么是机器学习二、半监督学习算法介绍三、半监督学习算法的应用场景四、半监督学习可以实现什么功能? 一、什么是机器学习 机器学习是一种人工智能技术,它使计算机系统能够从数据中学习并做出预测或决策,而无需明确编程。它涉及到…

Conda创建与激活虚拟环境(指定虚拟环境创建位置)

1.Conda优势 Conda是一个开源的软件包管理系统和环境管理系统,主要用于在不同的计算环境中安装和管理软件包和其依赖项。它最初是为Python而设计的,但现在也可以用于管理其他语言的软件包。 Conda提供了对虚拟环境的支持,这使得用户可以在同…

想拥有一个独一无二的AI人物?Lora炼丹训练模型教程来啦

之前答应过大家放出来的Lora本地训练教程,终于写好啦。 会训练lora,代表着你可以生成属于你的独一无二的角色。 你可以让这个角色在各种不同背景的地方出现,可以让它摆出各种姿势,满足你的无限幻想。 还有的商家,用…

java之SSRF代码审计

1、SSRF漏洞审计点 服务端请求伪造(Server-Side Request Forge)简称 SSRF,它是由攻击者构造的 payload传给服务端,服务端对传回的 payload 未作处理直接执行后造成的漏洞,一般用于在内网探测或攻击内网服务。 利用&a…