最近发生火灾的Alphago,其中depmind已经开源,可以在github下载。网上还有一个基于Python开源的Alphago,不是google。通过查看deepmind源码,我们可以知道AlphaGo使用Clphago 和Lua方案。当然,语言不是AlphaGo的重点,但它仍然表明C 并且Lua方案可以完成大型项目。
Lua从2009年开始被引入三维仿真项目,C 大大提高了项目的开发效率。Lua在我们对性能要求较高的三维仿真项目中,对性能影响不大。我第一次接触Lua是在魔兽世界里看到任务脚本。后来,我看了云峰的博客。他在网易的网络游戏中介绍了Lua,这让我决定在我的项目中介绍这个脚本。目前,许多应用程序和游戏也使用LUA作为嵌入式脚本语言,以实现可配置性和可扩展性。它包括魔兽世界、博德之门、愤怒的鸟类、VOCALOID3、三国杀死太阳神 等。在玩游戏的时候,你会经常看到lua后缀的脚本文件。
2010年,我公司开始进入视频处理领域。由于视频分析处理对性能和技术的要求较高,开发成本也很高,一般为一两年 经验丰富的开发人员很难取得成果,但在引入Lua后,一些新人也可以参与项目。核心结构建成后,Lua将部分业务逻辑引入Lua进行开发,不仅提高了开发效率,对开发人员的要求也降低了。
总结了这些年的项目开发,对C 不管项目有多大,一定要引用一个脚本,Lua是比较成熟可靠的方案之一。Lua脚本源代码非常小,不依赖,可以在各种平台上轻松编译。Lua源代码不仅提供执行代码,还提供编译代码,即您可以编译您写的Lua脚本,以防止源代码泄露,提高执行效率。Lua脚本还提供调试断点函数,所以您可以开发自己的调试工具。当然,也有第三方提供的开源断点调试工具。我们都知道写c 如果不能调试程序,开发效率会大大降低。这也是我暂时没有使用nodee的Lua.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函数也比较简单。稍后我将发表一些详细的教学文章。
网友评论