Leroy: Library Learning for Imperative Programming Languages
<|reference_start|>Leroy: Library Learning for Imperative Programming Languages: Library learning is the process of building a library of common functionalities from a given set of programs. Typically, this process is applied in the context of aiding program synthesis: concise functions can help the synthesizer produce modularized code that is smaller in size. Previous work has focused on functional Lisp-like languages, as their regularity makes them more amenable to extracting repetitive structures. Our work introduces Leroy, which extends existing library learning techniques to imperative higher-level programming languages, with the goal of facilitating reusability and ease of maintenance. Leroy wraps the existing Stitch framework for library learning and converts imperative programs into a Lisp-like format using the AST. Our solution uses Stitch to do a top-down, corpus-guided extraction of repetitive expressions. Further, we prune abstractions that cannot be implemented in the programming language and convert the best abstractions back to the original language. We implement our technique in a tool for a subset of the Python programming language and evaluate it on a large corpus of programs. Leroy achieves a compression ratio of 1.04x of the original code base, with a slight expansion when the library is included. Additionally, we show that our technique prunes invalid abstractions.<|reference_end|>
@article{bellur2024leroy:,
    title={Leroy: Library Learning for Imperative Programming Languages},
    author={Abhiram Bellur, Razan Alghamdi, Kidus Workneh, Joseph Izraelevitz},
    journal={arXiv preprint arXiv:2410.06438},
    year={2024},
    archivePrefix={arXiv},
    eprint={2410.06438},
    primaryClass={cs.PL}
}