Declarative Queries for Imperative Languages
Imperative programming may yield efficient and easy-to-compile programs, but it is also notoriously hard. The goal of this project is to ease the task of writing imperative code by extending the underlying language (Java, at this time) with high-level declarative query constructs.
We have developed two such extensions:
- DeAL, which adds fast and expressive heap assertions to Java, and
- PQL, which provides easy access to near-arbitrary parallel Java execution
In collaboration with:
- the GU Frankfurt Big Data Lab
- Yannis Smaragdakis (University of Athens)
Large-Scale Software Quality support for FairRoot
Large software systems often suffer from significant quality defects, both due to their essential complexity and due to accidental complexity. In this project, we explore the FairRoot software system for particle physics (approximately 1 MLOC in size, mostly C++) in order to improve code correctness and software performance.
In collaboration with:
- The FairRoot project for particle physics simluation, analysis, and visualisation
- The Helmholtz International Center for FAIR
Copying and pasting can be a quick solution to a solve a coding problem, but it can also be a quick path towards spreading bugs or reduce maintainability. As an alternative, programmers can try to manually introduce abstractions-- but this can be a more challenging and costly prospect. We propose a refactoring-based approach to bridge the two approaches: Developers can copy, paste, and modify, and later use our approach to merge clone and original into a single abstraction.
Refactoring is a great techinque for changing program structure without altering program behaviour. However, existing refactoring tools have numerous limitations:
- Some complex refactorings aren't supported by existing tools but can't be broken down into smaller refactoring transformations.
- Each refactoring tool has its own idea of what the `relevant program behaviour' is, and that idea may or may not match what the programmer had in mind.
- Whenever a refactoring changes the program, it may use heuristics to preserve behaviour-- and those heuristics may not match the programmer's intentions.