爪哇:嵌入到 Java 桌面应用程序中的脚本语言(宏)
-
02-07-2019 - |
题
我正在用 Java 编写一个图形应用程序。最终我想用脚本语言构建,这样事情就可以编程了。您推荐哪种语言库?
可能的嫌疑人是:
不太可能的候选人是:
目标受众可能不是铁杆程序员,因此首选较少晦涩难懂的语言。我的猜测是,即使 JavaScript 存在一些怪癖,他们也更容易接受它,因为他们见过它更多。
Lua似乎在C/C++中很流行,但至少LuaJava需要额外的.dll/.so,这使得部署变得复杂。
编辑:菲洛 写道 Lua 有一个 Java 实现,名为 卡鲁瓦.
相关问题:
- 现有代码库支持哪种脚本语言? (在 C/C++ 中)
- 向 .net 应用程序添加脚本功能
- 嵌入 C# 桌面应用程序的最佳脚本语言是什么。
解决方案 6
我刚刚读了史蒂夫·耶吉的 通用设计模式. 。这篇文章的主题比 Java 应用程序中的嵌入式脚本要广泛得多,但由于作者编写了一个允许脚本编写的 Java 应用程序(使用 Jython),因此我发现其中有一些有趣的见解。
JavaScript是地球上两种最好的脚本语言之一,从“脚本语言”一词中最正确的意义:也就是说,专门设计的语言是嵌入在较大的主机系统中,然后用于操纵或“脚本”对象中的主机系统中的语言。这就是JavaScript旨在做的。它具有相当小的可选扩展,它具有相当紧张的非正式规范,并且具有精心设计的界面,可在JavaScript中透明地透明宿主系统对象。
相比之下,Perl,Python和Ruby都是巨大的蔓延,所有这些都尝试(例如C ++和Java)是每项任务的最佳语言。与JavaScript竞争的唯一其他主流语言是脚本编写任意的主机系统,是Lua,以游戏行业的选择脚本语言而闻名。
我同意他的观点,将范围缩小到 JavaScript 和 Lua。
没有方便的示例,我所能做的就是说,使用JavaScript/Rhino(或Lua在JVM上使用后)可能会使我的生活更轻松。
我个人更喜欢Java平台上的JavaScript。用户群的人口规模更大。正如 Yegge 所说,它是“世界上最容易被误解的编程语言”,但该语言的可用资源量是一个优势。 犀牛 仿佛一头成熟的野兽。
其他提示
如果目标受众是“没有编程技能......”,请选择 jython (python),它很容易学习。(我7岁的女儿学得很快)
Bruce Eckel 在《Thinking in java》中用 jython 做了一章。
冒着获得“反对票”的危险,Python 比 BASIC 更容易:-)
Lua 因其语言简单、易于学习而受到赞赏。LuaJava 使用原始的 Lua 实现,使其完整,但正如您指出的那样,安装起来可能很困难。我至少知道 Lua 的纯 Java 实现: 卡鲁瓦. 。它并不完整(缺乏协程支持等,但没有它们也可以做很多事情),但也许已经可以用于您的目标。
与 Groovy 不同,它不会给您的应用程序增加太多开销......
还有 BeanShell,它的优点是成为完全认可的 JSR,因此也许更有可能保留下来。
Java 6 已经将 javascript 作为开箱即用的 JSR 223 脚本语言提供。
我目前正在寻找一个允许我使用 Lua 脚本中的 Java 对象和方法的库。
我的第一个想法是也使用 LuaJava,但由于我希望它能够在 Linux、Mac 和 Windows 上运行,所以我被它除了 Java 之外还使用编译的库这一事实所推迟。只有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 的东西,需要反射)。
你可能会考虑 雅克. 。它基于 Tcl,最初被设计为一种嵌入式脚本语言。因此,有人可能会说,它比其他能够嵌入附加功能的脚本语言更适合这一目的。
特别是如果目标受众是“不是铁杆程序员”,Jacl 会做出不错的选择。聪明的人(尤其是那些没有硬连线编程偏见的人)可以在早上轻松掌握 Tcl 语法。
您可以使用 相对代理 - Java,它提供了真正的、纯粹的Java作为脚本语言,包括用Java编写的shell脚本,这要归功于它的动态编译。由于 Java“脚本”是共享启动器类加载器执行的,因此集成非常简单。