Software languages play a fundamental role in the development of software. They are used to express programs, algorithms and data, and are used to communicate such things precisely and concisely, for both programmer/computer, computer/computer and programmer/programmer.
Both software and software languages tend to change or evolve over time, and live for a long time. Modern society still relies on software and software languages developed in the 50s and 60s.
As part of the effort to enable change and flexibility, modern software engineering is increasingly reliant on tool support. Such language processors deal with translating, formatting, editing, visualising, analysing, migrating and evolving software. As languages evolve, corresponding co-evolutionary changes must be made to the language processors to keep them up to date.
With this project we aim to tackle this problem, by developing techniques and tools for co-evolving software languages and software language processors. We go beyond the state of the art, in tackling a wider range of changes (including semantic changes), and a wider range of implementation technology (including general-purpose languages).
To achieve this, a radically new approach is needed. Instead of focusing on achieving full automation for very limited technologies, we will employ a mix of techniques, including automated, preventative and assistive techniques, and base our research on empirical studies of co-evolution in real systems. We will validate our results by building prototypes and applying them to cases, and manage risk through an iterative and incremental research process.
The project will have a strong international connection to the leading research groups in software evolution, software language technology and software transformations. The PI has a long track record in language design and engineering, and has practical experience in tackling rapid language evolution.