Version française
Home     About     Download     Resources     Contact us    
Browse thread
camlp4 compilation model
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: blue storm <bluestorm.dylc@g...>
Subject: Re: [Caml-list] camlp4 compilation model
On 1/24/09, Mikkel Fahnøe Jørgensen <mikkel@dvide.com> wrote:
> a) I understand you can write a cryptic ocaml program that effectively
> builds and AST from whatever grammar you decide by applying camlp4.

Right.

> b) I also understand that camlp4 it has a built in ocaml syntax that
> you can extend, and therefore use as camlp4 as a prepreprocessor to
> the ocaml compiler as part of the build process.

Right. It is actually a bit more modular than that : Camlp4 has
built-in Ocaml AST and quotations (~ syntaxic sugar for AST
constructors in expressions or patterns), and provide a way to extend
any camlp4-defined syntax. OCaml compilers can integrate preprocessors
(not only camlp4, see eg.
http://people.csail.mit.edu/mikelin/ocaml+twt/ ) as a part of the
build process.

> It seems that an enduser program can link with a camlp4 enhanced
> library and magically have its syntax extended without adding camlp4
> to the build process (once the library has been built). For example
> the bitstring library introduces the bitmatch syntax.
>
> Is this correct understood, and how does that work?

I do not think it is correct. IIRC, bitstring needs (when using the
syntaxic extension) camlp4 in the user build process. Richard Jones
may correct me on this though.

> One reason I put camlp4 on hold was precisely that added compilation
> complexity, but if it can be hidden in a library, it is an entirely
> different situation.

I do not know of any way of "hiding" the preprocessing phase.
That said, the build process does not have to be painful. You can use
ocamlfind ( http://projects.camlcity.org/projects/dl/findlib-1.2.1/doc/guide-html/x412.html
), or ocamlbuild, to integrate syntax extensions more easily.