Back to search

IKTPLUSS-IKT og digital innovasjon

Co-Evolution of Software Languages and Language Processors

Alternative title: Koevolusjon av programvarespråk og språkverktøy

Awarded: NOK 6.7 mill.

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. All modern software engineering also relies on the use of software libraries and APIs (application programming interfaces); these software languages in themselves and can be analysed through the same perspective. 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. Being unable to adapt to changing circumstances can have very real consequences. 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. Both languages, tools, and their use evolve over time, leading to changes in the underlying software. In this project we have looked at this problem of software change, in particular co-evolutionary change of language/API and tools/code. We have tried to tackle a wider range of changes (including changes in language semantics), and a wider range of language implementation technology (including general-purpose programming languages) than the state of the art. To achieve this, we needed a radically new approach is needed. Instead of focusing on achieving full automation for very limited technologies, we have looked a mix of techniques, including automated, preventative and assistive techniques. In particular, we have focused on things that would be usable for actual developers, and the project has generated both incremental improvements to such tools and language workbenches, as well as new research questions for future improvments. An important aspect of modern development tools that assist in software (co-)evolution is to what degree developers are able to make use of the assistance, and understand the consequences, and to what degree tools support the tasks developers are actually performing. We have, in collaboration with the University of British Columbia, Canada, studied how industry developers use and understand of such refactoring tools. This research has given us important results about how developers use tools in practice, and led to the design and prototyping of a new «stepwise» technique for software change.

Prosjektet har oppnådd: * Én fullført PhD-grad i programutvikling (disputert 22.12.2021), med industrinær kompetanse. * Ti publiserte konferanseartikler med tilhørende presentasjoner, og fem journalartikler. * Ny forståelse om hvordan utviklere i industrien bruker programmeringsverktøy, og ikke minst innsikt i når og hvorfor de *ikke* bruker eksisterende verktøy. * En publisert datapakke med video, transcripts og systematisert data fra undersøkelse av industriutviklere. * Prototyper og forbedringer for refaktoreringsverktøy og language workbenches Prosjektet har generert nye prosjektideer innen verktøy for programvarespråk, blant annet i form av unge-forskertalenter søknader til NFR i 2021 og 2022.

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.

Publications from Cristin

No publications found

No publications found

Funding scheme:

IKTPLUSS-IKT og digital innovasjon