我正在考虑向现有代码库添加脚本功能,并权衡各种包的优缺点。Lua 可能是最明显的选择,但我想知道人们是否根据他们的经验有任何其他建议。

脚本将在某些事件发生时触发,并可能驻留一段时间。例如,在启动时,脚本可以定义多个选项,程序将这些选项作为多个按钮呈现给用户。选择这些按钮之一后,程序将通知脚本可能发生进一步事件的位置。

这些是唯一真正的要求;

  1. 必须是可从源代码编译的跨平台库
  2. 脚本必须能够调用注册的代码端函数
  3. 代码必须能够调用脚本端函数
  4. 在 C/C++ 代码库中使用。
有帮助吗?

解决方案

根据我自己的经验:

  • Python。恕我直言,这是一个不错的选择。我们有一个相当大的代码库,有很多用户,他们非常喜欢它。
  • 红宝石。有一些非常好的应用程序,例如 Google Sketchup,就使用了它。我写了一个 Sketchup 插件,觉得它很不错。
  • Tcl。这是首选的老式嵌入式脚本语言,但现在它没有太大的发展势头。不过它的质量很高,他们在哈勃太空望远镜上使用它!
  • 卢阿。我只用它做了一些小东西,但 IIRC 它只有浮点数字类型,所以请确保这对于您将要使用的数据来说不是问题。

我们很幸运生活在脚本编写的黄金时代,因此如果您从任何流行的脚本中进行选择,都很难做出错误的选择。

其他提示

我玩过一点 蜘蛛猴. 。看起来在你的情况下至少值得一看。我也听说过有关 Lua 的好消息。使用 javascript 脚本语言的一个重要论点是,许多开发人员已经了解它,并且从一开始就可能会更舒服,而 Lua 很可能有一点学习曲线。

我并不完全肯定,但我认为蜘蛛猴满足你的 4 个要求。

为此,我广泛使用了 Python,并且从未后悔过。

Lua 具有最直接的 C API,用于绑定到我使用过的代码库。事实上,我通常会用手快速地卷装订。然而,如果没有像这样的生成器,您通常不会考虑这样做 痛饮 为他人。此外,它通常比替代品更快、更轻,并且 协程 是很少有其他语言提供的非常有用的功能。

天使脚本

让您无需代理函数即可调用标准 C 函数和 C++ 方法。应用程序只需注册脚本应该能够使用的函数、对象和方法,而无需对代码执行任何其他操作。应用程序内部使用的相同功能也可以由脚本引擎使用,从而消除了重复功能的需要。

对于脚本编写者来说,脚本语言遵循广为人知的 C/C++ 语法(稍作更改),但无需担心指针和内存泄漏。

最初的问题将 Tcl 描述为“T”。

Tcl 从一开始就被设计为一种嵌入式脚本语言。它本身已经发展成为一流的动态语言,但仍然在世界各地作为嵌入式语言使用。它在 BSD 许可证下可用,因此它几乎是免费的。它还可以在几乎所有现代平台以及许多不那么现代的平台上编译。它不仅适用于桌面系统,还有适用于移动平台的变体。

Tcl 是一种出色的“粘合”语言,您可以用 C 语言编写性能密集型函数,同时仍然可以从应用程序中对性能要求较低的部分的脚本语言的优势中受益。

Tcl 还附带了一流的 GUI 工具包 (Tk),它可以说是最简单的跨平台 GUI 工具包之一。它与 SQLite 和其他数据库的接口也非常好,并且长期以来一直内置对 unicode 的支持。

如果脚本接口可供您的客户使用(而不是简单地让您自己的工程师在脚本级别工作),Tcl 非常容易学习,因为总共只有 12 条规则来管理整个语言(如tcl 8.6)。事实上,Tcl 作为一种发明领域特定语言的方式而大放异彩,这通常是它被用作最终用户脚本解决方案的方式。

已经有一些很好的建议,但我只是想提一下 Perl 也可以调用/可以调用 C/C++。

您可能可以使用任何现代脚本/字节码语言。

如果您愿意忍受新产品的成长烦恼,您可以使用 鹦鹉 虚拟机。它支持许多(如果不是全部)本页列出的语言。不幸的是它还没有完成,但这并没有阻止一些人在生产环境中使用它。

我想大多数人可能都会提到他们最熟悉的脚本语言。从我的角度来看,Tcl 是专门为与 C 交互而设计的,因此您的问题域是为该语言量身定制的。不过,我确信 Python、Perl 或 Lua 都可以。您可能应该选择当前团队最熟悉的语言,因为这会减少学习时间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top