This site is updated infrequently. For up-to-date information, please visit the new OCaml website at ocaml.org.

[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: 2003-10-27 (15:37) From: William Chesters 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

```