English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
[Caml-list] Functors, inlining and Camlp4
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2001-10-09 (17:10)
From: Daniel de Rauglaudre <daniel.de_rauglaudre@i...>
Subject: Re: [Caml-list] Functors, inlining and Camlp4

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

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