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

我正在用Java编写图形应用程序。 最终我想用脚本语言构建,所以事情是可编程的。 你推荐哪种语言库?

可能的嫌疑人是:

  • 犀牛 (JavaScript)
  • JRuby (Ruby)
  • Jython (Python)

不太可能的候选人是:

  • 使用JavaCC掀起我自己的语言
  • LuaJava (Lua)
  • Groovy的
  • JavaFX的
  • 脚本富

目标受众可能不是硬核程序员,因此不太喜欢使用较为神秘的语言。 我的猜测是JavaScript更容易被他们接受,即使它的怪癖只是因为他们已经看到了更多。

Lua似乎在C / C ++中很受欢迎,但至少LuaJava需要额外的.dll / .so,这使部署变得复杂。

编辑: PhiLho写道,有一个叫做kahlua的Lua的Java实现。


相关问题:

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

如果目标受众是“没有编程技能……”选择jython(python)它很容易学习。 (我7岁的女儿很快学会了)

布鲁斯·埃克尔(Bruce Eckel)在“思考java”中用jython作了一章。

在危险中获得“向下投票”的python更容易作为BASIC 🙂

除了其他方面,Lua还因语言的简单性而受到赞赏,因此易于学习。 LuaJava使用原始的Lua实现,使其完整,但正如您所指出的,安装可能很精致。 我至少知道Lua的纯Java实现: Kahlua 。 它不完整(除了其他东西缺乏协程支持,但没有它们可以做很多事情)但可能已经可以用于你的目标。
与Groovy不同,它不应该为您的应用程序增加太多开销……

如果你想全力以赴,你可以利用JSR 223 定义的Java平台脚本。采用这种方法可以让应用程序使用任何具有符合标准的脚本引擎的语言。

还有BeanShell,它具有成为完全认可的JSR的优势,因此可能更有可能坚持下去。

http://www.beanshell.org/

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

我刚刚阅读了Steve Yegge的通用设计模式 。 这篇文章的内容比Java应用程序中的嵌入式脚本更广泛,但由于作者编写了一个允许脚本编写的Java应用程序(使用Jython),因此我发现有一些有趣的见解点。

JavaScript是地球上最好的两种脚本语言之一,最正确的术语是“脚本语言”:即专门设计用于嵌入较大主机系统然后用于操作或“编写脚本”的语言主机系统中的对象。 这就是JavaScript的目的。 它有一些相当小的可选扩展,它有一个相当紧凑的非正式规范,它有一个精心设计的界面,用于在JavaScript中透明地显示主机系统对象。

相比之下,Perl,Python和Ruby是巨大的蔓延,所有尝试(如C ++和Java)都是每项任务的最佳语言。 另一种与JavaScript竞争用于编写任意主机系统脚本的主流语言是Lua,它以游戏行业首选的脚本语言而闻名。

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

如果没有简单的示例,我所能做的就是说使用JavaScript / Rhino(或Lua,一旦它在JVM上可用)可能会让我的生活变得更轻松。

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

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

我的第一个想法是使用LuaJava,但是因为我希望它可以在Linux,Mac和Windows上工作,所以我被它除了Java之外还使用了编译的lib这个事实推迟了。 只有Windows预编译的二进制文件可用,而且我不是Mac的专家,所以我试图用纯Java找到一些东西,我发现了这个: http : //sourceforge.net/projects/luaj

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

该项目似乎非常先进,有一些来自Lua(!)的Swing调用的例子,他们在我的Linux机器上工作。 但奇怪的是,邮件列表,论坛和文档真的很少。

我也会在Windows和Mac上尝试这个。 希望它有效。

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

另一方面,LuaJ有两个版本,一个针对J2SE实现所有内容(协同程序也是如此),另一个针对J2ME,我认为它缺少2或3个库(包括需要reflection的LuaJava东西)。

你可能会考虑Jacl 。 它基于Tcl,最初设计为可嵌入的脚本语言。 因此,有人可能会认为它比其他具有嵌入式嵌入function的脚本语言更适合于此目的。

特别是如果目标受众是“非核心程序员”,Jacl做出了不错的选择。 智能人员(尤其是那些没有硬连线编程偏见的人)可以在早上轻松获取Tcl语法。

您可以使用RelProxy – Java,它提供真实和纯Java作为脚本语言,包括使用Java编写的shell脚本,这要归功于它的动态编译。 因为执行Java“脚本”共享启动器ClassLoader,所以集成很简单。