最新 | 最热门 | 最高评价

+0  Lua 5.3.4 的一个 bug

Tag: lua与虚拟机 | 调试
云风 发于 2017年08月16日 10:18 | 点击: 391 | 展开摘要
昨天我们一个项目发现了一处死循环的 bug ,经过一整晚的排查,终于确认是 lua 5.3.4 的问题。

起因是最近项目中接入了我前段时间写的一个库,用来给客户端加载大量配置表格数据 。它的原理是将数据表先转换为 C 结构,放在一块连续内存里。在运行时,可以根据需要提取出其中用到的部分加载都虚拟机中。这样做可以极大的提高加载速度。项目在用的时候还做了一点点小修改,把数据表都设置成 weaktable ,可以让暂时不用的数据项可以回收掉。

正式后面这个小修改触发了 bug

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

+0  Lua 表的差异同步

Tag: lua与虚拟机 | skynet | 优化与技巧
云风 发于 2017年05月18日 20:10 | 点击: 438 | 展开摘要
最近同事碰到的一个需求:需要频繁把一组数据在 skynet 中跨网络传递,而这组数据实际变化并不频繁,所以做了大量重复的序列化和传输工作。

更具体一点说,他在 skynet 中设计了一个网关节点,这个网关服务可以负责把一条消息广播给一组客户端,每个客户端由内部的一个 uuid 串识别,而每条消息都附带有客户端 uuid 列表。而实际上这些 uuid 列表组有大量的重复。每条广播消息都重复打包了列表组,且列表组有大量重复信息。

一开始我想的方法是专门针对这个需求设计一组协议

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

+0  如何优雅的实现一个 lua 调试器

Tag: lua与虚拟机
云风 发于 2017年03月17日 15:52 | 点击: 1410 | 展开摘要
最近一段时间在帮公司一个项目组的客户端 review 代码。

我们的所有项目,无论渲染底层是用的 ejoy2d 还是 Unity3d ,实际开发的时候都基本是使用 lua 。所以开发人员日常工作基本是在和 Lua 打交道。

虽然我个人挺反感围绕着调试的开发方式,也就是不断的在测试、试错,纠正的循环中奔波。我认为好的程序应该努力在编写的过程中,在头脑中排错;在预感到坏味道时,就赶快重写。而坏味道通常指代码陷入了复杂度太高的境地,无法一眼看出潜在的问题。对付复杂度最好的武器是

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

+0  Lua 调试器

Tag: lua与虚拟机
云风 发于 2017年03月17日 15:43 | 点击: 495 | 展开摘要
又一篇谈 Lua debugger 的 blog 了。但这次,并不是我的个人作品 :) 。

去年底我写了 如何优雅的实现一个 lua 调试器 。正如我的 blog 中所写:“不过期待它短期内发展成为一个图形式的漂亮交互调试器可能有点不现实,除非做前端的朋友有兴趣来完善它。”

ok 。这次,真的有人来完善它了。

我公司的前端大神突然对实现一个 lua debugger 产生了兴趣。他觉得既然 chrome 可以用来调试 javascript ,那么魔改一下后,调试 lua

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

+0  绕过 c api 直接访问 lua 表

Tag: lua与虚拟机
云风 发于 2017年02月21日 14:35 | 点击: 386 | 展开摘要
今天试了一下一个想法:绕过 lua 提供的 C API 直接去访问 lua 的表结构,提供在性能及其重要的环境高效访问数据结构的方法。

例如:我们需要在 lua 和 C 中共享一个 vector 3 结构,有两种实现方法:一、把 C struct 实现为 lua 中的 userdata ,然后给 userdata 加上 metatable 以供 lua 中访问内部数据;二、在 lua 中使用一个 table 实现这个 vector3 结构,类似 { x = 0.0 , y

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

+0  跟踪数据结构的变更

Tag: lua与虚拟机 | 语言与设计
云风 发于 2017年02月14日 18:01 | 点击: 482 | 展开摘要
这两个月,我的主要工作是跟进公司内一个 MMORPG 项目,做一些代码审查提出改进意见的工作。

在数月前,项目经理反应程序不太稳定,经常出一些错误,虽然马上就可以改好,但是随着开发工作推进,不断有新的 bug 产生。我在浏览了客户端的代码后,希望修改一下客户端的 UI 框架以及消息分发机制等,期望可以减少以后的 bug 出生概率。由于开发工作不可能停下来重构,所以这相当于给飞行中的飞机换引擎,做起来需要非常小心,逐步迭代。

工作做了不少,其中一个小东西我觉得值得拿出来写写

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

+0  一个简单的 lua 对象回收再利用方案

Tag: lua与虚拟机 | 语言与设计
云风 发于 2017年01月24日 10:36 | 点击: 632 | 展开摘要
昨天在 review 我公司一个正在开发的项目客户端代码时,发现了一些坏味道。

客户端框架创建了一个简单的对象系统,用来组织客户端用到的对象。这些对象通常是有层级关系的,顶层对象放在一个全局集里,方便遍历。通常,每帧需要更新这些对象,处理事件等等。

顶层每个对象下,还拥有一些不同类别的子对象,最终成为一个森林结构,森林里每个根对象都是一颗树。对象间有时有一些引用关系,比如,一个对象可以跟随另一个对象移动,这个跟随就不是拥有关系。

这种设计方法或模式,是非常常见的。但是在

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

+0  在 Unity3D 的 Mono 虚拟机中嵌入 Lua 的一个方案

Tag: lua与虚拟机 | 游戏开发
云风 发于 2017年01月08日 22:39 | 点击: 584 | 展开摘要
很多使用 Unity3D 开发的项目,都不太喜欢 C# 这门开发语言,对于游戏开发很多人还是更喜欢 Lua 一些。而 Lua 作为一门嵌入式语言,嵌入别的宿主中正是它说擅长的事。这些年,我见过许多人都做过 U3D 的 Lua 嵌入方案。比如我公司的阿楠同学用纯 C# 实现了一个 Lua 5.2 (用于在 U3D web 控件中嵌入 Lua 语言的 UniLua );还有 ulua slua wlua plua xlua ... 数不胜数。我猜测,a-z 这 26 个字母早就用

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

+0  如何让 lua 做尽量正确的热更新

Tag: lua与虚拟机
云风 发于 2016年11月25日 17:28 | 点击: 1070 | 展开摘要
很多项目采用 lua 的一大原因是 lua 可以方便的做热更新。

你可以在不中断进程运行的情况下,把修改过的代码塞到进程中,让随后的过程运行新版本的代码。这得益于 lua 的 function 是 first class 对象,换掉代码不过是在让相应的变量指向新的 function 对象而已。

但也正因为 lua 的这种灵活性,想把热更新代码这件事做的通用,且 100% 做对,又几乎是不太可能的。

首先,你很难准确的定义出,什么叫做更新,哪些数据需要保留,哪些需要替换成

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

+0  Lua 中 Cache 冷数据的落地

Tag: lua与虚拟机
云风 发于 2016年11月03日 12:17 | 点击: 420 | 展开摘要
今天有同学跟我讨论了一下最近发现的一个 bug ,我觉得挺有意思的。

需求是这样的:

我们的系统中,有一些数据是从外存(数据库)加载进来的,由于性能考虑,并不需要每次修改这些数据就写回外存。希望在数据变冷后,定期落地即可。

典型的场景是一个 cache 模块,cache 的是一些玩家的业务数据,可以通过 uuid 从数据库索引到。一旦业务需要访问玩家数据,cache 模块会从数据库加载对应数据,然后把数据表交出去。当业务再次需要这些数据的时候,cache 模块一旦发现数

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

+0  ephemeron table 对 property tables 的意义

Tag: lua与虚拟机 | 语言与设计
云风 发于 2016年09月19日 20:56 | 点击: 487 | 展开摘要
今天在公司群里,Net bug 同学提出了一个问题,围绕这个问题大家展开了一系列讨论。讨论中谈及了 lua 中的一个常见的模式:property table ,我觉得挺有意思,记录一下。

最初的问题是:当一个对象的某些属性并不常用,希望做惰性初始化的话,应该怎么实现。

我认为,property table 是一个很符合这个案例的常见模式。

比如,对象 f 有三个可能的成员 a b c ,我们可以不把 f.a f.b f.c 记录在 f 这个 table 里,而是额外有三

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

+0  Lua 稀疏数组

Tag: lua与虚拟机
云风 发于 2016年08月29日 00:02 | 点击: 532 | 展开摘要
Lua 的 table 可以做数组用,但是前提是数组里不能有空洞。也就是不能在数组里保存 nil ,否则取长度和迭代的行为都是不确定的。

能不能用比较小的额外代价在 Lua 中实现一个支持空洞的数组呢?

首先,我们定义一下,带空洞的 array 的正确行为应该是怎样的:

数组只能用正整数做 key ,设置其它 key 会抛出 error 。

可以用 pairs 迭代数组,和普通的 table 一样,迭代器会跳过那些值为 nil 的键值对。但要求迭代器一定从 1 开始从

查看全文: http://www.udpwork.com/item/15768.html
|<<<1234567>>>| 一共8页, 88条记录