[wg-camlp4] benchmarks

Gerd Stolpmann info at gerd-stolpmann.de
Thu Feb 7 21:22:51 GMT 2013


Am 07.02.2013 21:39:39 schrieb(en) Thomas Gazagnaire:
> Hi all,
> 
> In my opinion as a *user* of camlp4, the main pitfall that I can see  
> (and which has not yet been addressed) is that it is really slowing  
> down the compilation process. To improve that, the usual methods are:
> 1. to use native syntax extensions
> 2. to statically link the syntax extensions into one preprocessor  
> binary

Well, Alain started with the suggestion to run all preprocessors as  
separate binaries. Of course, if you have many preprocessors or many  
files to preprocess, this will become slow. Under the most common  
assumption, though, namely that only a few files need preprocessing at  
all, this is no problem, and certainly the most flexible option.

Regarding dynloading. First, it's not only that native dynloading does  
not work on all platforms. Worse, not even bytecode dynloading works  
everywhere when it comes to loading external C libraries (which may be  
required here and there). Because of this, we should design without  
dynloading in mind, and at most consider this as an accelarator that is  
available on certain platforms only.

In my opinion, there should be ppx drivers (= something that turns a  
preprocessor into a program suited for -ppx). The simple default driver  
just pipes the parsetree through the preprocessors, and these are  
running as subprocesses. But it should also be possible to link a  
custom ppx driver for the not-so-frequent cases that the preprocessors  
are needed often. And finally, there could also be a ppx driver that  
dynloads.

I guess the details are not so complicated to figure out (e.g. define a  
module type a ppx preprocessor must satisfy, and have some utilities to  
"make this a program", "make this a dynloadable extension", and "bind  
several ppx processors together").

> Currently, 1. is very broken  (natdynlink doesn't work on all  
> platforms and most of the syntax packages do not install their native  
> libraries anyway) and 2. is not very flexible because of lack of  
> tooling, and so very rarely used.
> 
> So, if we decide to switch to a new preprocessing tool, I guess it's  
> important to get these hings right:
> * it should be easy enough for external tools to statically build  
> pre-processors.
> * the new preprocessor should be benchmarked on realistic examples to  
> see how much time we gain vs. camlp4. A good example might be mirage  
> which is using only pa_lwt and cstruct (or xen-api which is using  
> only ocaml-rpc, or core but that maybe too much syntax in one go).

Fully agreed to both points.

Gerd

> 
> Best,
> Thomas
> PS: I'm not speaking about the bootstraping time of camlp4, which is  
> indeed very painful, but which doesn't really affect the end-user  
> once the compiler is installed.
> _______________________________________________
> wg-camlp4 mailing list
> wg-camlp4 at lists.ocaml.org
> http://lists.ocaml.org/listinfo/wg-camlp4
> 
> 



-- 
------------------------------------------------------------
Gerd Stolpmann, Darmstadt, Germany    gerd at gerd-stolpmann.de
Creator of GODI and camlcity.org.
Contact details:        http://www.camlcity.org/contact.html
Company homepage:       http://www.gerd-stolpmann.de
------------------------------------------------------------


More information about the wg-camlp4 mailing list