众所周知,我们可以在OCaml顶层使用#use指令来加载ml文件,然后执行。
我们还可以使用ocaml.exe加载和执行ml文件。
在这里,我的要求对这两种情况有一些更改:
我有一个主进程,他创建了一个ocaml顶层来执行脚本,这两个进程与共享内存和stdin / stdout通信。共享内存的地址(令牌)在Sys.argv中给出。
问题是,我想在创建进程后动态加载ml文件,因此首先不给出要执行的ml。
如果我使用“ ocaml.ml xx.ml [params]”启动该过程,该脚本将立即执行,并且在脚本开始之后我不能简单地使用#use指令。
如果进入交互模式,我将无法提供共享地址,因为一旦提供这些婴儿车,它们就会被视为ml文件名。
因此,有人想实现它吗? ocaml顶级是一项后台服务,它调用一个脚本,该脚本一旦启动便进入事件循环。
答案 0 :(得分:0)
在我看来,您可以在进入事件循环之前将用于通信的参数发送到交互式顶层。
或者您可以使用编译器库直接控制repl并交错Toploop.execute_phrase
和Toploop.use_silently
。
另一种选择可能是生成本机进程并使用动态链接而不是加载ml文件。