在C ++ Windows应用程序中嵌入和扩展的简单解释器

时间:2010-10-09 16:04:17

标签: c++ python scripting lua

我需要一个简单的解释器,它将执行简单的表达式/语句的执行(评估),并且还可以从主C ++应用程序调用函数。目前我不需要编写应用程序的脚本,但以后可能会有用。

对于其他团队成员来说,从Source Repository中提取我的应用程序并构建它也不需要安装其他应用程序,库等。 搜索令人惊叹的选项,如:Python(通过Boost和/或Python API),Lua,Guile,TinyScheme。

我最接近Python,但是使用Boost,构建Python库,将主应用程序与Python连接起来的复杂任务使得这个选择太过分了,也许我错了。

此请求应该有一个简单的解决方案,您的经验和建议是什么?

4 个答案:

答案 0 :(得分:4)

您已经列出的两个很棒的选项是Python和Lua。以下是您需要考虑的一些权衡因素:

的Python

  • 一个更加完整和强大的语言(恕我直言!),随处可见的图书馆和大量的支持和社区。
  • 语法不完全类似于C
  • 虽然Python不是专为嵌入而设计的(它通常被C / C ++中的代码用作独立语言扩展),但实际上很难嵌入。官方文档包含一些示例,并且遵循Boost的示例应该不会更难。

的Lua

  • 从下往上设计嵌入,因此它应该是最简单的嵌入。
  • 比Python的语法更像C语言

如果您预见到将来需要编写脚本,那么尽早构建脚本引擎是一个好主意,因为它可能会为您开发一些有趣的可能性。上面列出的两个选项都很好,你可以毫不费力地嵌入其中任何一个。

答案 1 :(得分:3)

如果您只想评估算术表达式,请尝试使用ae这个Lua的简单接口来完成该任务。

答案 2 :(得分:2)

无论您选择哪种脚本语言(我可能会投票选择Python),您都可以考虑使用SWIG(www.swig.org)来减轻与C ++接口的负担。虽然通常用于为python(或ruby,lua,guile,以及其他许多其他人)构建C ++扩展,但它也可用于帮助嵌入。

你曾经提到过boost :: python,它肯定是一个全功能的选项,并允许更接近的Python / C ++集成(特别是涉及虚拟功能的地方)。但是,根据我的经验,SWIG更易于集成,与大量脚本语言一起使用,而对于python,则由Python的distutils本身支持。

答案 3 :(得分:1)

Guile易于嵌入和扩展,并且如果是强大的编程语言则可以设计 您可以编译libguile并将其添加到lib目录中的存储库中,或者为guile添加源代码并在用户编译项目时进行编译。
但我不试图在Windows上使用guile。