【发布时间】:2014-10-15 02:28:01
【问题描述】:
我有一种小型语言,它基本上是 OCaml 的扩展(实际上它是 OCaml 子集的扩展,但这并不重要)。为了简化事情,我有一个“转义”表达式,可以将 OCaml 文字传输到我的语言中(因此您可以将任意 OCaml 代码嵌入到该语言中)。将这样的表达式编译为 OCaml 只是意味着解开字符串,但是如何评估它呢?
当然,我了解 OCaml 是一种静态类型语言以及该类型系统的一般工作原理。因此,我还需要能够提供一个环境并检查表达式的推断类型(或至少应对类型错误)。我也意识到需要管理解释器状态等。让我们暂时假设嵌入的表达式没有副作用。
显然这是可能的,因为 utop 和 toplevel 都是在 OCaml 中实现的。所以我的第一个想法是选择其中一个并根据我的需要进行调整。现在解决我的问题:
toplevel 显然是主要分布的一部分。尽管有一个具有必要功能的 toplevel.mli 甚至是 .mllib,但我找不到作为 打包库 的顶层 - 是否需要进一步的配置调整才能获得“解释器作为库”包?
utop 似乎做了更奇怪的事情。从我可以从源代码中得知,它在构建时将一些编译器库复制到其源目录中。这似乎很奇怪:如果它在构建时知道如何找到这些编译器库,为什么不简单地链接?
那么有什么合理的方法可以将 OCaml 解释器嵌入到 OCaml 程序中?
【问题讨论】:
-
不包含你需要的'compiler-libs.toplevel'?
-
确实。我不知道确切的库名称。能否请您对此做出回答,以便我接受?
-
@choeger 我认为自己这样做是可以的。 (/我不想窃取业力信用,但仍然希望得到正确的答案。)
标签: embed ocaml interpreter staging