caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] Functors, inlining and Camlp4
@ 2001-10-09 15:54 Nicolas barnier
  2001-10-09 17:10 ` Daniel de Rauglaudre
  0 siblings, 1 reply; 2+ messages in thread
From: Nicolas barnier @ 2001-10-09 15:54 UTC (permalink / raw)
  To: Caml

Bonjour,

I've recently "functorized" some piece of code containing critical fragments 
(very frequently called and which process data) to broaden its use, and I 
ended up with an horrible loss of 20% up to 50% (avg 30%) of the execution 
times for my benchmark. So after profiling and checking the mailing archive, 
I've figured out that essentially the lack of inlining in functor application 
was guilty. In one of his answer, Xavier suggested to "manually" inline 
critical code, which, I guess, means to withdraw the functors and 
duplicate/specialize the module code. But I'm quite reluctant to mess it up 
this way. I hardly know anything about Camlp4, but I was wondering if it 
would be possible to automate this tedious task by preprocessing the sources 
with this very trendy and (apparently) cool tool - written by who ? ;-) 
Perhaps could it work for a subset of the functor language ?

Any hint from Daniel's fans or even the guru himself ?

Thanks


-- Nicolas

"Jesus saves, but only Buddha makes incremental backups."
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [Caml-list] Functors, inlining and Camlp4
  2001-10-09 15:54 [Caml-list] Functors, inlining and Camlp4 Nicolas barnier
@ 2001-10-09 17:10 ` Daniel de Rauglaudre
  0 siblings, 0 replies; 2+ messages in thread
From: Daniel de Rauglaudre @ 2001-10-09 17:10 UTC (permalink / raw)
  To: Caml

Hi,

> In one of his answer, Xavier suggested to "manually" inline critical
> code, which, I guess, means to withdraw the functors and
> duplicate/specialize the module code. But I'm quite reluctant to
> mess it up this way. I hardly know anything about Camlp4, but I was
> wondering if it would be possible to automate this tedious task by
> preprocessing the sources

1/ First answer...

Mmmm... Seen like that, I don't think that Camlp4 can help. Inlining
supposes to know what a definition of a variable (or a function) is,
what is not supposed to be the job of a syntactic preprocessor. For
it, when you write:
     let x = y + 1

it is interpreted (in Camlp4) as "the specific construction 'let'
which has its specific syntax". That's all.

The fact that "let" corresponds to a binding is semantics, not
syntax. In particular, such an imaginary Camlp4 inlining could not be
applied between two compilation units (i.e. between two files). If you
write "Foo.xxx" in file bar.ml, Camlp4 just ignores what this "xxx"
is and where Foo comes from.

Well, you could imagine to do some semantics just inside a file, but
I am not sure that it would be Camlp4 politically correct.

2/ Second answer...

In general, in Camlp4, syntax extensions are "meta" relative to the
program. To inline x, a correct usage is not to write:
     let x = y + 1

and hope that "x" could be inlined, but rather write a file defining
x as a macro for y. This file should be separately compiled and the
resulting cmo file given as parameter to Camlp4 command line.

An improvement could be to add a syntax extension to do macros in
general. I implemented that some time ago (but it is not distributed).
If people ask for it, I can add it in the next version of Camlp4/OCaml.
With this syntax extension you can write:
     DEFMACRO x = y + 1

and every x is inlined into "y + 1" in the current file; notice that
in this case, there is no definition of x; the DEFMACRO is a directive
to the preprocessor.

(in this system, macros can have parameters)

-- 
Daniel de RAUGLAUDRE
daniel.de_rauglaudre@inria.fr
http://cristal.inria.fr/~ddr/
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2001-10-09 17:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-10-09 15:54 [Caml-list] Functors, inlining and Camlp4 Nicolas barnier
2001-10-09 17:10 ` Daniel de Rauglaudre

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).