Report Number: CS-TR-94-1520
Institution: Stanford University, Department of Computer Science
Title: Adaptive Optimization for SELF: Reconciling High Performance
with Exploratory Programming
Author: Holzle, Urs
Date: August 1994
Abstract: Crossing abstraction boundaries often incurs a substantial
run-time overhead in the form of frequent procedure calls.
Thus, pervasive use of abstraction, while desirable from a
design standpoint, may lead to very inefficient programs.
Aggressively optimizing compilers can reduce this overhead
but conflict with interactive programming environments
because they introduce long compilation pauses and often
preclude source-level debugging. Thus, programmers are caught
on the horns of two dilemmas: they have to choose between
abstraction and efficiency, and between responsive
programming environments and efficiency. This dissertation
shows how to reconcile these seemingly contradictory goals.
Four new techniques work together to achieve this:
- Type feedback achieves high performance by allowing the
compiler to inline message sends based on information
extracted from the runtime system.
- Adaptive optimization achieves high responsiveness without
sacrificing performance by using a fast compiler to generate
initial code while automatically recompiling heavily used
program parts with an optimizing compiler.
- Dynamic deoptimization allows source-level debugging of
optimized code by transparently recreating non-optimized code
- Polymorphic inline caching speeds up message dispatch and,
more significantly, collects concrete type information for
With better performance yet good interactive behavior, these
techniques reconcile exploratory programming, ubiquitous
abstraction, and high performance.