1

众所周知,我们可以在 OCaml 顶层使用 #use 指令来加载 ml 文件然后执行。

而且我们还可以使用ocaml.exe来加载和执行ml文件。

这里我的要求对这两种情况有一些变化:

我有一个主进程,他创建了一个 ocaml 顶层来执行脚本,这两个进程与共享内存和 stdin/stdout 通信。共享内存的地址(令牌)在 Sys.argv 中给出。

问题是,我想在创建进程后动态加载ml文件,所以一开始没有给出要执行的ml。

如果我用“ocaml.ml xx.ml [params]”开始这个过程,脚本将立即执行,我不能在脚本开始后简单地使用#use指令。

如果我进入交互模式,我无法提供共享地址,因为一旦我提供这些婴儿车,它们就会被视为 ml 文件名。

所以有人有实现它的想法吗?ocaml 顶层是一个后台服务,它调用一个脚本,一旦启动就进入一个事件循环。

4

1 回答 1

0

在我看来,您可以在进入事件循环之前将用于通信的参数发送到交互式顶层。

或者您可以使用编译器库直接控制 repl 并交错Toploop.execute_phraseToploop.use_silently.

另一种选择可能是生成本机进程并使用动态链接而不是加载 ml 文件。

于 2018-07-18T11:32:29.923 回答