17 | 脚本语言:搭建高性能的混合系统
该思维导图由 AI 生成,仅供参考
Python
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何基于C++搭建混合系统,并介绍了Python和Lua这两种脚本语言。Python通过pybind11工具实现与C++的无缝对接,提升性能,而Lua则以小巧高效著称,尤其在游戏开发领域有广泛应用。文章详细介绍了如何使用pybind11和LuaJIT,以及LuaBridge库将C++函数、类导入Python和Lua,并展示了如何在C++中嵌入Lua。总结来看,C++在混合系统中具有高效、灵活的特点,而Python和Lua分别适用于不同的场景。读者可根据实际需求选择合适的脚本语言。文章内容丰富,涵盖了技术细节和实际应用,对于想要了解混合系统搭建的读者具有一定的参考价值。
《罗剑锋的 C++ 实战笔记》,新⼈⾸单¥59
全部留言(27)
- 最新
- 精选
- 有学识的兔子1. 我想这种方式可以利用脚本语言的高产的优势,例如老师说的python; 2. 把C++嵌入到脚本语言可以有效提升脚本语言的执行效率;而把脚本语言嵌入到C++,有点通过利用脚本语言特性的优势来弥补相对C++的弱项,使得C++开发变得更灵活和开放。
作者回复: 说的很好。
2020-06-1410 - IT老兵重开始一个C++零基础的初学者,正在看一个C++开源库,这章很有启发,因工作需要改造一下开源库代码
作者回复: 从零开始学C++,真是很佩服。 我的建议是不要去抠那些内存管理、指针、构造/析构等细枝末节,先把C++当做java、Python来用,有了一些实际经验体会后再了解底层机制。
2020-09-0925 - нáпの゛老师,我复制C++ 的 string、tuple 和 vector 用于 Python 的示例代码,编译报错了,没识别到类型。 下面是部分错误信息: pybind.cpp: In function ‘void pybind11_init_videoparser(pybind11::module&)’: pybind.cpp:15:14: error: ‘string’ does not name a type [](const string& str) // 入参是string ^ pybind.cpp:19:5: error: ISO C++ forbids declaration of ‘parameter’ with no type [-fpermissive] } ^ pybind.cpp: In lambda function: pybind.cpp:20:4: error: expected ‘{’ before ‘;’ token ); ^ pybind.cpp: In function ‘void pybind11_init_videoparser(pybind11::module&)’: pybind.cpp:20:4: error: expected ‘)’ before ‘;’ token pybind.cpp:23:8: error: ‘tuple’ has not been declared [](tuple<int, int, string> x) // 入参是tuple ^ pybind.cpp:23:13: error: expected ‘,’ or ‘...’ before ‘<’ token [](tuple<int, int, string> x) // 入参是tuple ^ pybind.cpp: In lambda function: pybind.cpp:25:9: error: ‘get’ was not declared in this scope get<0>(x)++; ^ pybind.cpp:25:9: note: suggested alternative:
作者回复: 看样子好像是没识别出string、tuple等类型,应该是没打开std名字空间吧。 示例里的代码为了简单都省略了using namespace std,也许给你造成了误解,抱歉。
2020-07-2144 - reverse老师,能增加一部分内容讲讲 jsBridge吗 我正常的研发都要和nodejs打交道 但是经验不足
作者回复: 没用过jsBridge,不好讲,抱歉了。 如果是单纯地用C/C++写native接口让js调,那还是比较简单的。
2020-06-1523 - Stephen1.脚本语言实现业务比较方便,开发周期短,而C++作为底层库,运算效率高,相当于优势互补吧. 2.关于脚本语言嵌入到C++语言中,我特意查了下,网上说"游戏开发中,如果要修改C++为主体的代码逻辑,使用Lua可以不重启服务器就能做到".我平常接触比较多的是C++作为底层库嵌入到脚本语言中.感觉各有千秋,适合不同的场景吧,说不出来哪个更好
作者回复: 1.说的很好。 2.对,多语言混合编程就看应用场合,有的需要运行速度,有的需要开发效率,比重可以任意调整。
2021-07-132 - 无为而立之前用swig,再尝尝pybind11,感谢大佬提供思路
作者回复: pybind11比较现代,用C++11的特性简化了很多原来的操作,非常推荐。
2020-06-132 - 浑浑噩噩cium以前遇到过升级软件就是lua和c++配合,业务流程就是lua脚本里面控制,c++调用lua脚本。
作者回复: 对,这是一种很好的混合编程方式。
2020-06-132 - 奋斗老师,请教您三个问题: 1、除了 python 和 lua , perl 可以吗? 2、有没有 pybind11 的教程资料? 3、如果学习 c++ 必须掌握一门脚本语言,那个是首选?
作者回复: 1.perl应该也可以,不过我没研究过,不熟。 2.pybind11的GitHub上的readme就已经很详细了。 3.我觉得最好不要做选择题,而是全都要,都有各自合适的应用场合。
2021-05-261 - 易轻尘把 C++ 嵌入脚本语言:适用于脚本语言运行速度满或者和操作系统底层交互不方便的时候; 把脚本语言嵌入 C++:C++开发需要注意的点多,开发效率较低,可以使用脚本语言方便开发者
作者回复: great.
2021-04-141 - haoC++和python配合适合实现大型高并发高性能服务端吗?
作者回复: C++和python混合编程没问题,但要实现“大型高并发高性能服务端”,可能就没那么简单了。 因为C++偏向在底层写高性能组件,Python实现业务逻辑,而服务器应用一般业务比较多,这样就难以发挥C++的高性能优势,可能需要仔细划分两者的功能区。 我个人推荐用Nginx+Lua,或者是OpenResty。
2020-07-0231