5

前段时间,我阅读了有关JavaTM Scripting API的信息,但我找不到有关 Oracle JVM 实现了哪些语言解释器(JS 除外)的信息。我在哪里可以找到完整列表?或者 JVM 默认情况下除了 JavaScript 什么都不解释?

ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript"); // what else?
4

2 回答 2

2

我在@Jesper 的帮助下找到了答案。javax.script.ScriptEngineManagergetEngineFactories()返回...的方法

...一个列表,其元素是发现机制找到的所有 ScriptEngineFactory 类的实例。

我编写了这个代码片段来获取支持的引擎列表:

ScriptEngineManager factory = new ScriptEngineManager();
for (ScriptEngineFactory sef : factory.getEngineFactories()) {
    System.out.println(sef.getEngineName() + " (" + sef.getLanguageName() + ")");
}

输出:

Mozilla Rhino (ECMAScript)

Rhino是完全用 Java 编写的 JavaScript 的开源实现。

结论:

Oracle JDK 只有一种嵌入式脚本语言解释器——JS 解释器。

于 2013-03-11T15:51:33.700 回答
2

我猜你知道我要说的大部分内容,但以免其他人偶然发现这个不知道的人:

默认情况下包含 Javascript,因为它是参考实现 (Rhino)。将其视为“嵌入式”并不完全正确——该实现恰好被捆绑为 JSR-223 的参考实现。据我所知,它与任何其他实现没有什么不同,只是它恰好默认存在。

但是,存在许多其他语言的实现,不是 JVM/JDK 特定的(只需要 Java 6 或更高版本),并且在应用程序中添加相当简单。

我使用过 Perl、Groovy、Haskell、Javascript 和 Python 以及其他一些(进行一些性能测试,可能将其用作解决方案)。

如果您想安装它们,有很多可用的语言: https ://confluence.deri.ie:8443/display/romulus/JSR+223+compliant+scripting+languages

于 2013-03-11T17:23:14.230 回答