caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Jon Harrop <jonathandeanharrop@googlemail.com>
To: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] Metaprogramming features
Date: Sat, 4 Oct 2008 03:00:02 +0100	[thread overview]
Message-ID: <200810040300.02624.jon@ffconsultancy.com> (raw)
In-Reply-To: <884069.59268.qm@web54601.mail.re2.yahoo.com>

On Friday 03 October 2008 16:09:40 Dario Teixeira wrote:
> Hi,
>
> > I really wish that the basic features of metaocaml, namely
> > .< >., .~ and .! were included in OCaml proper.  The many other
> > experimental features of metaocaml could stay 'experimental',
> > those are the 3 which are sorely needed.
>
> To those of us not familiar with MetaOcaml, could you give us
> an overview of what these features mean and why they are so
> special?

MetaOCaml extends OCaml with three constructs that allow programs to generate, 
compile and evaluate code at run time.

Code is represented by the form:

  .< 1 + 2 >.

This may be executed using:

  .! .< 1 + 2 >.

Values may be injected into code using:

  .< 1 + .~x >.

This makes it vastly easier to turn term-level interpreters into compilers to 
obtain substantial performance improvements.

However, MetaOCaml has problems:

1. Obvious applications are low-level compilers for regular expressions, 
parsers and bytecodes but MetaOCaml imposes the limitations of OCaml (e.g. 
slow char and int handling) which makes it unsuitable for most such 
applications.

2. Non-trivial features in the target language can require great complexity, 
e.g. writing a compiler in MetaOCaml for a language with exceptions imposes 
CPS everywhere which is obfuscated and slow without language support.

3. You cannot generate new pattern matches to leverage OCaml's optimizing 
pattern match compiler in your run-time generated code (but you can use 
static ones).

-- 
Dr Jon Harrop, Flying Frog Consultancy Ltd.
http://www.ffconsultancy.com/?e


  reply	other threads:[~2008-10-04  0:59 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-03 14:34 Jacques Carette
2008-10-03 15:09 ` [Caml-list] " Dario Teixeira
2008-10-04  2:00   ` Jon Harrop [this message]
2008-10-04  9:03     ` David Teller
2008-10-04 14:22       ` Jon Harrop
2008-10-06 14:06     ` Brian Hurt
2008-10-06 15:56       ` Jon Harrop
2008-10-06 16:46         ` Chung-chieh Shan
2008-10-07  0:17           ` [Caml-list] " Jon Harrop
2008-10-07 12:49             ` Nicolas Pouillard
2008-10-07 15:36               ` Jon Harrop
2008-10-07 16:31                 ` Jacques Carette
2008-10-03 16:01 ` [Caml-list] " David Teller
2008-10-03 21:14   ` Paolo Donadeo
2008-10-04  2:17   ` Jon Harrop
2008-10-04  9:10     ` David Teller
2008-10-04  0:49 ` Stefano Zacchiroli
2008-10-04  2:03   ` Jon Harrop
2008-10-04  8:23     ` Richard Jones
2008-10-04 14:31       ` Jon Harrop
2008-10-04 13:57         ` Richard Jones
2008-10-04 19:41           ` Jon Harrop
2008-10-04 19:04             ` Richard Jones
2008-10-05  1:05               ` Jon Harrop
2008-10-06 16:54               ` Chung-chieh Shan

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=200810040300.02624.jon@ffconsultancy.com \
    --to=jonathandeanharrop@googlemail.com \
    --cc=caml-list@yquem.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).