Scalable Program Analysis and topics in Programming Language Design and Transformation
The thesis covers a variety of topics in programming language technology, with the main emphasis on static program analysis. A program analysis is an automatic method, a program, which anwers a specific question about programs. Examples of questions could be "Will this program crash?" and "Will a certain part of the program ever be executed?" Program analyses answering questions such as these can be
used to improve the efficiency and security of programs.
A program analysis can never be exact. This means that there will always be apportunities to develop new and increasingly precise methods for program analysis. However these analyses can easily become very resource hungry, taking a lot of time and memory to compute.
This thesis develops methods for scalable program analysis. As programs grow larger and more complex program analyses should still yield precise enough answers and be feasible to compute.
Our contributions include a new constraint-based program analysis method, Constraint Abstractions, specifically targeted towards computing solutions to precise program analyses. The key technical contribution is an O(n^3) algorithm for program analyses which uses polymorphism and subtyping. A concrete case study is described: a Usage analysis which answers the question "Is a particular value used at most once?"
We also present a comprehensive experimental exploration of the vast design space for program analyses in order to determine how program analysis features interact and impact precision.
Beside program analysis this thesis covers two other topics: program transformation and programing language design. A new technique is introduced for fusing functions, thereby removing any intermediate data structure and improving the speed of programs. Last we show how regular expressions can be seamlessly added to the pattern matching facility found in functional programming languages.
10.15 Lecture room EC, ED&IT-building, Hörsalsvägen 11, Göteborg
Opponent: Professor Jakob Rehof, Department of Computer Science, University of Dortmund, Germany