I've seen in several places recommendations to use 'ocamldefun' to speed
up OCaml programs that use functors heavily [*].
I was able to find the sources via the wayback machine.
Unsurprisingly it doesn't build with OCaml 3.11.2 (it wants OCaml 3.06).
Is there a more up to date variant of ocamldefun? Would it be possible
to port it to 3.11.2?
Is it possible to implement ocamldefun-like functionality via Camlp4's
AST filters?
Also is it possible to implement function specialization
(monomorphization?) using an AST filter?
The example from the OCaml tutorial is not optimized by
http://www.ocaml-tutorial.org/performance_and_profiling.
Or is it possible to get access to the OCaml compiler's IL
representation and make optimizations on that?
[*] For example when extracting ML programs from Coq using OCaml's
native 'int' type I get code like this (which is not inlined/optimized
at all by OCaml):
module Z_as_Int =
struct
...
let _2 = 2
let mult = ( * )
..
end
module F =
functor (I:Int) ->
struct
(** val mul2 : I.int -> I.int **)
let mul2 n =
I.mult I._2 n
end
module F2 = F(Z_as_Int)
Best regards,
--Edwin
_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs
2010/5/19 T�r�k Edwin <edwin...@gmail.com>
> I was able to find the sources via the wayback machine.
> Unsurprisingly it doesn't build with OCaml 3.11.2 (it wants OCaml 3.06).
> Is there a more up to date variant of ocamldefun? Would it be possible
> to port it to 3.11.2?
>
As far as I know, there is no up to date variant of ocamldefun.
For porting to 3.11.2, you have at least to:
- update the caml AST
- migrate all the camlp4 stuff to new camlp4 or camlp5
- update the different analyses to take into account AST changes (in
particular the new caml constructs like recursive modules).
Besides ocamldefun could be hugely improved in order to generate more
efficient caml code. I know (I knew?) what to do for this purpose, but I
have no time from a while ago in order to implement myself a new version of
ocamldefun. I could provide some helps to someone motivated...
Is it possible to implement ocamldefun-like functionality via Camlp4's
> AST filters?
>
Defunctorisation is a fully syntactic task (that's not so true in presence
of recursive modules). But, among other thinks, defunctorisation requires to
perform the very same scope analysis than ocaml for binding each use of
variable to its declaration. I am not an expert of Camlp4 possibilities, but
defunctorisation requires to manipulate the full caml AST.
> Also is it possible to implement function specialization
> (monomorphization?) using an AST filter?
> The example from the OCaml tutorial is not optimized by
> http://www.ocaml-tutorial.org/performance_and_profiling.
>
I'm not an expert (again) but typing information should be required, isn't
it?
> Or is it possible to get access to the OCaml compiler's IL
> representation and make optimizations on that?
>
At this day, there is no public interface to the internal modules of the
caml compiler. But, depending on the context (possible license issues), you
could embed some parts of the caml compiler in your tool.
Hope this helps,
Julien
Thanks, this sounds good so far.
>, but I
> have no time from a while ago in order to implement myself a new version
> of ocamldefun.
Yes time is an issue for me too.
> I could provide some helps to someone motivated...
I think that'll have to be someone else than me, as I consider myself
just a beginner in OCaml.
However if you think that implementing AST transforms would be possible
for a beginner (in OCaml, I do have experience with compilers), I'm
willing to give it a try.
>
> Is it possible to implement ocamldefun-like functionality via Camlp4's
> AST filters?
>
>
> Defunctorisation is a fully syntactic task (that's not so true in
> presence of recursive modules). But, among other thinks,
> defunctorisation requires to perform the very same scope analysis than
> ocaml for binding each use of variable to its declaration. I am not an
> expert of Camlp4 possibilities, but defunctorisation requires to
> manipulate the full caml AST.
It looks like there is access to AST, I don't know if it is the full AST
or just a simplified view:
http://brion.inria.fr/gallium/index.php/Abstract_Syntax_Tree
http://brion.inria.fr/gallium/index.php/Camlp4MapGenerator
>
>
> Also is it possible to implement function specialization
> (monomorphization?) using an AST filter?
> The example from the OCaml tutorial is not optimized by
> http://www.ocaml-tutorial.org/performance_and_profiling.
>
>
> I'm not an expert (again) but typing information should be required,
> isn't it?
Right, so I would need an AST that has all the infered type information.
I don't know if Camlp4 can offer that.
>
>
> Or is it possible to get access to the OCaml compiler's IL
> representation and make optimizations on that?
>
>
> At this day, there is no public interface to the internal modules of the
> caml compiler. But, depending on the context (possible license issues),
> you could embed some parts of the caml compiler in your tool.
I think that if there is a defunctorizer written it should live in the
OCaml distribution itself (maybe in contrib/).
I certainly don't intend to write an external tool that uses OCaml
internal modules.
2010/5/20 T�r�k Edwin <edwin...@gmail.com>
>
> On 05/20/2010 11:41 AM, Julien Signoles wrote:
> I think that'll have to be someone else than me, as I consider myself
> just a beginner in OCaml.
> However if you think that implementing AST transforms would be possible
> for a beginner (in OCaml, I do have experience with compilers), I'm
> willing to give it a try.
>
I wrote ocamldefun during my master project where I done both the theory and
the implementation of this tool: I was a beginner both in ocaml and in
functional programming since I only wrote a mini-compiler in ocaml during my
studies without any lecture on functional programming. But ok: there were
ocaml experts in my research team which provide me some wonderful helps :-).
>
> I think that if there is a defunctorizer written it should live in the
> OCaml distribution itself (maybe in contrib/).
>
Ocaml is not Coq: there is no such "contrib/" directory ;-). As far as I
know, the Ocaml development team does not accept so much external
contributions (for many good reasons).
> I certainly don't intend to write an external tool that uses OCaml
> internal modules.
>
That is what ocamldefun actually does.
Best regards,
Julien
That sounds encouraging.
> But ok:
> there were ocaml experts in my research team which provide me some
> wonderful helps :-).
>
>
> I think that if there is a defunctorizer written it should live in the
> OCaml distribution itself (maybe in contrib/).
>
>
> Ocaml is not Coq: there is no such "contrib/" directory ;-).
OK, I haven't payed much attention to the structure of the OCaml
package, I just assumed there was such a directory.
> As far as I
> know, the Ocaml development team does not accept so much external
> contributions (for many good reasons).
OK, then it'll have to be an external tool (if I decide to write it
after all).
>
>
> I certainly don't intend to write an external tool that uses OCaml
> internal modules.
>
>
> That is what ocamldefun actually does.
Yes, but I was thinking of something that is using an exported and
documented interface (like camlp4).
I think it would be easier to keep up with new OCaml versions that way.