在C+中嵌入和扩展的简单解释器+;Windows应用程序 我需要一个简单的解释器,它可以执行简单的表达式/语句的执行(评估),也可以从主C++应用程序调用函数。目前我不需要编写应用程序的脚本,但以后可能会有用

在C+中嵌入和扩展的简单解释器+;Windows应用程序 我需要一个简单的解释器,它可以执行简单的表达式/语句的执行(评估),也可以从主C++应用程序调用函数。目前我不需要编写应用程序的脚本,但以后可能会有用,c++,python,scripting,lua,C++,Python,Scripting,Lua,对于其他团队成员来说,从源代码库中提取我的应用程序并构建它,而不必安装额外的应用程序、库等,这也应该是一个很简单的过程。 搜索相关选项,如:Python(通过Boost和/或Python API)、Lua、Guile、TinyScheme 我是最接近Python的,但是使用Boost、构建Python库、将主应用程序与Python连接的复杂任务使这个选择显得有些过分,也许我错了 对于这个请求,应该有一个简单的解决方案,您的经验和建议是什么?Guile很容易嵌入和扩展,如果使用强大的编程语言,则可

对于其他团队成员来说,从源代码库中提取我的应用程序并构建它,而不必安装额外的应用程序、库等,这也应该是一个很简单的过程。 搜索相关选项,如:Python(通过Boost和/或Python API)、Lua、Guile、TinyScheme

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


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

Guile很容易嵌入和扩展,如果使用强大的编程语言,则可以使用scheme。
您可以编译libguile并将其添加到lib目录中的存储库中,或者在用户编译项目时为guile添加源代码并进行编译。

但我不想在Windows上使用guile。

您已经列出的两个很好的选项是Python和Lua。以下是供您考虑的一些权衡:

python
  • 这是一种更完整、更强大的语言(IMHO!),它有各种各样的库、大量的支持和社区
  • 语法并不完全像C
  • 虽然Python并不是专门为嵌入而设计的(它更多的是作为一种独立的语言使用,由C/C++中的代码扩展),但它确实很难嵌入。官方文档中包含了一些例子,遵循Boost的例子应该不会太难
卢阿
  • 自下而上设计用于嵌入,因此它应该是最简单的嵌入方式
  • 语法比Python更像C语言

如果您预见到未来对脚本的明确需求,那么尽早构建脚本引擎是一个好主意,因为在您继续开发程序时,它可能会为您带来一些有趣的可能性。上面列出的两个选项都是很好的选项,您应该可以毫不费力地嵌入其中任何一个。

如果您只想计算算术表达式,请尝试为该任务提供一个简单的Lua接口

>不管你选择哪种脚本语言(我都会投票给Python),你可以考虑使用SWIG(www. SWig.org)来减轻与C++的接口负担。虽然通常用于为Python(或Ruby、Lua、Gule等任何其他)构建C++扩展,但它也可以用于帮助嵌入。


您提到了boost::python,它当然是一个功能齐全的选项,并允许更紧密的python/C++集成(特别是在涉及虚拟函数的情况下)。然而,根据我的经验,SWIG更容易集成,可以与脚本语言的SCAD一起工作,对于python来说,它本机由python的distutils支持。

我不确定guile在windows应用程序中占据了多大的立足点,通常没有用guile编写的主要应用程序,它的复兴可能会改变这一点。据我在README.txt中看到的,它是一个在Lua之上工作的C扩展(所以我想构建它需要Lua库)。它是否可以计算如下语句:if Conditon1和Codnition2或condition3比返回X?是的,但由于ae假定它是在计算表达式,因此必须使用Lua惯用法替换条件运算符。在这种情况下,直接使用Lua可能更容易。如果您不打算加载扩展模块,则可以直接在项目中从源代码构建Lua,如果您打算加载扩展模块,则可以在共享库中使用它。即使在Windows上,这两种方法也很容易实现。