Calendar Description:
Study dynamic compilation and re-compilation that takes place
at run-time. Explore the trade-off between frequency and cost of re-compilation
and the frequency of execution of procedures at run-time. Study register-based
intermediate representation for Java programs. Characterize efficient run-time
profiling and feedback-based computation.

Course Description and Goals:

The success of Java as a programming language lead to a rekindling interest
on dynamic re-compilation, also known as "just-in-time compiling". The
effective compile time analysis and optimization of Java programs, requires
that the compiler uses a register-based intermediate representation of
the program. However not all the static optimization techniques used for
imperative languages applies directly to object oriented programs. Several
symbolic name resolutions must be delayed until run-time, thus the attraction
of dynamic re-compilation for Java.

In this course we study the most recent papers and reports in the literature
dealing with dynamic re-compilation. We will also make experimental use
of several virtual machines and compiler infrastructures that became available
in the past few years.

The goal of the course is for the students to become conversant on
the state of the art of dynamic re-compilation; to develop an in-dept
understanding of the issues involved and the trade-offs faced by a dynamic
compiler designer; to understand which traditional compiling techniques
translate well to a dynamic recompiling environment, and which ones do not;
to discover the features and limitations of the infrastructures currently
available for dynamic re-compilation; and to identify open research topics
that are likely to lead to significant gains either in recompiling efficiency
or in execution time performance.