Browse thread
camlp4 compilation model
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2009-01-24 (20:34) |
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.