[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Running OCaml scripts from the command line



Out of interest, do you guys have any way of running a shell inside vim,
so I can run a top-level directly as a vim pane? I would find that most
useful, but I lack the vim-fu.  I used to use an external patch for this
about 5 years ago, but it seems to have disappeared and not been
integrated.

-anil

On Tue, Feb 21, 2012 at 06:15:15PM +0100, Raphael Proust wrote:
> 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
> 

-- 
Anil Madhavapeddy                                 http://anil.recoil.org



 


Rackspace

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