Co-Evolution of Software Languages and Language Processors
Co-Evo Co-Evolution of Software Languages and Language Processors) is an NFR funded research project starting in April 2016.
About the Project
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 proposal 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.
For every software language, there may be a multitude of software language processors – tools that compile, interpret, refactor, format, edit, visualise, verify and analyse code written in that language.
For every change made to a language, a corresponding co-evolutionary change must be made to its processors. Software language processors are typically complex pieces of software, making co-evolution of languages and language processors costly and error prone.
The number of actively used software languages is steadily rising, and software engineering is increasing reliant on powerful language-specific support tools. Software, including language processors, must be continuously adapted or become increasingly irrelevant. The ability to continuously adapt languages and tools to changing circumstances will be crucial to the future of ICT.
In this project, we will tackle this problem by researching and developing theory, tools and techniques for semi-automated or assisted co-evolution of languages and processors, allowing language processors to be updated and kept in sync with reduced effort and increased reliability.
Our approach will be to analyse and categorise
- typical language changes,
- their impact on language processors,
- and how they are handled by developers;
and develop theory and prototypes for
- analysis techniques that can, for particular categories of changes, identify the impact of change
- automated recommenders that can propose or perform necessary changes,
- debugging and testing methods and tools that can help diagnose problems.
Rather than researching limited solutions that only apply in specific, academic cases, we will develop a `toolbox' of mixed techniques – including syntax co-evolution, code analysis and bidirectional transformation – aimed
at being applicable in more realistic cases.
The project will deliver both empirical and theoretical results, prototype tooling and technology developed based on these results, as well as experimental results from applying our tools and technology. The planned results from this project will be particularly useful for:
- designers and implementers of new and experimental languages that are continually evolving during the design process,
- tools and implementations for domain-specific languages, with few resources available to maintain the language infrastructure, and
- analysis and transformation tools for general-purpose languages, particularly for in-house custom analysis tools where the expense of manual maintenance could be prohibitive,
- future research in language co-evolution.
The software engineering community (and, by extension, the ICT field and modern society in general) is entirely dependent on software languages. The anticipated impact of this project lies in understanding and easing the evolution of software languages and of the critically-important support tools used in software engineering.