Super Compiler

A SuperCompiler is a dynamic optimiser that can transform the code of an object according to its actual usage. The word was introduced by ValentinTurchin, who built one using his RefalLanguage.

This may be simple static optimisations, removing state that isn't used from an object; or it may be very complex e.g. partial evaluation of functions leading to code transformation.

An introduction can be found here: An implementation and documentation here:

A related technique is object elaboration which involves generating many possible execution sequences and generating an optimal processing object to handle that sequence. This is a static version of super-compilation.

E.g. z = F(a,b,c,d,e,f,g).

Given a parameter a, we can often refactor z = G(b,c,d,e,f,g) where a is now internal to G. This is called LambdaDropping

If a is internal to G then an algebraic simplification may be available.


z = F(x,y) = x*x + y*y.

Given x = k.

z = F(x,y) = x*x+y*y = G(y) = k*k + y*y.

If the parameters don't arrive simultaneously then this optimisation may improve performance by doing work early.

-- RichardHenderson.

A JavaLanguage implementation is in the make. See

Some of the ideas implemented in SynthesisOs.

See also CurryingSchonfinkelling GamesCompiler? SuperCombinators
See also CurryingSchonfinkelling RethinkingCompilerDesign SuperCombinators

View edit of June 11, 2010 or FindPage with title or text search