【发布时间】:2020-08-10 07:21:12
【问题描述】:
我正在尝试创建一种可编译为 Clojure 的脚本语言,然后在 JVM 上运行它。每个单独的脚本,在同一个 JVM 实例中,但以独立的方式。
然而,当我看到实现时,我看到 Clojure 环境(命名空间等)是全局的,因此一个脚本可能对命名空间进行的任何更改都会影响后续脚本。
我想知道是否有一种方法可以在一个 JVM 中拥有多个临时的、隔离的 Clojure 环境实例。如果不是,我可以使用哪种策略来避免污染全局命名空间并可能导致内存泄漏。
【问题讨论】:
-
也许让每个脚本根据脚本文件名编译成单独的命名空间。
-
查看 github.com/Raynes/clojail 以获取有助于运行 沙盒 Clojure 代码的库。
-
这是2013年去年摸过的库,不知道能不能信。
-
必须是您生成的 Clojure 代码吗?如果您生成 Java 代码,则可以查看 Janino 编译器,它可以嵌入到正在运行的 JVM 中,并将代码编译为无需重新启动 JVM 即可加载的类:janino-compiler.github.io/janino跨度>
-
是的,我也在尝试 Groovy。
标签: java clojure clojure-java-interop