2008-08-18 25 views
6

我正在寻找将脚本功能添加到现有的代码库,并且正在权衡各种软件包的优缺点。 Lua可能是最明显的选择,但我想知道人们是否有基于他们的经验的其他建议。在现有代码库中支持哪种脚本语言?

脚本将在某些事件发生时触发,并可能会在一段时间内保持常驻状态。例如,在启动时,脚本可以定义该程序作为多个按钮呈现给用户的几个选项。选择其中一个按钮后,程序将通知脚本进一步发生事件。

这些是唯一真正的要求;

  1. 必须是一个跨平台的库,从源代码编译
  2. 脚本必须能够调用注册代码端功能
  3. 代码必须能够调用脚本端功能
  4. 被使用在C/C++代码库中。

回答

3

  • 的Python。恕我直言,这是一个不错的选择。我们有一个非常大的代码库,有很多用户,他们非常喜欢它。
  • 红宝石。有一些非常好的应用程序,例如Google Sketchup使用它。我写了一个Sketchup插件,并认为它非常好。
  • Tcl。这是老派可嵌入的脚本语言的选择,但它现在没有太大的动力。不过质量很高,他们在哈勃太空望远镜上使用它!
  • Lua。我只用它做了宝贝,但是IIRC只有浮点数字类型,所以请确保这对您将要使用的数据没有问题。

我们很幸运能够生活在脚本的黄金时代,所以如果您选择任何流行的选择都很难作出不好的选择。

1

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

我并不完全正面,但我认为spidermonkey你的4个要求。

1

我已经为此目的广泛使用了Python,并且从未后悔过它。根据我自己的经验

1

Lua拥有最直接的C API来绑定到我曾经使用过的代码库中。事实上,我通常手动快速地为它绑定。然而,如果没有其他发电机,例如swig,您通常不会考虑这样做。此外,它通常比替代品更快,重量更轻,coroutines是其他语言提供的非常有用的功能。

1

AngelScript

,您可以调用标准C函数和C++的方法,无需代理功能。应用程序只需注册脚本应该能够使用的功能,对象和方法,而不必使用代码进行更多操作。脚本引擎也可以使用应用程序在内部使用的相同功能,这样就不需要复制功能。

对于编剧的脚本语言遵循C/C++(有微小的变化)的广为人知的语法,但无需担心指针和内存泄漏。

0

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

0

你可能会使用任何现代的脚本/字节码语言。

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

1

原始问题描述Tcl为“T”。

的Tcl从一开始就设计成一个嵌入式脚本语言。它已经发展成为一流的动态语言,但仍被全世界用作嵌入式语言。它可以在BSD许可下使用,因此它可以随意获得。它也编译几乎所有的现代平台,还有许多不太现代的平台。它不仅适用于桌面系统,还有可用于移动平台的变体。

Tcl的擅长的“胶水”的语言,在这里你可以用C写性能密集型功能,同时还从脚本语言的优势中获益的应用程序的性能较差关键部分。

Tcl的还带有一个第一类的GUI工具包(TK),其可以说是可用的最简单的跨平台的GUI工具包中的一个。它还与SQLite和其他数据库非常好地接口,并且在一段时间内已经内置了对unicode的支持。

如果您的客户可以使用脚本界面(而不是简单地让自己的工程师在脚本级别工作),Tcl非常容易学习,因为总共只有12条规则管理整个语言(从tcl 8.6开始)。实际上,Tcl作为发明特定于域的语言的一种方式,通常被用作最终用户脚本解决方案。

0

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