当前位置: 首页 > news >正文

ICSE‘25 LLM Assistance for Memory Safety

不知道从什么时候开始,各大技术社区,技术群聊流行着 “用Rust重写!” ,放一张图(笑死…
请添加图片描述
这不, 随着大模型技术的流行,大家都在探索如何让大模型自动完成仓库级别(全程序)的代码重构,代码变换(Refactor,Transformer)

最近有很多类似的工作,将一个语言的工程项目转换为另一个语言工程项目。

  • 字节在代码重构方面的探索
    • 半空:LLM 辅助的 Go2Rust 项目迁移
  • C to Rust
    • ICSE’23: Concrat: An Automatic C-to-Rust Lock API Translator for Concurrent Programs
    • Context-aware Code Segmentation for C-to-Rust Translation using Large Language Models
    • Towards Translating Real-World Code with LLMs: A Study of Translating to Rust
  • Java to ArkTS
    • ASE’24: LLM-Based Java Concurrent Program to ArkTS Converter
    • ArkTS就是鸿蒙应用开发语言, TypeScript的一个超集

请添加图片描述

本文阅读: ICSE’25 “Using Large Language Models for inferring Checked C annotations”

原文是利用LLM去完成全程序代码重构,即: 将C语言项目的源代码转换成C语言的一个方言CheckedC,该C语言方言是内存安全的。

本文不关注它重构或者转换(Refactor/Transformer)的具体细节,而是关注整个Whole Program Transformer框架,具体细节可以查看原文。

1. 依赖图构造 (Dependency Graph Generation)

核心方法学就是:渐进式代码分析(模块化代码分析). 推荐看我之前推荐的一篇文章:SOAP’24 Interleaving Static Analysis and LLM Prompting

由于大模型上下文窗口的限制,我们不可能把所有的工程文件一股脑扔给LLM,而是将大的任务拆分成更小的任务,每个任务的上下文大小就足够小,可以交给大模型去完成。

SOAP'24 Interleaving Static Analysis and LLM Prompting中提到的拆分方法是按函数级别去拆分,即构造函数调用图,然后对调用图拓扑排序,自底向上进行LLM与静态分析交互的代码分析。

但是在代码重构这个领域,按函数级别去拆分仍然不够,因为我们期望将程序中每个元素,包括数据结构,类型定义,宏定义,全局变量定义等也进行重构,很显然单纯构造全程序函数调用图仍然不够。

于是,在之前的函数调用图之上进行扩展。

  • 如果一个函数内用到了某个类型,那么该函数也应该有一条边连接到这个类型的定义。
  • 如果一个函数内用到了某个全局变量,那么该函数也应该有一条边连接到这个全局变量的定义。
  • 类似地, 可以递归地进行边的连接:

最后的依赖图大概长这样:
请添加图片描述

下面给出依赖图的具体定义:

依赖图的节点为程序中所有的top-level declarations。例如:

  • 函数: 函数签名 + 函数体
  • 类型声明: struct, union, enum
  • 全局变量声明
  • 宏定义

依赖图的边为有向边: n1 -> n2表示n1中用到了n2

  • n1为函数。n1 -> n2,如果
    • n2为n1中被调用的函数。
      • 对于函数指针调用,直接连接n1到这个函数指针的类型声明
    • n2为n1中出现的所有类型,全局变量,宏定义。
  • n1类型定义。n1 -> n2,如果
    • n2为n1中出现的所有类型和宏定义
  • n1全局变量声明。n1 -> n2,如果
    • n2为n1中一定用到的类型或者宏定义
  • n1为宏定义
    • 宏定义没有出边

宏定义作者目前并没有太考虑.

2. 通用全程序变换框架 (Generic Whole-Program Transformation)

作者给出了一个通用的全程序变换算法框架:
请添加图片描述

算法的输入为:依赖图,Prompt模板。

其中,根据Transformation的不同,框架输入的具体Prompt就不同。下面是Prompt模板。
请添加图片描述

CheckedC Preamble 给大模型介绍CheckedC相关知识,例如内置的注解,语法规则等。(In-Context Learning)

模板中提供了几个模板变量,待具体问题去实例化这些变量:

  • {{Task definition}}:描述LLM要执行的具体任务
  • {{Task example}}:Few-shot learning,举几个例子。
  • {{prelude}}:In-Context Learning,给它提供额外的相关的上下文。
  • {{code}}:被变换的源代码文本
  • {{refactor_history}}:之前的重构历史
  • {{task_specific_code_elements}}:具体的任务

整个框架的工作流:
请添加图片描述

3. 实例化框架

之前介绍了作者的给出的算法框架,以及Prompt模板。作者将这个框架实例化为3个任务。即:在这个通用框架上扩展了3个任务实例:

  • Replacing Nested Arrays with Structs
  • Inferring Bounds Annotations
  • Annotating Globals and Struct Fields

三个任务的Prompt分别是:
请添加图片描述
请添加图片描述

请添加图片描述

4. 实验结论

算法框架的有效性验证

  • 不提供CheckedC知识背景,即使是小程序,LLM也不能推到出注解。
  • 模块化分析更加高效得完成大小规模程序的全程序的代码变换。
  • 最好让LLM一次分析一个函数,然后提供给它相关的依赖作为上下文

真实代码库的实验效果

  • MSA能够推导出86%的3C无法推到出的指针注解
  • MSA算法能够应用到要求复杂代码推理的真实代码场景

作为还拿vsftpd项目为例,与人工编辑作代码重构的对比,这里不展开了。详见原文。

相关文章:

ICSE‘25 LLM Assistance for Memory Safety

不知道从什么时候开始,各大技术社区,技术群聊流行着 “用Rust重写!” ,放一张图(笑死… 这不, 随着大模型技术的流行,大家都在探索如何让大模型自动完成仓库级别(全程序)的代码重构,代码变换(Refactor&…...

《十七》浏览器基础

浏览器:是安装在电脑里面的一个软件,能够将页面内容渲染出来呈现给用户查看,并让用户与网页进行交互。 常见的主流浏览器: 常见的主流浏览器有:Chrome、Safari、Firefox、Opera、Edge 等。 输入 URL,浏览…...

TikTok 推出了一款 IDE,用于快速构建 AI 应用

字节跳动(TikTok 的母公司)刚刚推出了一款名为 Trae 的新集成开发环境(IDE)。 Trae 基于 Visual Studio Code(VS Code)构建,继承了这个熟悉的平台,并加入了 AI 工具,帮助开发者更快、更轻松地构建应用——有时甚至无需编写任何代码。 如果你之前使用过 Cursor AI,T…...

阅读springboot源码 记录

关于 :: 双冒号 用stream的map简洁提取id&#xff0c;类似代码1 // 代码1 List<String> Ids list.stream().map(Student::getId).collect(Collectors.toList())// 代码2 List<String> Ids list.stream().map(use->{return use.getId(); }).collect(Collector…...

Linux之内存管理前世今生(一)

一个程序&#xff08;如王者荣耀&#xff09;平常是存储在硬盘上的&#xff0c;运行时才把这个程序载入内存&#xff0c;CPU才能执行。 问题&#xff1a; 这个程序载入内存的哪个位置呢&#xff1f;载入内核所在的空间吗&#xff1f;系统直接挂了。 一、虚拟内存 1.1 内存分…...

Beautiful Soup 入门指南:从零开始掌握网页解析

Beautiful Soup 入门指南&#xff1a;从零开始掌握网页解析 前言 在数据驱动的时代&#xff0c;网页数据是非常宝贵的资源。很多时候我们需要从网页上提取数据&#xff0c;进行分析和处理。Beautiful Soup 是一个非常流行的 Python 库&#xff0c;可以帮助我们轻松地解析和提…...

网络通信---MCU移植LWIP

使用的MCU型号为STM32F429IGT6&#xff0c;PHY为LAN7820A 目标是通过MCU的ETH给LWIP提供输入输出从而实现基本的Ping应答 OK废话不多说我们直接开始 下载源码 LWIP包源码&#xff1a;lwip源码 -在这里下载 ST官方支持的ETH包&#xff1a;ST-ETH支持包 这里下载 创建工程 …...

Go-并行编程新手指南

Go 并行编程新手指南 在Go语言中&#xff0c;并行编程是充分利用多核CPU资源、提升程序性能的重要手段。它的核心概念包括goroutine和channel&#xff0c;这些特性使得Go在处理并发任务时表现出色。 goroutine&#xff1a;轻量级的并发执行单元 goroutine是Go并行编程的基础…...

基于Django的个人博客系统的设计与实现

【Django】基于Django的个人博客系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 系统采用Python作为主要开发语言&#xff0c;结合Django框架构建后端逻辑&#xff0c;并运用J…...

Python爬虫获取custom-1688自定义API操作接口

一、引言 在电子商务领域&#xff0c;1688作为国内领先的B2B平台&#xff0c;提供了丰富的API接口&#xff0c;允许开发者获取商品信息、店铺信息等。其中&#xff0c;custom接口允许开发者进行自定义操作&#xff0c;获取特定的数据。本文将详细介绍如何使用Python调用1688的…...

kaggle-ISIC 2024 - 使用 3D-TBP 检测皮肤癌-学习笔记

问题描述&#xff1a; 通过从 3D 全身照片 (TBP) 中裁剪出单个病变来识别经组织学确诊的皮肤癌病例 数据集描述&#xff1a; 图像临床文本信息 评价指标&#xff1a; pAUC&#xff0c;用于保证敏感性高于指定阈值下的AUC 主流方法分析&#xff08;文本&#xff09; 基于CatBoo…...

滤波电路汇总

0、前言 1. 引言 滤波电路是电子系统中不可或缺的组成部分,其主要功能是选择性地通过或衰减特定频率范围内的信号。在现代电子技术中,滤波电路广泛应用于信号处理、通信系统、音频设备、电源设计等多个领域。通过滤波,可以去除信号中的噪声和干扰,提高信号的质量和稳定性…...

1.Template Method 模式

模式定义 定义一个操作中的算法的骨架&#xff08;稳定&#xff09;&#xff0c;而将一些步骤延迟&#xff08;变化)到子类中。Template Method 使得子类可以不改变&#xff08;复用&#xff09;一个算法的结构即可重定义&#xff08;override 重写&#xff09;该算法的某些特…...

MySQL分表自动化创建的实现方案(存储过程、事件调度器)

《MySQL 新年度自动分表创建项目方案》 一、项目目的 在数据库应用场景中&#xff0c;随着数据量的不断增长&#xff0c;单表存储数据可能会面临性能瓶颈&#xff0c;例如查询、插入、更新等操作的效率会逐渐降低。分表是一种有效的优化策略&#xff0c;它将数据分散存储在多…...

基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真。选择回归法进行最大功率点的追踪&#xff0c;使用光强和温度作为影响因素&#xff0c;电压作为输出进行建模。…...

计算机毕业设计【任务书】怎么写?

1. 什么是毕业设计任务书 毕业设计任务书是学生在毕业设计初期向指导教师提交的文档&#xff0c;主要用于说明毕业设计的选题、研究内容、目标、方法、进度安排等。 2. 撰写任务书的步骤 2.1 确定选题 选题是撰写任务书的第一步。选题应结合自身兴趣、专业方向和实际应用需…...

GRAPHARG——学习

20250106 项目git地址&#xff1a;https://github.com/microsoft/graphrag.git 版本&#xff1a;1.2.0 ### This config file contains required core defaults that must be set, along with a handful of common optional settings. ### For a full list of available setti…...

【Rust自学】15.6. RefCell与内部可变性:“摆脱”安全性限制

题外话&#xff0c;这篇文章一共4050字&#xff0c;是截止到目前为止最长的文章&#xff0c;如果你能坚持读完并理解&#xff0c;那真的很强&#xff01; 喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以…...

14.模型,纹理,着色器

模型、纹理和着色器是计算机图形学中的三个核心概念&#xff0c;用通俗易懂的方式来解释&#xff1a; 1. 模型&#xff1a;3D物体的骨架 通俗解释&#xff1a; 模型就像3D物体的骨架&#xff0c;定义了物体的形状和结构。 比如&#xff0c;一个房子的模型包括墙、屋顶、窗户等…...

【C语言分支与循环结构详解】

目录 ---------------------------------------begin--------------------------------------- 一、分支结构 1. if语句 2. switch语句 二、循环结构 1. for循环 2. while循环 3. do-while循环 三、嵌套结构 结语 -----------------------------------------end----…...

终极指南:如何免费解锁Cursor Pro完整功能 - 突破AI编辑器限制的完整方案

终极指南&#xff1a;如何免费解锁Cursor Pro完整功能 - 突破AI编辑器限制的完整方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youv…...

如何安全备份微信聊天记录:PyWxDump工具使用全指南

如何安全备份微信聊天记录&#xff1a;PyWxDump工具使用全指南 【免费下载链接】PyWxDump 删库 项目地址: https://gitcode.com/GitHub_Trending/py/PyWxDump 你是否曾因误删重要微信对话而懊悔不已&#xff1f;是否想永久保存珍贵聊天记录却不知从何下手&#xff1f;Py…...

HS2-HF Patch:为《Honey Select 2》注入新生命的魔法补丁

HS2-HF Patch&#xff1a;为《Honey Select 2》注入新生命的魔法补丁 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是不是曾经打开《Honey Select 2》时&am…...

DownKyi完全指南:三步解锁B站8K视频下载的终极方案

DownKyi完全指南&#xff1a;三步解锁B站8K视频下载的终极方案 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff…...

3DS游戏格式转换神器:5分钟让.3ds文件变身为可安装的CIA

3DS游戏格式转换神器&#xff1a;5分钟让.3ds文件变身为可安装的CIA 【免费下载链接】3dsconv Python script to convert Nintendo 3DS CCI (".cci", ".3ds") files to the CIA format 项目地址: https://gitcode.com/gh_mirrors/3d/3dsconv 还在为…...

SmarterRouter:基于软件定义与模块化构建智能路由器系统

1. 项目概述&#xff1a;一个更聪明的路由器&#xff0c;它到底想做什么&#xff1f;如果你和我一样&#xff0c;折腾过家里的网络&#xff0c;从刷第三方固件到组软路由&#xff0c;那你肯定对“路由器”这三个字有复杂的感情。它本该是默默无闻的网络基石&#xff0c;却常常因…...

AI 术语通俗词典:计算图

计算图是深度学习、自动微分、神经网络训练和人工智能框架中非常重要的一个术语。它用来描述&#xff1a;把一次数学计算过程表示成由节点和边组成的图结构。换句话说&#xff0c;计算图是在回答&#xff1a;模型中的输入、参数、运算和输出之间&#xff0c;到底是如何一步步连…...

药物发现自动化:FEP计算工作流引擎faah的设计原理与实战

1. 项目概述&#xff1a;一个面向药物发现的自动化工作流引擎 最近在药物研发的自动化工具领域&#xff0c;一个名为 kiron0/faah 的项目引起了我的注意。这并非一个简单的脚本集合&#xff0c;而是一个设计精巧、旨在为药物发现中的自由能微扰计算提供端到端自动化解决方案的…...

Lua-RTOS-ESP32:用脚本语言快速开发物联网硬件的实践指南

1. 项目概述&#xff1a;当Lua遇上RTOS&#xff0c;在ESP32上构建轻量级物联网开发新范式如果你是一名嵌入式开发者&#xff0c;或者对物联网&#xff08;IoT&#xff09;设备编程感兴趣&#xff0c;那么你一定对ESP32这颗明星芯片不陌生。它凭借强大的双核处理能力、丰富的无线…...

开源AI代码助手实践:从数据到部署的全链路解析

1. 项目概述&#xff1a;从“copaw-code”看AI代码助手的开源实践最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“QSEEKING/copaw-code”。光看这个名字&#xff0c;可能有点摸不着头脑。“copaw”这个词&#xff0c;听起来像是“co-pilot”&#xff08;副驾驶&#xff…...