paperbot · PL 论文追踪

全部论文 待读 收藏

P2 A Sound Static Analysis Approach to I/O API Migration

面向 I/O API 迁移的可靠静态分析方法
OOPSLA 9(OOPSLA2)2025匹配度 3/10 · 论文属于程序分析与程序合成中的静态分析工作,涉及流敏感指针分析、typestate 与行为等价迁移,但未涉及 ML/Agentic 程序、LLM 改进分析、浮点或贝叶斯程序分析等核心方向,因此仅与静态分析背景弱相关。引用 0 inbox
Shangyu Li, Zhaoyang Zhang, Sizhe Zhong, Diyu Zhou, Jiasi Shen
crossref: 2026-09-10

AI 速览

一句话:提出 Sprout 系统,结合流敏感指针分析与 typestate 分析,自动将程序迁移到新 I/O API 并保证行为等价。

现代存储技术的进步催生了新的 I/O API 以充分发挥性能优势,但将既有软件迁移到这些 API 面临两大障碍:计算模型不匹配,以及围绕有状态、非连续的多 API 调用点所形成的复杂代码结构。本文提出 Sprout,一个自动完成跨 I/O API 程序迁移并保证行为等价(soundness)的系统。Sprout 首先使用流敏感指针分析识别语义变量,从而在抽象层面还原程序的数据与状态含义;在此基础上进行 typestate 分析,将源 API 与目标 API 的语义进行匹配,并据此合成迁移后的程序。作者在真实世界 C 程序上开展实验,结果表明该方法兼具效率与有效性;此外还展示了 Sprout 可适配到数据库等其他领域的迁移场景。

问题
将使用旧 I/O API 的既有程序迁移到新 API 时,由于计算模型不匹配以及有状态、非连续的多 API 调用点导致代码结构复杂,迁移困难且易引入行为偏差。
方法
Sprout 先用流敏感指针分析识别语义变量,再基于 typestate 分析匹配源与目标 API 的语义,并据此合成行为等价的迁移程序。
评估
在真实世界的 C 程序上进行实验,验证了方法的高效性与有效性,并展示了其向数据库等领域迁移的适应性。
原文摘要(Abstract)

The advances in modern storage technologies necessitate the development of new input/output (I/O) APIs to maximize their performance benefits. However, migrating existing software to use different APIs poses significant challenges due to mismatches in computational models and complex code structures surrounding stateful, non-contiguous multi-API call sites. We present Sprout, a new system for automatically migrating programs across I/O APIs that guarantees behavioral equivalence. Sprout uses flow-sensitive pointer analysis to identify semantic variables, which enables the typestate analysis for matching API semantics and the synthesis of migrated programs. Experimental results with real-world c programs highlight the efficiency and effectiveness of our approach. We also show that Sprout can be adapted to other domains, such as databases.

链接与引用

DOI 原文 · PDF(开放获取) ·

BibTeX
@article{paperbot2945,
  title = {A Sound Static Analysis Approach to I/O API Migration},
  author = {Shangyu Li and Zhaoyang Zhang and Sizhe Zhong and Diyu Zhou and Jiasi Shen},
  journal = {Proceedings of the ACM on Programming Languages},
  volume = {9},
  number = {OOPSLA2},
  year = {2025},
  doi = {10.1145/3763071}
}