[Haskell-cafe] library on common sub-expression elimination?

Vinod Grover vinod.grover at gmail.com
Sat Aug 13 06:17:09 CEST 2011


in "let t= a!i"  a!i might be out of bounds ?

On Fri, Aug 12, 2011 at 9:52 AM, Anton Kholomiov
<anton.kholomiov at gmail.com>wrote:

> Just to make it explicit, is it
>
>      \a i ->
>
>          let t = a ! i in
>          if i >= 0 then
>             t
>          else if i > 0 then
>             t + a ! (i-1)
>          else ....
>
> bad idea, because of last else-case? Can it be mended with
> one another pass  for if-expressions?
>
> The upcoming distilled tutorial at DSL 2011 - thank you for the link.
>
> I'm going to experiment with data-reify, while the library you've mentioned
> is
> OCaml only.
>
>
> 2011/8/12 <oleg at okmij.org>
>
>
>> I guess you mean the function that converts an abstract syntax tree to
>> a directed acyclic graph (DAG).
>>
>> Just for completeness I should mention that if the object language has
>> effects including non-termination, one has to be careful eliminating
>> seemingly common expressions. For example, in
>>
>>        \a i ->
>>          if i >= 0 then
>>             a ! i
>>          else if i > 0 then
>>             a ! i + a ! (i-1)
>>          else ....
>>
>> we see the expression (a ! i) repeated in both branches of
>> the conditional. Eliminating the `duplicate' by pulling it out
>>
>>        \a i ->
>>          let t = a ! i in
>>          if i >= 0 then
>>             t
>>          else if i > 0 then
>>             t + a ! (i-1)
>>          else ....
>>
>> would be wrong, wouldn't it?
>>
>> This issue has been extensively investigated in the Fortran compiler
>> community; Elliott, Finne and de Moor's ``Compiling Embedded Languages''
>> (JFP 2003) talks about it at length.
>>
>>
>> The standard technique to detect occurrences of common subexpressions
>> is so-called hash-consing. There are (OCaml) libraries for it:
>>
>>  author        = {Jean-Christophe Filli{\^a}tre and Sylvain Conchon},
>>  title         = {Type-Safe Modular Hash-Consing},
>>  pages         = {12--19},
>>  crossref      = "ml2006",
>>  doi           = "10.1145/1159876.1159880",
>>
>> The upcoming distilled tutorial at DSL 2011
>>
>> http://dsl2011.bordeaux.inria.fr/index.php?option=com_content&view=article&id=2&Itemid=2
>>
>> will present a Haskell library for hash-consing. The library can work
>> with the standard Haskell Hash-tables or without them (using Data.Map,
>> for example). The library does _not_ rely on Stable names and other
>> internal GHC operations with unstable semantics. The library will find
>> all common sub-expressions.
>>
>>
>> Incidentally, despite the Lisp-sounding name, hash-consing was
>> invented before Lisp. It was described, for the English audience, in
>> the first volume of Comm. ACM, in 1958:
>>
>> @Article{       Ershov-hash-consing,
>>  author        = {A. P. Ershov},
>>  title         = {On programming of arithmetic operations},
>>  journal       = "Communications of the {ACM}",
>>  year          = 1958,
>>  volume        = 1,
>>  number        = 8,
>>  pages         = {3--6},
>>  doi           ="10.1145/368892.368907",
>>  url           = "http://portal.acm.org/citation.cfm?id=368907"
>> }
>>
>> The translation is quite accurate, as far as I could see, but misses
>> the flowcharts and the diagram of the original paper. This short paper
>> fully describes what we now call hash tables, hash functions, useful
>> properties of hash functions, and hash-consing. The article analyzes
>> the time complexity of the algorithm. Since the algorithm has two
>> exits, writing programs in the continuation-passing style must have been
>> familiar back then.
>>
>>
>> The library to be presented at DSL 2011 unwittingly follows Ershov's
>> algorithm closely. The library is (hopefully) better described (see
>> the preface to the English translation of Ershov's paper). Nowadays,
>> starting a paper with the phrase ``All unexplained terms are those
>> from [1]'' (where [1] is the single reference) would not be taken
>> kindly by reviewers.
>>
>>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20110812/74076d4f/attachment.htm>


More information about the Haskell-Cafe mailing list