From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail1-relais-roc.national.inria.fr (mail1-relais-roc.national.inria.fr [192.134.164.82]) by yquem.inria.fr (Postfix) with ESMTP id 53D7BBC58 for ; Tue, 14 Sep 2010 14:43:42 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgAHAHYKj0w+BBBmc2dsb2JhbAChZAEMCgsHEQMfwk2FQASFG4UM X-IronPort-AV: E=Sophos;i="4.56,364,1280700000"; d="scan'208";a="67562340" Received: from smtp-102-tuesday.nerim.net (HELO kraid.nerim.net) ([62.4.16.102]) by mail1-smtp-roc.national.inria.fr with ESMTP; 14 Sep 2010 14:43:42 +0200 Received: from hector.lesours (ours.starynkevitch.net [213.41.244.95]) by kraid.nerim.net (Postfix) with ESMTP id C5460CFF49; Tue, 14 Sep 2010 14:43:41 +0200 (CEST) Received: from basile18 by hector.lesours with local (Exim 4.72) (envelope-from ) id 1OvUrN-00037K-GJ; Tue, 14 Sep 2010 14:43:41 +0200 Date: Tue, 14 Sep 2010 14:43:41 +0200 From: Basile Starynkevitch To: Vincent Gripon , caml-list@yquem.inria.fr Subject: Re: [Caml-list] Compiling Ocaml sources to c sources Message-ID: <20100914124341.GA11500@hector.lesours> References: <4C8F660B.4060901@telecom-bretagne.eu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4C8F660B.4060901@telecom-bretagne.eu> User-Agent: Mutt/1.5.20 (2009-06-14) X-Spam: no; 0.00; basile:01 basile:01 ocaml:01 0200,:01 planing:01 ocaml:01 compilable:01 runtime:01 runtime:01 non-trivial:01 recursion:01 bytecode:01 translating:01 byte:01 compiler:01 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: basilestarynkevitchnet mobile: +33 6 8501 2359 8, rue de la Faiencerie, 92340 Bourg La Reine, France *** opinions {are only mines, sont seulement les miennes} ***