【问题标题】:Java: Scripting language (macro) to embed into a Java desktop applicationJava:嵌入到 Java 桌面应用程序中的脚本语言(宏)
【发布时间】:2010-09-13 16:34:47
【问题描述】:

我正在用 Java 编写一个图形应用程序。最终我想建立一种脚本语言,这样事情就可以编程了。你推荐哪个语言库?

可能的嫌疑人是:

不太可能的候选人是:

目标受众可能不是铁杆程序员,因此首选不那么晦涩难懂的语言。我的猜测是 JavaScript 更容易被他们接受,即使它有怪癖,只是因为他们看到的更多。

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

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


相关问题:

【问题讨论】:

    标签: java javascript scripting lua jython


    【解决方案1】:

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

    Bruce Eckel 在“thinking in java”中与 jython 合写了一章。

    在获得“否决”python 的危险中比 BASIC 更容易 :-)

    【讨论】:

      【解决方案2】:

      Lua 因其语言简单、易于学习而受到赞赏。 LuaJava 使用原始的 Lua 实现,使其完整,但正如您指出的那样,安装起来可能很微妙。我至少知道 Lua 的纯 Java 实现:Kahlua。它不完整(除其他外缺少协程支持,但没有它们可以做很多事情)但可能已经可以用于您的目标。
      与 Groovy 不同,它不会给您的应用程序增加太多开销...

      【讨论】:

        【解决方案3】:

        如果您想全力以赴,您可以使用 JSR 223 的 defined 为 Java 平台编写脚本。采用这种方法将允许应用程序使用任何符合 script engine 的语言。

        【讨论】:

        • “然而,用于 JavaScript 编程语言的 Mozilla Rhino 引擎目前作为一项功能包含在 JDK 6 和 JRE 6 库中。”这会让 Rhino 稍微领先于其他所有人吗?
        • 理论上确实如此。我还不确定这就是现实中发生的事情。
        【解决方案4】:

        还有 BeanShell,它的优势是成为完全认可的 JSR,因此可能更容易留下来。

        http://www.beanshell.org/

        【讨论】:

        • 另外:它基本上是动态的 Java,所以很容易将它附加到 Java 程序中。缺点:它基本上是动态 Java,因此它可能不是最容易学习的语言。
        • 如果我喜欢Java,并且我使用Java,但我不想让我的用户知道他们正在运行Java应用程序,那是不是有点像为丑陋的女朋友感到羞耻?不,对吧?
        【解决方案5】:

        Java 6 已经将 javascript 作为 JSR 223 脚本语言提供,开箱即用。

        【讨论】:

        • 它随 Rhino 一起提供,我也评论了 laz 的答案。理论上,这是官方的背书。
        【解决方案6】:

        我刚刚阅读了 Steve Yegge 的 The Universal Design Pattern。这篇文章的主题比 Java 应用程序中的嵌入式脚本要广泛得多,但是由于作者编写了一个允许编写脚本的 Java 应用程序(使用 Jython),因此我发现了一些有趣的观点。

        而 JavaScript 是两个最好的之一 地球上的脚本语言,在 该术语的最正确含义 “脚本语言”:即, 设计的语言 专门嵌入更大的 主机系统,然后用于 在 主机系统。这就是 JavaScript 被设计来做。这是合理的 小,带有一些可选的扩展, 它有一个相当紧凑的非正式 规范,它有一个仔细 精心制作的表面处理界面 主机系统对象透明地 JavaScript。

        相比之下,Perl、Python 和 Ruby 巨大的蔓延,都在尝试(比如 C++ 和 Java)成为最好的语言 每一项任务。唯一的其他主流 与之竞争的语言 用于任意编写脚本的 JavaScript 主机系统是 Lua,以 选择的脚本语言 游戏行业。

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

        没有手边的例子,我只能 是说使用 JavaScript/Rhino (或 Lua,一旦它在 JVM) 可能已经成就了我的生活 更容易。

        我个人更喜欢 Java 平台上的 JavaScript。用户基数更大。 正如 Yegge 所说,它是“世界上最容易被误解的编程语言”,但该语言的可用资源量是一个加分项。 Rhino 似乎是一只成熟的野兽。

        【讨论】:

          【解决方案7】:

          我目前正在寻找一个允许我使用 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 的东西,它需要反射)。

          【讨论】:

            【解决方案8】:

            您可以考虑Jacl。它基于最初设计为可嵌入脚本语言的 Tcl。因此,有人可能会争辩说,它比其他能够嵌入附加的脚本语言更适合该目的。

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

            【讨论】:

              【解决方案9】:

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

              【讨论】:

                猜你喜欢
                • 2011-02-11
                • 1970-01-01
                • 2011-04-06
                • 2023-03-18
                • 2011-03-24
                • 2010-09-13
                • 2013-11-11
                • 2012-03-22
                • 1970-01-01
                相关资源
                最近更新 更多