Posts Tagged ‘lua’

下面这个简单的例子,从文本文件中读取一行脚本,并且将c中的变量值传进去,用脚本进行运算,将结果返回给c程序。 /** * @file prototype.cpp * @author Samuel.D * @date 2009/11/11 14:49:39 * @brief * **/ extern "C" { #include <lua.h> #include <lauxlib.h> #include <lualib.h> } #include <iostream> void stackdump_g(lua_State* l) { int i; int top = lua_gettop(l); printf(":::::total in stack %d\n",top); for (i = 1; i <= top; i++) { /* repeat for each [...]

Wednesday, November 11th, 2009 at 22:18 | 0 comments
Categories: Uncategorized
Tags: ,

lua是一个非常轻量级的脚本引擎,可以说是又小又快,所以在程序需要非常高的灵活性和扩展性的场合很受欢迎,其中比较经典的例子是《魔兽世界》、《博德之门》。 为了保证高度的定制性和效率,lua在API上做到了非常精简,所以刚接触的时候可能会有些不适:应用程序操作脚本引擎,以及同脚本运行环境交换数据竟然需要程序员自己去捣鼓它的栈,是不是很原始?可是这也是它效率高的原因之一啊。 lua的语法:类pascal,但是比pascal要更多,其中比较关键的就是关联数组和闭包(closure),还有基于协程的多任务技术。具体的我觉得可以rtfm,这里就不多说了。 还是说我们最需要关注的东西吧,lua的数据类型:numeric,string,function,table,userdata,nil。 numeric,就是数字,内部存储的是double型浮点数; string,类似于其他的很多脚本语言,lua的string是引用类型,实际的字符串被放到了内存池中,也就是说两个相同的字符串在同一个运行环境中只会占同一片空间,这在很多情况下可以减少不必要的内存分配,提高效率。 function,lua中的函数被看做是一种特殊的数据类型,这同闭包的支持是直接相关的——可以方便的动态生成函数出来。 table:关联数组,同python类似(牛逼的东西原理都差不多啊),对于纯数字的key,会尝试存储到array中,否则就存到hash中。曾经也像python一样,每个table都会预分配一个小数组,用于优化有大量小table的场合下的性能,但是到5.0的时候居然去掉了,理由是这个优化不够general,不过毕竟还是厚道地提供了一个lua_createtable() API函数,用户可以通过它来自己预分配空间。 userdata:用户数据,实际上就是一个void指针,用于将应用程序中的数据传到lua的运行环境中去。 nil:空值啊空值,一般来讲有两种用途,占座和清场,有时间再慢慢讲,没时间就算了。

Sunday, July 12th, 2009 at 11:55 | 0 comments
Categories: Uncategorized
Tags: ,
TOP