[Haskell-cafe] more sharing in generated code

Andreas Abel andreas.abel at ifi.lmu.de
Sat Nov 3 10:47:09 CET 2012

On 03.11.12 10:05 AM, Peter Divianszky wrote:
> Suppose we have a record update
>    r { x = f (r x)}
> and suppose that most of the time f returns it's argument unchanged.
>     Recently I've heard about Q-combinators.
>     Central idea: Change (f :: a -> a) to (f' :: a -> Maybe a) returning
>     Nothing when the value didn't change.
>     Then we can replace the record update with smarter code which
>     preserves more sharing.

Just adding a remark here:  I actually played with these Q-combinators, 
they actually worsened performance of Agda.  The problem is that they 
make the code strict.  The performance loss due to strictness 
outweighted the potential performance gain by increased sharing. 
Q-combinators were developed by John Harrison in the context of ML, 
which is strict anyway.

I guess a compiler support for smart record update would not have the 
strictness penalty.


Andreas Abel  <><      Du bist der geliebte Mensch.

Theoretical Computer Science, University of Munich
Oettingenstr. 67, D-80538 Munich, GERMANY

andreas.abel at ifi.lmu.de

More information about the Haskell-Cafe mailing list