A common strategy for supporting adaptable software is to use a just-in-time run-time compilation model, as in Java. However, this approach sacrifices performance, since any run-time optimizations must be quick and therefore simple to avoid slowing the program, with excessive compilation overhead. To achieve high performance, particularly for highly modular software, a whole-program static compiler can be used. But this strategy sacrifices run-time extension and adaptability, and forgoes the usual benefits of separate compilation as well.
This research is investigating a more flexible approach, staged compilation, that strives to combine the high performance advantages of static compilation with the flexibility advantages of dynamic compilation. In the staged compilation model, each part of a program passes through multiple compiler stages on its journey from source code to optimized machine code, including stages at separate compilation time, library link time, complete-program link time, and run-time