Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] partial eval question
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: William Chesters <williamc@p...>
Subject: Re: [Caml-list] partial eval question
Damien writes:
 > Multi-Stage Programming is your friend...
 > <http://www.cs.rice.edu/~taha/MSP/>
 > 
 > There are two ML implementations :
 > Ocaml : MetaOCaml <http://www.cs.rice.edu/~taha/MetaOCaml/>
 > SML : MetaML <http://www.cse.ogi.edu/PacSoft/projects/metaml/>
 > 
 > 
 > let rec pow n = .< 
 > 	.~(match n with
 > 		| 1 -> .< fun x -> x >.
 > 		| n -> .< fun x -> x * .~(pow (n-1)) x>.
 > 	)
 > >.
 > 
 > (pow 3) get reduced into .<fun x -> x*x*x>.

And that's an improvement over

    double pow(double x, int n) {
      double it = 1;
      while (--n >= 0) it *= x;
      return it;
    }

    double pow3(double x, int n) {
      return pow(x, 3);
    }

in what way exactly?  (If it doesn't work for you, try
-funroll-all-loops.)

For these kinds of purposes, Multi-Stage Programming is a very
labour-intensive and error-prone way of doing what mainstream
compilers will do for you already.  Maybe it has useful applications
in e.g. generation of numerical codes, where inlining, unrolling,
"templatization" and partial evaluation are not enough because major
structural transformations are required.  But then, maybe
sophisticated jobs like that are always going to be easiest done with
special-purpose code generators?

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners