[wg-camlp4] benchmarks

Gerd Stolpmann info at gerd-stolpmann.de
Mon Feb 11 15:44:06 GMT 2013


Am 11.02.2013 11:45:57 schrieb(en) Gabriel Scherer:
> On Mon, Feb 11, 2013 at 11:31 AM, Anil Madhavapeddy <anil at recoil.org>  
> wrote:
> > It should work just fine with ppx, and has the advantage of  
> reducing the number of ocamlfind calls per-file (which is a  
> considerable overhead on large projects, since it has to scan the  
> META directories on every invocation).
> 
> That's of course rather orthogonal to the present discussion, but have
> you been in contact with Gerd to see if some caching solution would be
> possible? Intuitively it feels like ocamlfind could easily maintain a
> cache in /var/run/blah and only clean it on install/remove commands.

As a system engineer I think this is overkill. ocamlfind only loads the  
META files actually needed (it does not "scan"), and loading a file  
already in the page cache is a matter of microseconds. Even when you  
have 100 packages this should be hardly noticeable. Such a cache can  
even make things worse, because loading once a large cache can be more  
costly than a few META files (simply because of the data volume).

What is probably more a problem when you have many packages: This  
generates many -I paths, and the compiler has to search for modules. I  
don't know how this is implemented, but if it is the naive way, this is  
an O(n*m) algorithm (n=number of -I directories, m=number of modules to  
look up).

Gerd


> (An external process invocation would still make some overhead so in
> you're case you'd still have to go all the way, but that could improve
> the threshold at which such ~hacks become interesting.)
> 
> On Mon, Feb 11, 2013 at 11:31 AM, Anil Madhavapeddy <anil at recoil.org>  
> wrote:
> > On 11 Feb 2013, at 10:06, Alain Frisch <alain.frisch at lexifi.com>  
> wrote:
> >>
> >> For a code base like Jane Street's where many "extensions" have to  
> be used everywhere, I suspect that the "independent" ppx processes  
> might become an issue (or maybe not, if compared to camlp4), but the  
> following solutions would work:
> >>
> >> - Statically linking a "big rewriter" called with -ppx.
> >
> > This worked well in the case of Mirage; in the monolithic  
> repository, we link together all the camlp4 extensions into a single  
> big one, and invoke that across all files.
> >
> > It should work just fine with ppx, and has the advantage of  
> reducing the number of ocamlfind calls per-file (which is a  
> considerable overhead on large projects, since it has to scan the  
> META directories on every invocation).
> >
> > There's also the advantage in camlp4 that this checks that syntax  
> extensions do not conflict. This is less of an issue with ppx,  
> thankfully.
> >
> > -anil
> > _______________________________________________
> > 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