在C++项目中引入Lua(AlphaGo使用的方案)

在C++项目中引入Lua(AlphaGo使用的方案)

  最近大火的AlphaGo,其中的deepmind已经开源,可以到github中下载·,网上还有一个基于Python开源AlphaGo,那个不是google的。通过看deepmind源码,我们可以知AlphaGo使用的是C++和Lua方案。当然语言不是AlphaGo的重点,但还是说明了c++和Lua方案能够完成大型的项目。

     从2009年开始在三维仿真项目中引入Lua,C++项目的开发效率得到了大幅度。在我们三维仿真这种对性能要求较高的项目中,Lua对性能并没有造成大的影响。

     我最早接触Lua是看到魔兽世界中的任务脚本,后来看了云风的博客,他在网易的网游中引入了Lua,这让我确定了在我的项目中引入这种脚本。当前还有很多应用程序和游戏也是使用LUA作为嵌入式脚本语言,以此来实现可配置性、可扩展性。这其中包括魔兽世界、博德之门、愤怒的小鸟、VOCALOID3、太阳神三国杀 等。你在玩游戏时看他的安装目录中,你会经常看到lua后缀的脚本文件。

     这2010年我公司开始进入视频处理领域,由于视频分析处理对性能要求和技术要求较高,所以开发成本也很高,一般一两年c++经验的开发人员很难做出成果,但是在引入了Lua之后,一些新人也可以参与到项目中去了,在核心架构搭建好后,通过引入Lua将部分业务逻辑放到Lua中开发,不仅提高了开发效率,对开发人员要求也降低了。

      在这多年项目开发中总结出来,对于c++项目不管多大,一定要引用一种脚本,Lua是其中比较成熟可靠的方案。Lua脚本源码非常小没有依赖,可以很容易在各个平台上编译,Lua源码不仅提供了执行代码,还提供了编译代码,也就是说你可以将你写过的Lua脚本进行编译以防止源码泄露,并提高执行效率。Lua脚本内部还提供了调试断点函数,所以你可以自己开发一个调试工具,当然也有第三方提供的开源断点调试工具,我们都知道写c++程序如果不能调试那开发效率一定会大幅度降低。这也是我使用Lua,暂时还没有使用node.js的原因。

下面介绍一下Lua:

      Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。

      Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。

      Lua还具有其它一些特性:同时支持面向过程(procedure-oriented)编程和函数式编程(functional programming);自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程 ,并非操作系统所支持的线程)支持;通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等。

我们做一个示例 lua调用c++函数

////////////////////////////////////////////////////////////////////////////

///C++代码部分

int LuaCallC(lua_State *L)

{

    //获取第一个参数

    int para1 = lua_tonumber(L, 1);

    //获取第二个参数

    int para2 = lua_tostring(L, 2);

    return 0;

}

//注册这个C++函数给lua调用

lua_register(lua, "LuaCallC", LuaCallC);

-----------------------------------------------------

---Lua代码部分

---调用c++函数

LuaCallC(100,"teststring")

      这个示例只是演示下调用过程,多类型参数、返回值、类型检查都没有加。但通过这个示例可以看出来C++与Lua交互的简单,同样C++调用Lua函数也比较简单。后面我会再来出一些详细教学文章。也可以在网上搜索我的视频课程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,509评论 25 707
  • 1. 写在前面 很多时候我们都需要借助一些脚本语言来为我们实现一些动态的配置,那么就会涉及到如何让脚本语言跟原生语...
    杰嗒嗒的阿杰阅读 3,423评论 9 31
  • 此时此刻我觉得我妈对生活的要求一点都不高。 妈妈和爸爸的婚姻生活磕磕绊绊了一辈子! 从小家里的吵闹声时断时续,都有...
    春雨_373c阅读 156评论 0 0
  • 东野圭吾说 只要心中有未来 人就能幸福 今天和我的朋友吃饭时她说 我考了这个公务员 我好像真的一点也看不到自己的...
    专liberty阅读 360评论 0 0