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

3
我需要一个简单的解释器,能够执行简单的表达式/语句并从主要的C++应用程序中调用函数。目前我不需要对应用程序进行脚本编写,但以后可能会有用。
此外,其他团队成员应该可以轻松地从源代码库中获取我的应用程序并构建它,而无需安装其他应用程序、库等。搜索结果显示有多种选择,例如:Python(通过Boost和/或Python API)、Lua、Guile、TinyScheme。
我最接近Python,但使用Boost、构建Python库以及将主应用程序与Python进行接口处理是一项复杂的任务,这个选择可能过于复杂了,或许我错了。
对于这个请求,应该有一个简单的解决方案,你有什么经验和建议?
4个回答

4

你已经列出了Python和Lua这两个很好的选择。以下是一些权衡考虑:

Python

  • 更加完整和强大的语言(在我看来!), 有着任何库和无处不在的支持和社区。
  • 语法不完全类似于C
  • 虽然Python并非专为嵌入式设计(它通常作为一个单独的语言'扩展'到C/C++代码中),但嵌入Python并不是太困难。 官方文档包含一些示例,并且遵循Boost的示例不应该太难。

Lua

  • 从底层开始设计,因此嵌入最简单。
  • 语法比Python更类似于C

如果您预计将来需要脚本,请尽早建立一个脚本引擎,因为它可能会为您开启一些有趣的可能性,在开发程序时使用。 上述两个选项都很好,您应该没有太多麻烦就可以嵌入它们。


3
如果您只想评估算术表达式,请尝试ae,这是一个用于此任务的Lua简单接口。

据我从README.txt中所看到的,它是一个在Lua之上工作的C扩展(因此我想构建它需要lua库)。它能够评估像这样的语句吗:如果条件1和条件2或条件3,则返回X? - boskom
1
是的,但是由于ae假设它正在评估表达式,你必须使用Lua习语来替换条件运算符。在这种情况下,直接使用Lua可能更容易。如果您不打算加载扩展模块,您可以直接从源代码构建Lua到您的项目中,或者如果需要,可以将其用作共享库。这两种方法在Windows上都非常容易实现。 - RBerteig

2
无论您选择哪种脚本语言(我可能会推荐Python),您都可以考虑使用SWIG(www.swig.org)来简化与C ++的接口。虽然通常用于构建C++扩展程序以供Python(或Ruby,Lua,Guile等许多其他语言)使用,但它也可用于嵌入式编程。
您提到了boost::python,这当然是一个功能齐全的选项,并允许在Python/C++集成方面实现更紧密的结合(特别是涉及虚函数的情况)。然而,在我的经验中,SWIG更容易集成,适用于大量的脚本语言,并且对于Python,它还得到了Python的distutils的本地支持。

1

Guile易于嵌入和扩展,Scheme是一种强大的编程语言。
您可以编译libguile并将其添加到lib目录中的存储库中,或者在用户编译项目时添加guile源代码并进行编译。
但我没有尝试在Windows上使用guile。


我不确定Guile在Windows应用程序中占据了多少地位,通常没有主要的应用程序使用Guile脚本编写,但它的复兴可能会改变这一点。 - boskom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接