在现有代码库中支持哪种脚本语言?
Posted
技术标签:
【中文标题】在现有代码库中支持哪种脚本语言?【英文标题】:Which scripting language to support in an existing codebase? 【发布时间】:2010-09-06 03:11:28 【问题描述】:我正在考虑向现有代码库添加脚本功能,并正在权衡各种软件包的优缺点。 Lua 可能是最明显的选择,但我想知道人们是否根据他们的经验有任何其他建议。
脚本将在某些事件时触发,并且可能会驻留一段时间。例如,在启动时,一个脚本可以定义几个选项,程序将这些选项作为多个按钮呈现给用户。选择其中一个按钮后,程序将通知脚本可能会发生更多事件。
这些是唯一真正的要求;
-
必须是可从源代码编译的跨平台库
脚本必须能够调用已注册的代码端函数
代码必须能够调用脚本端函数
在 C/C++ 代码库中使用。
【问题讨论】:
【参考方案1】:根据我自己的经验:
蟒蛇。恕我直言,这是一个不错的选择。我们有一个相当大的代码库,有很多用户,他们非常喜欢它。 红宝石。有一些非常不错的应用程序,例如使用它的 Google Sketchup。我写了一个 Sketchup 插件,觉得很不错。 Tcl。这是首选的老式可嵌入脚本语言,但如今它的势头并不大。不过它的质量很高,他们在哈勃太空望远镜上使用它! 卢阿。我只用它做过婴儿用品,但 IIRC 它只有一个浮点数字类型,所以请确保这对您将使用的数据没有问题。我们很幸运生活在脚本的黄金时代,因此如果您从任何流行的脚本中进行选择,都很难做出错误的选择。
【讨论】:
【参考方案2】:我玩过Spidermonkey。在您的情况下,它似乎至少值得一看。我也听说过关于 Lua 的好消息。使用 javascript 脚本语言的一大理由是,许多开发人员已经知道它并且可能从一开始就更舒服,而 Lua 很可能有一点学习曲线。
我并不完全肯定,但我认为蜘蛛猴是你的 4 个要求。
【讨论】:
【参考方案3】:我为此目的广泛使用了 Python,并且从未后悔过。
【讨论】:
【参考方案4】:Lua 拥有最直接的 C API,用于绑定到我用过的代码库。事实上,我通常会快速手动为其滚动绑定。然而,如果没有像 swig 这样的生成器,您通常不会考虑这样做。此外,它通常比其他语言更快、更轻巧,而且coroutines 是其他语言很少提供的非常有用的功能。
【讨论】:
【参考方案5】:AngelScript
让您无需代理函数即可调用标准 C 函数和 C++ 方法。应用程序只需注册脚本应该能够使用的函数、对象和方法,而无需对您的代码进行任何操作。应用程序内部使用的相同功能也可以被脚本引擎使用,这样就无需复制功能。
对于脚本编写者而言,脚本语言遵循广为人知的 C/C++ 语法(稍作改动),但无需担心指针和内存泄漏。
【讨论】:
【参考方案6】:原始问题将 Tcl 描述为“T”。
Tcl 从一开始就被设计为一种嵌入式脚本语言。它本身已经发展成为一流的动态语言,但仍作为嵌入式语言在世界范围内使用。它在 BSD 许可下可用,因此它几乎是免费的。它还可以在几乎任何现代平台上编译,而且很多不是那么现代。它不仅适用于桌面系统,还有适用于移动平台的变体。
Tcl 擅长作为一种“胶水”语言,您可以在其中使用 C 编写性能密集型函数,同时仍受益于脚本语言在应用程序中对性能不太重要的部分的优势。
Tcl 还带有一流的 GUI 工具包 (Tk),可以说是最简单的跨平台 GUI 工具包之一。它还可以很好地与 SQLite 和其他数据库进行交互,并且已经内置了对 unicode 的支持很长一段时间了。
如果您的客户可以使用脚本接口(而不是简单地让您自己的工程师在脚本级别工作),那么 Tcl 非常容易学习,因为总共只有 12 条规则来管理整个语言(从 tcl 8.6 开始)。事实上,Tcl 作为一种发明领域特定语言的方式而大放异彩,这通常是它用作最终用户脚本解决方案的方式。
【讨论】:
【参考方案7】:已经有一些很好的建议,但我只想提一下 Perl 也可以调用/可以调用 C/C++。
【讨论】:
【参考方案8】:您可能可以使用任何现代脚本/字节码语言。
如果您愿意忍受新产品的成长烦恼,您可以使用Parrot VM。它支持此页面上列出的许多(如果不是全部)语言。不幸的是,它还没有完成,但这并没有阻止一些人在生产环境中使用它。
【讨论】:
【参考方案9】:我认为大多数人可能会提到他们最熟悉的脚本语言。从我的角度来看,Tcl 是专门为与 C 接口而设计的,因此您的问题域是为该语言量身定制的。但是,我确信 Python、Perl 或 Lua 都可以。您可能应该选择当前团队最熟悉的语言,因为这会减少学习时间。
【讨论】:
以上是关于在现有代码库中支持哪种脚本语言?的主要内容,如果未能解决你的问题,请参考以下文章