caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] [Question] Loading .ml in memory to interact with them.
@ 2017-03-23  9:37 paul.lachat
  2017-03-23 13:02 ` Sébastien Hinderer
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: paul.lachat @ 2017-03-23  9:37 UTC (permalink / raw)
  To: caml-list

[-- Attachment #1: Type: text/plain, Size: 1623 bytes --]

Hello, 

I need to find a way to put Ocaml program in memory so I could interact with the program 
(call function, get result, find information about the variables, ...) without always reading the file. 

That what append when we use the directive #use "file.ml";; in the interactive shell (the toplevel, when you type the command ocaml in a shell). 

The instruction need to come from a Matlab function. So, I was thinking to create a process who run the ocaml command, 
redirect his standard input in a named pipe, redirect his standard output in another named pipe, so I could send instructions and received responses. 

But when I send the first instruction (ex : #use "file.ml";;\n), the ocaml process send back the response and stop. 

____ 

file.ml : 
let x = 10;; 

____ 

"#use "file.ml";;\n" 
Matlab -- /tmp/pipe_in --> ocaml 

"val x : int = 10" 
Matlab <-- /tmp/pipe_out -- ocaml 
then ocaml stop... 

___ 


So I would like to know if you think it's a good solution and if it is, do someone know how could I make it work ? 

_ 

I've tried another solution. I use Unix.fork() and launch, in the son process, the ocaml command then 
I send instructions from the father process to the son process with anonym pipe (Unix.pipe()). 

But here I have trouble with blocking read, I send an instruction, read the answer but even if I've read all char of the answer, it's wait to read 
more but there is no more to read... 

I have tried to use Unix.set_nonblock() and catch EAGAIN, but then I don't get anything at all in the buffer given to Unix.read(). 

If someone could help, I would be grateful ! 
Lachat Paul 


[-- Attachment #2: Type: text/html, Size: 3602 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread
* Re: [Caml-list] [Question] Loading .ml in memory to interact with them.
@ 2017-03-24 14:43 Oleg
  0 siblings, 0 replies; 10+ messages in thread
From: Oleg @ 2017-03-24 14:43 UTC (permalink / raw)
  To: paul.lachat, caml-list, Kim.Nguyen


> The problem here is that echo (or printf) closes the pipe_in fifo,
> hence sending EOF to the ocaml toplevel. You need to force the fifo to
> somehow remain open.

Eons ago, back in the last century, I wrote a simple tool for that task
        http://okmij.org/ftp/Communications.html#sh-agents
to script almost anything from really anything. I used it to drive
Mathematica (on a remote machine) from Emacs and database CLI tools.

(I just realized it has been 20 years...)

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2017-03-24 14:42 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-23  9:37 [Caml-list] [Question] Loading .ml in memory to interact with them paul.lachat
2017-03-23 13:02 ` Sébastien Hinderer
2017-03-23 13:26   ` paul.lachat
2017-03-23 13:41     ` Sébastien Hinderer
2017-03-23 13:57       ` paul.lachat
2017-03-23 14:24 ` Evgeny Roubinchtein
2017-03-23 15:09 ` François Bobot
     [not found]   ` <CAGYXaSbcqNWcXe1MLm_YyS28N7ji3td=L_jFVv35=50oSxaUDQ@mail.gmail.com>
2017-03-23 15:50     ` François Bobot
2017-03-24  9:04 ` Kim Nguyễn
2017-03-24 14:43 Oleg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).