
lua
彩虹-
zhaorulysy@163.com
展开
-
lua源代码解析
http://eric-weitm.iteye.com/blog/1500082lua 源代码解析 源代码版本:lua-5.2.0 一、概览 1、lua脚本中暴露的库相关 lbaselib.c - 基础函数库(方便使用lua内部的功能) lbitlib.c - 位运算库 lcorolib.c - 协程库 lstrlib.c - 字符串库,提供通用字符串处理功转载 2013-08-22 10:07:24 · 1451 阅读 · 0 评论 -
Lua中实现类的原理
Lua中没有类的概念,但我们可以利用Lua本身的语言特性来实现类。下文将详细的解释在Lua中实现类的原理,涉及到的细节点将拆分出来讲,相信对Lua中实现类的理解有困难的同学将会释疑。类是什么?想要实现类,就要知道类到底是什么。在我看来,类,就是一个自己定义的变量类型。它约定了一些它的属性和方法,是属性和方法的一个集合。所有的方法都需要一个名字,即使是匿名转载 2016-01-28 18:15:27 · 1653 阅读 · 0 评论 -
lua解释执行脚本流程
#include "lua.hpp"#include using namespace std;#pragma comment(lib, "lua5.1.lib")struct lua_guard{ lua_State *pL; lua_guard(lua_State *s) :pL(s){} ~lua_guard(){ lua_close(pL); }};转载 2016-01-29 16:16:34 · 5580 阅读 · 0 评论 -
lua解析赋值类型代码的过程
我们来看看lua vm在解析下面源码并生成bytecode时的整个过程:1 foo = "bar"2 local a, b = "a", "b"3 foo = a首先我们先使用ChunkySpy这个工具来看看vm最终会具体生成什么样的vm instructions在这里,开头为[数字]的行是vm真正生成的字节码,我们看到一共生成了六行字节码。首先loadk将转载 2016-01-29 16:29:38 · 994 阅读 · 1 评论 -
lua执行字节码的过程介绍
前面一篇文章中介绍了lua给下面代码生成最终的字节码的整个过程,这次我们来看看lua vm执行这些字节码的过程。1 foo = "bar"2 local a, b = "a", "b"3 foo = a生成的字节码如下所示:之前lua是在luaY_parser函数(入口)中完成了lua脚本的解析生成字节码的整个过程的,在生成了main func(过程见“lu转载 2016-01-29 16:34:03 · 4409 阅读 · 0 评论 -
skynet项目lua代码简单加密
最近在看skynet的代码,总体感觉跟 erlang很像,理念都是基于Actor模型,即万物皆Actor,Actor之间通过发送消息进行通信。(这里说的“万物”倾向于表示有能动作用,有独立行为的个体。)不同的是,skynet使用 c 和 lua实现,这两个语言相较erlang比较流行。skynet的Actor是指skynet服务,skynet服务类似erlang进程,调度方式也转载 2016-01-29 16:52:47 · 2791 阅读 · 0 评论 -
lua弱表 浅析
Lua采用了基于垃圾收集的内存管理机制,因此对于程序员来说,在很多时候内存问题都将不再困扰他们。然而任何垃圾收集器都不是万能的,在有些特殊情况下,垃圾收集器是无法准确的判断是否应该将当前对象清理。这样就极有可能导致很多垃圾对象无法被释放。为了解决这一问题,就需要Lua的开发者予以一定程度上的配合。比如,当某个table对象被存放在容器中,而容器的外部不再有任何变量引用该对象,对于这样的对象,Lua转载 2016-06-06 16:50:50 · 720 阅读 · 0 评论 -
高效调用lua函数
通常调用一个lua函数需要以下步骤//1.解析函数名,将lua函数压栈findLuaItem( "a.b.c.func" );//2.参数压栈lua_push()//3.函数调用lua_call()最慢的是第一步解析函数名、反复查表的过程,这个过程会消耗不少时间和空间。如果可以避开这个过程,就能提升效率。函数总有函数指针,就算lua函数没有,也该有个handler吧。转载 2016-07-19 11:05:04 · 1169 阅读 · 0 评论 -
如何让EditPlus支持LUA
如何让EditPlus支持LUA这次主要介绍一下学习Lua之前的准备工作。(1) 下载Lua安装包,最新版本是lua-5.1.3. 它的体积很小,只有210Khttp://luaforge.net/frs/?group_id=377这是WINDOWS版本. 附带了编辑器,连环境变量都一次搞定了。(2)安装lua包(3)安装EditPlus编辑器:EditPlus 简单又转载 2016-07-19 11:29:49 · 1018 阅读 · 0 评论 -
一个lua 与c交互的小demo
#include #include #include "lua.h"#include "lualib.h"#include "lauxlib.h"//待注册的C函数。int add(lua_State* L){double a = luaL_checknumber(L, 1);double b = luaL_checknumber(L, 2);原创 2016-07-19 12:17:10 · 1024 阅读 · 0 评论 -
cocos2d-lua class 方法解释
lua中没有类的概念,有的只是表(table),而类之间的继承也就是将父类的表连到了一起,派生类中没有找到的属性和方法就通过元表查找父类,在cocos2d-lua中,封装好的class方法,完美的实现了类的继承,包括单继承,和多继承,class的源码如下(省去了一些不必要的代码):_setmetatableindex = function(t, index) if type(t) ==转载 2017-11-14 13:36:22 · 1410 阅读 · 0 评论 -
lua动态链接库(luaopen_*函数的使用)
lua中使用c动态库,像luacjson(支持unicode),luasocket,都是以动态链接库的形式在lua中使用的,至于怎么写这些动态链接库很少有教程说到,下面我就说说如何把c文件编译成动态库。首先,假设需要在lua中调用一个在c中实现的求和函数,函数名add(a,b)。我给这个测试库取名为dylib,它包含一个函数add。lua中这样使用: local dy转载 2015-07-15 16:16:09 · 9759 阅读 · 3 评论 -
cocos 使用Luajit将Lua脚本编译为bytecode,从而实现加密
项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行。下面是使用原生的lua解释器编译字节码:1、新建一个名为1.lua的文件,里面只有一句话print("Hello Lua"),新建一个空的out.lua脚本文件2、开始--运行--cmd3、luac -o out.lua 1.lu转载 2015-06-04 17:54:48 · 3353 阅读 · 0 评论 -
如何编写高校的lua代码
转载地址:http://2015.iteye.com/blog/1739887 Lua在运行代码之前,会先把源码预编译成一种内部编码,这种编码由一连串的虚拟机能够识别的指令构成,与CPU的机器码很相似。接下来由C代码中的一个while循环负责解释这些内部编码,这个while循环中有一个很大的switch,一种指令就有对应的一个case。 可能你已经从其他地方得知,自5.0版本开始,转载 2013-08-14 11:08:51 · 1491 阅读 · 0 评论 -
lua table 格式化打印
zr = {};zr.p = function(data)sprint("#############core.print data zrp###########"); local cstring = ""; zr.tableprint(data,cstring);endzr.tableprint = function(data,cstring) if data == nil the原创 2014-01-24 14:27:32 · 6852 阅读 · 0 评论 -
关于lua的闭包自我理解
function newCounter() local i = 0 return function() -- anonymous function i = i + 1 return i endendc1 = newCounter()c2 = newCounter()print(c1()) -->1print(c1()) -->2prin原创 2013-08-08 17:06:59 · 853 阅读 · 0 评论 -
lua sort
names = {"Peter", "Paul", "Mary"}grades = {Mary = 10, Paul = 7, Peter = 8}--n1和n2是指name中的成员 table.sort(names, function (n1, n2) return grades[n1] < grades[n2] -- compare the gradesend)for i,v i原创 2014-02-25 12:06:49 · 3609 阅读 · 0 评论 -
lua 定时器以及应用
function update_timer_fun()for k,v in pairs(update_timer.m_process_time_fun) dov(k,update_timer.m_porcess_run_time[k]);endend--注册一个新的update定时器 经过over_time时间后销毁 销毁后回调over_fun(手动消耗也会回调over_fun原创 2014-05-07 14:58:01 · 14370 阅读 · 0 评论 -
让editplus可以支持lua语法高亮
editplus默认是没有sql语法高亮的,原因是它的内部没有lua.stx的这样一个文件我们自己在 C:\Documents and Settings\Administrator\Application Data\EditPlus 3 这样的目录下面新建一个文件名为lua.stx这样一个文件里面的内容是:#TITLE=SQL; SQL syntax file written by原创 2014-11-22 17:34:22 · 3668 阅读 · 0 评论 -
lua读文件操作
local table_ = "actor_stage_up";table.getall = function(data)if data == nil then sprint("table.getall data is nil");end if(type(data)=="table")thenlocal num = 0;for k, v in pairs原创 2015-01-22 16:03:38 · 1075 阅读 · 0 评论 -
lua 源码网摘
1.lua源码中涉及的数据结构http://blog.youkuaiyun.com/yirancpp/article/details/128691832.Lua源码剖析(lstrlib.c)http://blog.youkuaiyun.com/MaximusZhou/article/details/102252113.lua源码解析http://blog.youkuaiyun.com/ya转载 2015-03-31 11:54:40 · 575 阅读 · 0 评论 -
vs2012编译使用lua 5.2静态库
1.在官方网站下载Lua最新代码http://www.lua.org/download.html2.打开vs2012新建空白工程Test3.在解决方案中添加新的lib工程(WIN32->选择静态LIB 不要预编译头)lualib4.配置lualib工程a) 将lua源代码下的src文件拷入lualib文件夹下,并在工程中导入b) lualib工程属性转载 2015-04-24 15:37:27 · 1170 阅读 · 0 评论 -
vs 2010 将编译好的lua静态库运用起来
一直在用Lua写程序。但是对lua和c/c++交互的这一部分还是很感兴趣。由于本身不熟悉vs,所以在之前走了好多弯路。在看programming in lua 这本书时,lua与c交互这部分用代码实现看起来还是挺容易的,但是用vs真正用起来还是费了一点时间。下面就记录下来。首先拿到lua 52的源码,将lua编译成为Lua52.dll 和lua52.lib两个文件,一个是静态连接库,一个是动态原创 2015-04-24 15:28:39 · 1225 阅读 · 0 评论 -
vs2012编译lua源码和产生c代码的动态链接库
最近一直在搞lua的源码编译,同时有需求将c代码编写成lua可以调用的动态链接库。尽管网上已经有好多人做过类似的工作了,但是我自己做起来还是感觉很吃力。今天花了一天时间终于搞定了。所以把今天踩的坑记录一下。首先编译lua的动态链接库,也就是传说中的lua.dll。参考文章。我的工程名为lua532。主要是将除了lua.h、lua.c、lualib.h、luac.c以外的所有后缀为.h和.c原创 2017-12-27 18:09:45 · 843 阅读 · 0 评论