Ocaml - 代码作为字符串的运行时编译

Ocaml - Runtime compilation of code as a string

我想解析和编译我在运行时编写的函数,例如我有以下在运行时生成的字符串:

let str = "fun x y z -> [x; y; z;]"

我正在寻找能让我做类似以下事情的东西:

let myfun = eval str 
(* eval returns the value returned by the code in the string so myfun will 
   have the type: 'a -> 'a -> 'a -> 'a list*)

有没有办法在 OCaml 中做到这一点?我遇到了 Dynlink,但我正在寻找一种更简单的方法。

没有比编译代码和 Dynlinking 生成的库更简单的解决方案了。

或者等效地,可以使用 REPL,将字符串写入文件系统,然后使用 #use.

加载它

根据您的具体用例,MetaOCaml 可能是替代方案。

另一个重点是类型不能依赖于非依赖类型语言中的值。因此需要限制 eval 的类型。例如,在 Dynlinking 路径中​​,动态链接函数的类型将由用于注册它们的挂钩类型决定。