Java:嵌入到Java桌面应用程序中的脚本语言(宏)

时间:2020-03-06 14:49:20  来源:igfitidea点击:

我正在用Java编写图形应用程序。最终,我想构建一种脚本语言,以便可以进行编程。我们推荐哪种语言库?

可能的嫌疑人是:

  • Rhino(JavaScript)
  • JRuby(Ruby)
  • Jython(Python)

不太可能的候选人是:

  • 使用JavaCC整理自己的语言
  • LuaJava(卢阿)
  • Groovy
  • JavaFX
  • 脚本赋

目标受众可能不是硬核程序员,因此首选较少的奥秘语言。我的猜测是,即使他们有一些古怪的想法,JavaScript也会被他们接受,因为他们看得更多。

Lua在C / C ++中似乎很流行,但是至少LuaJava需要添加的.dll / .so,这使部署变得复杂。

编辑:
PhiLho写道,Lua有一个Java实现,称为kahlua。

相关问题:

  • 现有代码库中支持哪种脚本语言? (在C / C ++中)
  • 向.net Apps添加脚本功能
  • 嵌入C#桌面应用程序中的最佳脚本语言是什么。

解决方案

如果目标受众是"没有编程技能...。",则选择jython(python)很容易学习。 (我7岁的Daugther很快学到了它)

布鲁斯·埃克尔(Bruce Eckel)与jython共同撰写了" java中的思想"一章。

像BASIC一样容易冒"下票" python的危险:-)

除了其他方面,Lua还因为其语言的简单性而变得易学易懂。 LuaJava使用原始的Lua实现,使其完整,但是正如我们所指出的那样,安装起来可能很麻烦。我至少知道Lua的一个纯Java实现:Kahlua。它并不完整(缺少协程支持,但没有它们就可以做很多事情),但也许已经可以用于目标。
与Groovy不同,它不应该给应用程序增加太多开销。

还有一个BeanShell,它具有成为完全认可的JSR的优点,因此很可能会留下来。

http://www.beanshell.org/

我们可能会考虑Jacl。它基于最初设计为可嵌入脚本语言的Tcl。因此,可以说它比其他具有嵌入功能的脚本语言更适合于此目的。

特别是如果目标受众是"不是硬核程序员",Jacl就是一个不错的选择。聪明的人(尤其是那些没有硬性编程偏见的人)可以在早晨轻松地掌握Tcl语法。

如果我们想全力以赴,可以使用JSR 223定义的Java平台脚本。采用这种方法将允许应用程序使用具有兼容脚本引擎的任何语言。

Java 6已经开箱即用,可以作为JSR 223脚本语言使用javascript。

我刚刚读过史蒂夫·耶格(Steve Yegge)的"通用设计模式"。这篇文章的主题不仅限于Java应用程序中的嵌入式脚本编写,还涉及到更广泛的话题,但是由于作者编写了一个允许使用脚本编写(使用Jython)的Java应用程序,所以我发现了一些有见地的观点。

And JavaScript is one of the two best
  scripting languages on the planet, in
  the most correct sense of the term
  "scripting language": namely,
  languages that were designed
  specifically to be embedded in larger
  host systems and then used to
  manipulate or "script" objects in the
  host system. This is what JavaScript
  was designed to do. It's reasonably
  small with some optional extensions,
  it has a reasonably tight informal
  specification, and it has a carefully
  crafted interface for surfacing
  host-system objects transparently in
  JavaScript.
  
  In contrast, Perl, Python and Ruby are
  huge sprawls, all trying (like C++ and
  Java) to be the best language for
  every task. The only other mainstream
  language out there that competes with
  JavaScript for scripting arbitrary
  host systems is Lua, famous for being
  the scripting language of choice for
  the game industry.

我同意他缩小JavaScript和Lua的范围。

Without the examples handy, all I can
  do is say that using JavaScript/Rhino
  (or Lua, once it became available on
  the JVM) might have made my life
  easier.

我个人更喜欢Java平台上的JavaScript。用户群的人口更大。
正如Yegge所说的那样,它是"世界上最容易被误解的编程语言",但是该语言上可用的资源量是一个加号。犀牛似乎是成熟的野兽。

我目前正在寻找一个库,该库将允许我使用Lua脚本中的Java对象和方法。

我的第一个想法是也使用LuaJava,但是由于我希望它可以在Linux,Mac和Windows上使用,因此我不赞成它,除了Java之外,它还使用编译的lib。只有Windows预编译的二进制文件可用,并且我不是Mac方面的专家,因此我尝试在纯Java中找到某些东西,并且发现了这一点:http://sourceforge.net/projects/luaj

它似乎实现了Lua文档中描述的C API以及LuaJava中的API。

该项目似乎真的很高级,有Lua(!)进行的Swing调用的示例,它们可以在我的Linux机器上使用。但是奇怪的是,邮件列表,论坛和文档确实很少。

我也将在Windows和Mac上尝试此操作。希望它能工作。

已经提到了Kahlua,但是它仅针对J2ME,这就是为什么它缺少Lua的某些部分的原因。我认为有一个名为Mochalua的项目具有相同的目标。

另一方面,LuaJ有两个版本,一个针对实现所有功能的J2SE(也包括协程),另一个针对J2ME,缺少我认为的2或者3个库(包括LuaJava的东西,需要反思)。