【问题标题】:Scripting Languages [closed]脚本语言[关闭]
【发布时间】:2011-03-12 16:52:49
【问题描述】:

我正在寻找一种好的脚本语言来链接到我的程序。 我正在寻找 2 个重要属性:

  • 脚本语言应该硬链接到可执行文件中(不需要第 3 方 安装)。这对我来说很重要,可以简化分发。
  • 脚本应该允许一些运行时调试选项(在我的程序中运行脚本时,我想在调试器中轻松地运行它,同时它在我的程序上下文中运行)

python、lua 或其他语言可以提供给我吗?

【问题讨论】:

  • 您应该提供有关您的程序的更多信息,即使用的语言和目标操作系统。
  • 更重要的问题是您需要哪些库。

标签: python programming-languages scripting lua dynamic-languages


【解决方案1】:

Lua 和 Python 都可以提供您提到的功能,因此选择其中之一将取决于其他标准。

Lua 是一种更轻量级的解决方案,与 Python 相比,它的磁盘占用空间要小得多,而且内存开销也可能更小。对于某些用途,它可能会更快。 Python 拥有更丰富的标准库、更成熟的第三方库和更具表现力的语言。

两者都已嵌入到主要应用程序中。在 Blender、OpenOffice 和 Civilization 4 中可以找到 Python。在魔兽世界和 Adob​​e Lightroom 中可以找到 Lua。我建议您查看每个教程以及可将它们嵌入您的应用程序的工具,然后选择最适合您大脑的教程。

【讨论】:

  • 不幸的是,Python 缺乏对“单一可执行文件”链接的真正支持。 DLL/so 库不能轻易静态编译和链接。 LUA 通过根本没有一个严肃的库来防止这个问题。
  • 文明 5 出于性能原因切换到 Lua。
【解决方案2】:

Lua设计为此:

【讨论】:

    【解决方案3】:

    通常,Lua 是嵌入到另一个项目中的更好选择。 Python 作为独立平台更好,因为库支持更广泛。详情请见Lua Versus Python

    就我个人而言,根据手头的工作,我会经常使用这两种方法。我总是使用 Lua 嵌入 C/C++ 应用程序或从 C/C++ 共享库(即 DLL)导入的脚本功能。对于不需要低级 C/C++ 代码的独立任务,Python 始终是我的首选。

    【讨论】:

      【解决方案4】:

      我愿意为 python 投入两分钱。我不知道很多细节,但是计算机图形套件搅拌器在实现 python 脚本方面做得很好。

      据我所知,在 Blender 2.5 中,解释器是从可执行文件内部运行的,

      import sys
      sys.executable
      

      显示 /blender/blender.exe 并且有很好的调试支持,它内部甚至还有一个完整的交互式解释器。

      欲了解更多信息,请查看:http://www.blender.org/

      【讨论】:

        【解决方案5】:

        我真的很喜欢 Lua 的嵌入,但作为另一种选择,JavaScript 很容易嵌入到 C、C++(SpiderMonkey 和 V8)和 Java(Rhino)程序中。

        【讨论】:

        • +1 没错,这是另一个可行的选择。如果您,或者更确切地说您的用户/脚本编写者可能已经知道它,我只会推荐它。我在上面的回答中忘记提到的一件事是,除非您嵌入脚本引擎供自己使用,否则您应该考虑将使用脚本接口的人的可能偏好和需求。
        • Simon:我不确定我是否同意这一点。曾经有一段时间,每个人都说他们希望 REXX 作为一种扩展语言,而我无法说出我在 10 多年中使用 REXX 看到的单个程序。我不认识任何人 要求 Lisp 作为他们的编辑器(甚至是 Lisp 程序员!),但现在看看 Emacs。 Javascript(大致是“具有类似 Java 语法的方案”)最初超出了编写网页的典型人员的头脑,但不知何故人们设法进行了调整。我认为,如果语言足够强大,并且用户想要破解您的程序/平台,那么用户会发现它。
        【解决方案6】:

        除了 Tcl、Lua 和 Javascript(都已经提到)之外,Guile 是另一种专门为此设计的语言。

        【讨论】:

          【解决方案7】:

          我会将 Tcl 添加到组合中。它旨在轻松嵌入到其他程序中。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-29
            • 2013-06-19
            • 2011-08-17
            • 2011-03-10
            • 2012-10-02
            • 2010-09-09
            • 2010-12-02
            • 2011-10-31
            相关资源
            最近更新 更多