On Tue, Sep 14, 2010 at 02:09:47PM +0200, Vincent Gripon wrote:
> Hello,
>
> We are currently planing to participate to a programming contest.
It would be interesting for us to know more about that contest.
> This contest allows the use of four languages (C/C#/C++/java) but
> not OCaml.
That does not mean much. What about libraries you are calling from C?
In particular:
* can you use any library? This seems strange (because the
organizers very probably won't have the same libraries or versions
as you have).
* do you have any restrictions on the libraries you are using?
* at the extreme case, the competition might require you to provide
all the sources of every non standard (in the sense of ISO C
standard) libraries you are using, and a verified mean to build
them. What about POSIX system calls?
>
> We would like to use Ocaml as it is to us the language that fits the
> most the kind of exercises proposed. The organizers don't mind if we
> use OCaml as long as we provide an easily compilable C source to
> them, even if it is not readable.
>
> Is there any platform independent way to compile OCaml sources to C
> sources?
I don't see any easy way to do that. There are several issues
* the Ocaml runtime environment, which not only includes its garbage
collector but also all the ocaml runtime library.
* Hacking a C generator inside Ocaml is non-trivial, because of the
garbage collector, currified function calls, and tail recursion
etc.
* If you really insist on coding in Ocaml and if you don't care much
about performance, you could take my bit-rotten Ocamljit work (I
forgot where you can find it, and I don't have it anymore, but
google should help finding it) and make something which transform
the entire bytecode of an Ocaml program into a gigantic single C
function (translating straightforwardly every byte code into a
small chunk of C code). This is not easy to do, and it might not
be fun neither. Very probably, a C compiler would have pain to
optimize such a big function (by personal experience, the GCC
compiler usually take O(n^2) time to optimize with -O2 a
sufficiently large function of size n, and may also need O(n^2)
memory). And such an approach might not produce portable code
(perhaps there are some issues w.r.t. 32 vs 64 bits
systems). Actually, portable C is a fiction: only ported C
programs can exist.
Did you also consider using Scheme, it has several implementations
generating C code (Chicken & Stalin come to mind).
But still, programming in C does not mean much! What about
portability? building? external libraries? linking other stuff? target
system?
If you have complete freedom on what you link with your program, you
could hack a libocamlrun to be linkable, and link the bytecode as an
array, as suggested previously.
I would imagine that preparing stuff to make you code in Ocaml and fit
into the contest rules is a big lot of work.
Cheers.
--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mines, sont seulement les miennes} ***
_______________________________________________
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