[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



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.