最新 | 最热门 | 最高评价

+0  Lua和C语言的交互(二)

Tag: C and Lua | c# | Lua
lishen 发于 2013年03月12日 21:05 | 点击: 1080 | 展开摘要
转载请标明出处http://www.grati.org/?p=666 C调用Lua函数 不要怀疑,对Lua函数的调用也是通过栈来进行的。请看如下代码: Lua代码: function lua_func (x, y) print("Parameters are: ", x, y) return (x^2 * math.sin(y))/(1-x) end C代码: double c_func(lua_State *L, double x, double y){ double z;

查看全文: http://www.udpwork.com/item/10069.html

+0  Lua和C语言的交互(一)

Tag: C and Lua | c# | Lua
lishen 发于 2013年03月09日 21:28 | 点击: 1154 | 展开摘要
Lua生来就是为了和C交互的,因此使用C扩展Lua或者将Lua嵌入到C当中都是非常流行的做法。要想理解C和Lua的交互方式,首先要回顾一下C语言是如何处理函数参数的。 C函数和参数 大家知道C语言是用汇编实现的,在汇编语言中可没有函数的概念,与函数对应的是叫做子过程的东西,子过程就是一段指令,一个子过程与它调用的子过程之间通过栈来进行参数的传递交互。在一个子过程在调用别的子过程之前,会按照约定的格式将要调用的子过程需要的参数入栈,在被调用的子过程中,可以按照约定的规则将参数从

查看全文: http://www.udpwork.com/item/10070.html

+0  Lua和NodeJS

Tag: C and Lua | Lua | NodeJS
lishen 发于 2013年02月02日 22:44 | 点击: 1655 | 展开摘要
编程模型的思考 一年前,迷恋了NodeJS一段时间,因为换工作的原因一年多没有再关注。但是NodeJS这种单线程全异步的编程模型给了我很多启发,在大多数情况下可以极大的简化程序的编写并保持相对较高的性能。其实大多数的应用场景也都是遵循20-80原则的。即百分之20的流程花费了百分之80的时间,剩余百分之80的的流程只花费百分之20的时间。而花费时间比较多的流程又分为CPU密集型和IO密集型,对于CPU密集型的流程可以引入多线程的机制充分利用CPU,对于IO密集型可以使用异步I

查看全文: http://www.udpwork.com/item/10071.html

+0  C# 版的 Lua

Tag: lua与虚拟机
云风 发于 2013年02月01日 14:13 | 点击: 2808 | 展开摘要
我们游戏客户端使用了 Unity3D , 我们不打算给它写 C 插件, 所有的开发都在 mono 中进行的。

由于某些需求,我们需要在客户端解析一些 Lua 脚本(这些脚本同时供我们的服务器使用)。所以,就有了阿楠同学开发的 UniLua 。

这个世界上已经有了很多的 .net 版的 Lua 实现,但是都不完整。它们大多是基于 Lua 5.1 甚至更老的版本的。还有一些只能解析 Lua 的字节码(这样很容易实现),而不能让 Lua 源代码直接工作起来。这使得在 Lua 中

查看全文: http://www.udpwork.com/item/9196.html

+0  温故而知新

Tag: lua与虚拟机
云风 发于 2013年01月30日 16:38 | 点击: 887 | 展开摘要
我上次通读 Lua 的源代码时,Lua 还在 5.1 。当然 Lua 5.0 我也读过,4.0 和 3.2 则读的不多。

最近有一点空闲,想续写我那本 Lua 源码欣赏。按我心里的计划,还有大约 6 章。虚拟机、字节码持久化、C API 、解释器、GC、库函数。

新添了一章关于虚拟机的,所以重新读了一遍相关源码。发现 Lua 5.2 比上一版修改了不少,几乎每个位置都有修订。

自己读代码和写出来给人看又是不同,真的逐行推敲的话,之前的理解也是经不起琢磨的。为什么要写

查看全文: http://www.udpwork.com/item/9184.html

+0  为 Lua 绑定 C/C++ 对象

Tag: lua与虚拟机
云风 发于 2013年01月10日 11:58 | 点击: 1018 | 展开摘要
如何绑定 C/C++ 对象到 Lua 里?通常是创建一个 userdata ,存放 C/C++ 对象指针,然后给 userdata 添加元表,用 index 元方法映射 C/C++ 中的对象方法。

也有另一个手段,直接用 lightuserdata 保存 C/C++ 对象指针放到 Lua 中,在 Lua 中创建一个 table 附加元表来来包装这个指针,效果是类似的。区别在于对象生命期的管理方式有所不同。就这个问题,几年前我写过一篇 blog 。

绑定 C/C++ 对象到

查看全文: http://www.udpwork.com/item/9052.html

+1  Luacc

Tag: lua与虚拟机
云风 发于 2012年12月14日 15:39 | 点击: 976 | 展开摘要
因为内存限制问题, 我们暂时放弃了 luajit 。这两天,我想另辟蹊径找到别的方法去加速 lua 程序的运行。

所以我这两天做了这么一个玩具,试一下是否可行。

luacc 是类似 cython 的东西,它允许你在 Lua 代码中直接写 C 代码。由于是用 tcc 运行时编译运行的,所以你可以获得和 C 一样的效率。(同样,C 语言引入的问题也同样要考虑)

之所以我称之为玩具,是因为它现在还不支持复杂的数据结构。你只能把单层的,以 string 为 key 的 lua

查看全文: http://www.udpwork.com/item/8857.html

+0  一个 Lua 内存泄露检查工具

Tag: lua与虚拟机
云风 发于 2012年12月12日 14:31 | 点击: 2238 | 展开摘要
昨天我们发现每日构建的服务器突然在一个晚上内存暴增了 8 G ,显然是发生了内存泄露。

之前,我们在 skynet 里留下了许多调试协议,使我们很快的确定了发生泄露的服务:在一张地图的 lua State 中。可以确定是地图的 lua 实现中,有些 lua 对象在不断的生成。生成速度不快,但确实没有人解开引用,导致内存持续增长。

曾经有很多人做过 Lua 的内存分析工具,但是我懒的去搜了,花了半天时间自己写了一个。(已经开源在 github 上)

原理是这样的:

这个

查看全文: http://www.udpwork.com/item/8840.html

+0  Lua 字节码与字符串的共享

Tag: lua与虚拟机 | 优化与技巧
云风 发于 2012年11月16日 15:40 | 点击: 1394 | 展开摘要
我们的系统的应用场合比较特殊,在同一个进程内存在数千个 lua_State 。

Lua 的虚拟机占用的内存已经足够小了,但还是抗不住数量多啊。所以我希望有版本节约一些内存。

最想做的一件事情是把不同 lua_State 中相同的函数字节码合并起来共用一块内存。要做到这一点并不复杂。而且可以提高一些内存访问的效率。(因为大部分 lua 程序在并行执行相同的逻辑)

首先我们需要准备一个用来共享数据块的模块,它必须是线程安全的。因为既然分到了不同的 lua_State 就是想

查看全文: http://www.udpwork.com/item/8597.html

+1  开发笔记(28) : 重构优化

Tag: lua与虚拟机 | 游戏开发
云风 发于 2012年11月05日 10:37 | 点击: 1135 | 展开摘要
正如上一篇笔记 记载的,我们第 2 里程碑按计划在 9 月 30 日完成,但因为赶进度,有许多 bug 。性能方面也有很大问题,大家都认为需要重构许多模块。所以,在最后几天修补 bug 时,许多补丁是临时对付的(因为整个模块都需要重写了)。为此,我们留下了一个月专门重构代码、修改 bug 、并对最后的结果再做一次评测。

这项工作,终于如期完成了。

半个多月前在白板上留下的工作计划还没擦掉。我列出了 12 点需要改进或重写的地方,考虑到内容较多,又去掉了 3 项。在大家的通

查看全文: http://www.udpwork.com/item/8509.html

+0  让 LuaJIT 2.0 支持 Lua 5.2 中的 _ENV 特性

Tag: lua与虚拟机
云风 发于 2012年10月25日 15:12 | 点击: 1491 | 展开摘要
我们的项目是用 Lua 5.2 标准来写的, 最近想迁移到 LuaJIT 2.0 中。其中碰到的最大障碍是,LuaJIT 2.0 不支持 Lua 5.2 中的 _ENV 特性。而且,看起来将来也不会支持了。

在邮件列表中,LuaJIT 的作者 Mike 看起来很不喜欢这个新特性。

可是我真的需要它,所以只好自己阅读 luajit 的源代码,给它打了个 patch 支持这个特性。

patch (基于 luajit 2.0 的 beta 11) 如下:

diff --gi

查看全文: http://www.udpwork.com/item/8455.html

+3  Lua 5.2 的细节改变

Tag: lua与虚拟机
云风 发于 2012年09月29日 10:47 | 点击: 1758 | 展开摘要
最近想试一下, Lua JIT 2.0 能给我们的系统带来多大的提升。但可惜的是,我们一开始就在用 Lua 5.2 来构建系统,而 Lua JIT 2.0 只支持 Lua 5.1 的 API ,在可以看到的时间里,恐怕也不太会去支持 5.2 了。

所以,我只能想办法反向支持 Lua 5.1 。

语法层面最重大的改变是 Lua 5.2 取消了环境表这个概念,转而提供 _ENV 这个语法糖。

许多小细节是 C API 上的变化。这使得按 Lua 5.2 标准写的 C 库,无

查看全文: http://www.udpwork.com/item/8105.html
|<<<45678910>>>| 一共10页, 117条记录