[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: Running OCaml scripts from the command line
Also, if you consider using the toplevel. I'd recommend either rlwrap or ledit so as to have edit-line capabilities (historic of typed lines) or if you are on the emacs side of the war I hear the toplevel integration is nice. On Tue, Feb 21, 2012 at 6:11 PM, Raphael Proust <raphlalou@xxxxxxxxx> wrote: > On Tue, Feb 21, 2012 at 5:56 PM, Sebastian Probst Eide > <sebastian.probst.eide@xxxxxxxxx> wrote: >> Dear OCamlers. >> I am doing some quick and dirty OCamling, and while coding would like to >> execute my code in the toplevel, rather than first compiling it and then >> running my compiled binary. >> >> if I have a file called test1.ml, for which the following works fine: >> >> ocaml test1.ml > > On my machine this does not execute in the top level. That merely runs the > code > in the file(1) and exits. > > Consider the sh session: > raphael ~ $ cat toto.ml > print_endline "blah" > raphael ~ $ ocaml toto.ml > blah > raphael ~ $ ocaml > Â Â Â ÂObjective Caml version 3.12.0 > > # #use "toto.ml" ;; > blah > - : unit = () > # > > > Running "in the top level" is achieved by the #use primitive. (Also, toplevel > has two meaning in OCaml: a toplevel definition is a definition not nested > under > any scope and *the* toplevel is the interactive read-compile-execute-print > loop.) > >> >> But, now, if test1.ml uses the Test2 module (in test2.ml), I get a module >> missing exception. I get around this with: >> >> ocaml test2.ml test1.ml >> >> but when supplying both test2 and test1 to the ocaml toplevel, absolutely no >> code is executed at all. > > That is not true. The code in test2.ml is executed (or at least it is on my > machine): > > raphael ~ $ cat tata.ml > print_endline "fooooooooooo" > raphael ~ $ ocaml toto.ml tata.ml > blah > > And also consider: > > raphael ~ $ ocaml > Â Â Â ÂObjective Caml version 3.12.0 > > # #use "toto.ml" ;; > blah > - : unit = () > # #use "tata.ml" ;; > fooooooooooo > - : unit = () > # > > >> I have tried to use the -I flag to add the current directory to the search >> path (which it should be by default?), but without any luck. >> >> I haven't had any luck with ocamlfind either, and ocamlfind seems to be for >> finding third party libraries, rather than other modules within the same >> project? > > You can try ocamlbuild. If your project is simple enough it will make a binary > out of anything. > > To build a native executable out of the test1.ml, just type: > > $ ocamlbuild test1.native > > (replace by test1.byte for the slower but more portable bytecode version.) > > It should figure out the dependencies if they are in the same directory and > give > you a nice executable. > >> >> I hope I am missing something trivial here. >> > > $ echo "Module Test2 = struct" > one_file.ml > $ cat test2.ml >>one_file.ml > $ echo "end" >>one_file.ml > $ cat test1.ml >>one_file.ml > $ ocaml one_file.ml > > This is quick and dirty. Don't use it. > > > > (1) what it really does is compile the content to byte-code and runs it in the > ocaml VM. Code is not interpreted. > >> Thank you, and have a great afternoon! >> >> All the best, >> Sebastian >> >> > > > > -- > _______ > Raphael -- _______ Raphael
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |