简单的解释器,可嵌入和扩展到C++ Windows应用程序中
我需要一个简单的解释器,它可以执行一些简单的表达式或语句,还能从主C++应用程序中调用函数。目前我不需要对应用程序进行脚本编写,但将来可能会用到。
这个解释器应该让其他团队成员能够轻松地从源代码库中获取我的应用程序,并进行构建,而不需要安装额外的应用程序、库等。
我搜索了一下,发现了一些选项,比如:Python(通过Boost和/或Python API)、Lua、Guile、TinyScheme。
我对Python最感兴趣,但使用Boost、构建Python库,以及将主应用程序与Python连接起来的复杂性,让我觉得这个选择可能有点过于复杂,也许我想错了。
我觉得应该有一个简单的解决方案来满足这个需求,你们有什么经验和建议吗?
4 个回答
2
无论你选择哪种脚本语言(我个人可能会推荐Python),你可以考虑使用SWIG(www.swig.org)来简化与C++的连接。SWIG通常用来为Python(或者Ruby、Lua、Guile等很多其他语言)构建C++扩展,但它也可以帮助你进行嵌入。
你提到的boost::python确实是一个功能齐全的选项,它可以让Python和C++的结合更紧密,尤其是在涉及虚拟函数的时候。不过,根据我的经验,SWIG更容易集成,支持很多脚本语言,而且对于Python来说,它是Python的distutils原生支持的。
3
如果你只是想计算一些数学表达式,可以试试ae,这是一个简单的工具,可以帮助你用Lua来完成这个任务。
4
你提到的两个不错的选择是Python和Lua。下面是一些你可以考虑的优缺点:
Python
- 这是一种功能更全面、更强大的语言(个人认为!),有很多库可以用,支持和社区也非常多,随处可见。
- 语法和C语言不完全一样。
- 虽然Python不是专门为嵌入设计的(它更常作为独立语言使用,通常会用C/C++代码来扩展),但嵌入起来并不难。官方文档里有一些例子,跟着Boost的例子做也不会太复杂。
Lua
- 从一开始就为嵌入设计,所以嵌入起来应该是最简单的。
- 语法比Python更接近C语言。
如果你预见到将来会需要脚本功能,早早地在程序里加入一个脚本引擎是个好主意,这样在开发过程中可能会带来一些有趣的可能性。上面提到的两个选项都不错,你应该能轻松地嵌入它们。