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

Re: Running OCaml scripts from the command line



On Wed, Feb 29, 2012 at 9:28 AM, Sebastian Probst Eide
<sebastian.probst.eide@xxxxxxxxx> wrote:
> I have never tried it myself, but this looks like what you want:
> http://www.vim.org/scripts/script.php?script_id=2771
>
> What I have also seen people do is split their terminal window (using screen 
> for example), with a interactive shell + vim.

tmux lets you split your terminal but it messes ncurse (and other
terminal interfaces) up. screen is better but only has horizontal
split (annoying with the modern wide-screens). There are other
alternatives I haven't tried.

>
> Let me know how it works!

I use Conque sometime. Once you've gone over the weird interaction
between the modal editor and the non-modal shell, it's okay.

>
> On 28 Feb 2012, at 22:00, Anil Madhavapeddy wrote:
>
>> 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
>



-- 
_______
Raphael



 


Rackspace

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