我想在我的应用程序中嵌入 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

有帮助吗?

解决方案

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

同样,Groovy的语法几乎是Java的超集,因此相对容易拾取(与Clojure相比)。 Java和Groovy代码之间的调用是无缝的,因此您可以轻松地使用Groovy代码中的所有喜欢的JDK类。

我倾向于避免由于其不成熟而避免iOke,并且出于DSL的目的,我认为像Groovy或JavaScript这样的动态键入语言是比Scala更好的选择。

其他提示

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

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

如果您想要 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 语言,而无需更改您的代码。

小脑袋*CK解释器应根据您的规格很好:)

如果不是 相当 您想到的是,然后考虑要解决的问题。您的案例研究是什么?是否可以稍后将不需要重新部署您的应用程序的新经验?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top