关于数据驱动:在现有代码库中支持哪种脚本语言?

关于数据驱动:在现有代码库中支持哪种脚本语言?

Which scripting language to support in an existing codebase?

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

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

这些是唯一真正的要求;

  • 必须是可从源代码编译的跨平台库
  • 脚本必须能够调用已注册的代码端函数
  • 代码必须能够调用脚本端函数
  • 在 C/C 代码库中使用。

  • 根据我自己的经验:

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

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


    原始问题将 Tcl 描述为"T"。

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

    Tcl 擅长作为一种"胶水"语言,您可以在其中使用 C 编写性能密集型函数,同时仍然受益于脚本语言在应用程序中对性能不太重要的部分的优势。

    Tcl 还带有一流的 GUI 工具包 (Tk),它可以说是可用的最简单的跨平台 GUI 工具包之一。它还可以很好地与 SQLite 和其他数据库进行交互,并且已经内置了对 unicode 的支持很长一段时间了。

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


    天使脚本

    lets you call standard C functions and C++ methods with no need for proxy functions. The application simply registers the functions, objects, and methods that the scripts should be able to work with and nothing more has to be done with your code. The same functions used by the application internally can also be used by the scripting engine, which eliminates the need to duplicate functionality.

    For the script writer the scripting language follows the widely known syntax of C/C++ (with minor changes), but without the need to worry about pointers and memory leaks.


    Lua 拥有最直接的 C API,用于绑定到我用过的代码库。事实上,我通常会快速手动为其滚动绑定。然而,如果没有像 swig 这样的生成器,你通常不会考虑这样做。此外,它通常比替代方案更快、更轻量级,并且协程是很少有其他语言提供的非常有用的功能。


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


    我玩过一点蜘蛛猴。在您的情况下,它似乎至少值得一看。我也听说过关于 Lua 的好消息。使用 javascript 脚本语言的一大理由是,许多开发人员已经知道它并且可能从一开始就更舒服,而 Lua 很可能有一点学习曲线。

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


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


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

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


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


    推荐阅读