Strictifying Attribute Evaluation
Stc
Date: 2007-01-18
Time: 11:45
Room: BBL room 471
Speaker: Joost Verhoog
Title: Strictifying Attribute Evaluation
Abstract
The UU-AG system provides a way to specify computations over
datastructures. It allows specification of the computation that is
compositional: different aspects of the computation can be described
independently, and combined later. The UU-AG compiler takes an AG
file, combines the different aspects, and generates Haskell code that
performs the computation.
The main advantage of using AG's is that one only specifies the
relation between parts of the computation - the way this is
implemented is the task of the AG compiler. This method of software
development has proven useful in different projects in our group, such
as EHC, Proxima and UU-AG itself.
One of the problems is that the resulting code is slow. Scheduling of
the computation is left to the laziness of Haskell. Haskell compilers
optimise code by rewriting it, but that doesn't seem to work well for
AG's. In this talk I will discuss analyses on the AG that allow
generation of code that will run faster. This work is inspired by
static scheduling algorithms that were developed for strict imperative
implementations of AG's. Static scheduling results in strict
code. With some further analyses, we are able to use static scheduling
even in programs that use all of the features of lazy programming
(such as cyclic fixed-point computations).
Our work has been integrated into the UU-AG compiler. We have measured
the resulting programs with encouraging results, and our results give
rise to plenty of other opportunities to improve the code even
further.