【问题标题】:Load ml files dynamically in OCaml toplevel?在 OCaml 顶层动态加载 ml 文件?
【发布时间】:2018-07-18 19:32:29
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

  • 你写过.ocamlinit文件吗?
  • 是的,但这对我来说并没有任何改变,实际上我不想进入交互模式而是repl。

标签: ocaml ocaml-toplevel


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    相关资源
    最近更新 更多