Re: [Caml-list] OCaml defunctorization and other optimizations

2010-05-20 Thread Julien Signoles
Hello,

2010/5/19 Török Edwin edwinto...@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
___
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


Re: [Caml-list] OCaml defunctorization and other optimizations

2010-05-20 Thread Julien Signoles
Hello,

2010/5/20 Török Edwin edwinto...@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
___
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


Re: [Caml-list] OCaml defunctorization and other optimizations

2010-05-20 Thread Török Edwin
On 05/20/2010 02:40 PM, Julien Signoles wrote:
 Hello,
 
 2010/5/20 Török Edwin edwinto...@gmail.com mailto:edwinto...@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.

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.

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


Re: [Caml-list] OCaml defunctorization and other optimizations

2010-05-20 Thread Maxence Guesdon
On Thu, 20 May 2010 15:04:44 +0300
Török Edwin edwinto...@gmail.com wrote:

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

If you decide to do so, you can have a look at oug[1] distrib, which uses
internal modules of OCaml. You could copy the configuration machinery
(configure.in, configure, checkocaml.ml) used to detect/indicate ocaml
programs and ocaml compiled sources.

Hope this helps,

Maxence

[1] http://home.gna.org/oug/index.en.html

-- 
Maxence Guesdon http://yquem.inria.fr/~guesdon/
Service Expérimentation et Développements https://sed-roc.inria.fr/
INRIA Paris-Rocquencourt  http://www.inria.fr/rocquencourt/



___
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


[Caml-list] OCaml defunctorization and other optimizations

2010-05-19 Thread Török Edwin
Hi,

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