Thanks for the feedback. It sounds like there are reasonable ways to do this if you write your programs in such a way that everything can be done via inlining. While I agree that this works in many cases, it doesn't seem powerful enough to solve everything. For example, equations that are only provable by induction are not optimizable by this strategy (without some pretty fancy tricks).

Do you believe that having a rewriting facility is unnecessary? Undersireable (it makes the compiler too complex, too slow, too unpredictable)? Or do you think that it would be useful, but no one has done anything on it?

Thanks.


On Thu, Apr 21, 2016, 4:45 AM Yaron Minsky <yminsky@janestreet.com> wrote:
Also, Core_kernel's Sequence type fills a similar purpose.  And Flambda does a good job of optimizing the iteration in Sequence, from what I've overheard about our experiments.

On Thu, Apr 21, 2016 at 5:32 AM, Jonas Jensen <jj@issuu.com> wrote:
On 21 April 2016 at 09:13, Gregory Malecha <gmalecha@gmail.com> wrote:
>
> I'm wondering if there is any work (and interest) on supporting user-defined optimizations similar to GHC's rewrite rules in the Ocaml compiler. For example, a standard example would be specifying map fusion:
>
> map f (map g ls) = map (fun x -> f (g x)) ls

A "boring" and practical answer is that you get this optimization by
writing your long chain of map, filter, bind, etc. using Batteries'
Enum (http://ocaml-batteries-team.github.io/batteries-included/hdoc2/BatEnum.html)
or the stand-alone Gen package
(http://cedeela.fr/~simon/software/gen/Gen.S.html). It looks
superficially like list map, but the order of execution will be like
after a fusion, which should improve cache locality and avoid
allocations of intermediate lists.

Cheers,
Jonas

--
Caml-list mailing list.  Subscription management and archives:
https://sympa.inria.fr/sympa/arc/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs
--

- gregory malecha
  gmalecha.github.io