什么是现有Java应用程序的良好嵌入式语言?

时间:2009-10-20 21:43:55

标签: java clojure embedded-language ioke

我想在我的应用程序中嵌入dsl或现有的完整语言。它应该是一个简单,完整的图灵完整语言,但是简单而且足够轻,可以在不需要太多开销的情况下解释代码。

其他“进程”也不会影响任何其他进程。

我正在考虑使用Clojure并在Clojure代码上调用Clojure解释器/运行时编译器,但Clojure运行时需要比我需要的时间长得多。此外,我对使用Clojure语言进行此项目并不过分兴奋。我在考虑更多程序性和类似C语言。

我考虑过Ola Bini的Ioke语言。 http://ioke.org/index.html

另外,我考虑在Scala中编写DSL?或者使用现有的DSL。

更新:看起来Rhino是一个很好的示例嵌入式语言。

http://www.mozilla.org/rhino/tutorial.html

6 个答案:

答案 0 :(得分:14)

答案 1 :(得分:9)

Groovy的动态特性非常适合编写DSL。事实上,Grails Web框架实现了大量Groovy DSL,以及大量教程和书籍,教授如何使用Groovy编写DSL。

另外,Groovy的语法几乎是Java的超集,所以它应该相对容易上手(与Clojure相比)。在Java和Groovy代码之间调用是无缝的,因此您可以轻松地在Groovy代码中使用所有您喜欢的JDK类。

我倾向于避免IOKE因为它不成熟而且出于DSL的目的,我认为像Groovy或JavaScript这样的动态类型语言是比Scala更好的选择。

答案 2 :(得分:2)

我建议使用Java。它是:众所周知,快速,易于与Java集成,稳定,静态类型,易于迁移的代码等等。

答案 3 :(得分:2)

查看scripting.dev.java.net以获取用于在Java应用程序中嵌入其他语言的脚本引擎列表。请注意,一些引用的语言现在附带了自己的JSR 223集成,因此不需要第三方库来使用它们。

答案 4 :(得分:1)

如果你想要DSL,那么你真的不想嵌入现有语言,你想创建一个“领域特定语言”。对我而言,这意味着不仅仅是更改一些关键字而不是使用括号。

例如,现在我正在进行电视调度。当我们为测试创建虚假指南数据时,我们总是添加一个看起来像这样的评论(直接从我正在进行的测试中切出):

 * TIME:8.....30....9.....30....10....30....11....30....12....30....
 * 4FOX:____________[Spotlight.............][Jeopardy..]____________
 * 6CBS:[Heroes....][Heroes....][Heroes....]________________________
 * 8HMK:xx[A.River.Runs.Through.It....][Blades.Of.Glory...]_________

如果我必须创建更多指南数据,我会直接将这些注释解释为DSL(将它们设为长字符串或字符串数​​组而不是注释)。

那将是一个合适的DSL。

如果您刚刚嵌入了一种灵活的语言,那么Groovy或JRuby就是为此而设计的,就像BeanShell一样。

事实上,有一个完整的API围绕可替换的插件脚本语言构建,因此您应该能够使用任何所需的JVM语言,而不是稍微更改一下代码。

答案 5 :(得分:-1)

根据你的规范,一个小的BrainF * ck翻译应该没问题。)

如果它不是完全您的想法,那么请考虑您想要解决的问题。你的案例研究是什么?是否能够在以后随意添加新代码而无需重新部署应用程序的新版本?