A library for programmatic modification and evaluation of software across source code, assembly, and binary formats.
SEL (Software Evolution Library) is a library that enables programmatic modification and evaluation of software across multiple representations, including source code abstract syntax trees, assembly code, and binary objects. It provides a common interface for automating software transformation, analysis, and evaluation tasks, helping researchers and engineers implement advanced software evolution techniques.
Software engineering researchers, tool developers, and practitioners working on program analysis, automated repair, code synthesis, or software transformation projects that require manipulating code at different abstraction levels.
SEL offers a unified abstraction over diverse software representations (source, assembly, binary), enabling consistent programmatic manipulation where other tools are format-specific. Its proven use in award-winning research projects demonstrates reliability for complex software evolution tasks.
Programmatic modification and evaluation of software
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Abstracts over source code ASTs (via tree-sitter), assembly, and binary objects with a common interface, enabling consistent manipulation across diverse software representations as stated in the README.
Backed by award-winning research projects, such as automated bug repair with best paper awards, demonstrating reliability for complex software evolution tasks listed in the README.
Facilitates automation of tasks like transformation and analysis, evidenced by applications like Mnemosyne and automated merge conflict resolution tools mentioned in the README.
Leverages tree-sitter for robust source code parsing, providing accurate AST manipulation for source code as highlighted in the README.
Requires deep understanding of compilers and low-level code due to its abstraction over multiple representations, making it less accessible for developers without a systems programming background.
As a specialized research library, it has a smaller user base and fewer third-party extensions compared to mainstream tools like LLVM, which can hinder adoption and support.
Integrating with tree-sitter and handling binaries may involve managing multiple dependencies and build tools, adding overhead to setup and maintenance.