caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: William Chesters <williamc@paneris.org>
To: <caml-list@inria.fr>
Subject: Re: [Caml-list] partial eval question
Date: Mon, 27 Oct 2003 15:39:21 +0000	[thread overview]
Message-ID: <16285.15401.421786.814601@beertje.william.bogus> (raw)
In-Reply-To: <20031027081453.37b9f6ee.Damien.Pous@ens-lyon.fr>

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


  reply	other threads:[~2003-10-27 15:37 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-10-27  1:41 Ben Kavanagh
2003-10-27  7:14 ` Damien
2003-10-27 15:39   ` William Chesters [this message]
2003-10-27 18:50     ` Andrew Lenharth
2003-10-27 19:12       ` William Chesters
2003-10-27 20:08         ` Jacques Carette
2004-02-04  3:03           ` Walid Taha
2003-10-27 22:11         ` Andrew Lenharth
2004-02-04  2:59       ` Walid Taha
2004-02-04  5:53         ` Andrew Lenharth
2004-02-05 21:29           ` Walid Taha
2003-10-27 19:17     ` Yann Regis-Gianas
2003-10-28 10:46       ` William Chesters
2004-02-04  2:22         ` Walid Taha
2004-02-04  2:56     ` Walid Taha
2003-10-28 15:09   ` Dmitry Lomov
2003-10-27 15:16 ` Vincent Balat [prof Moggi team]
2004-02-04  2:51 ` Walid Taha
2004-02-04 10:26   ` Ben Kavanagh
2004-02-04 10:32   ` Ben Kavanagh
2004-02-05 21:11     ` Walid Taha

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=16285.15401.421786.814601@beertje.william.bogus \
    --to=williamc@paneris.org \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).