最新 | 最热门 | 最高评价

+0  Lua 5.4 的改进及 Lua 的版本演进

Tag: lua与虚拟机
云风 发于 2018年04月09日 18:42 | 点击: 465 | 展开摘要
Lua 社区最近的一件大事是 Lua 5.4 的 work1 版本发布了。

这次的首发版本中引入了一个试验性的新特性,用来解决将 nil 放入数组的问题。因为是实验性特性,所以开发组决定默认关闭,必须在编译源代码的时候定义 LUA_NILINTABLE 这个宏才能开启。注意:默认是不开启的,后面的讨论都以这个为基础。

在邮件列表的讨论中,有不少人引入了不必要的激烈情绪,反对这种影响兼容性的改变。 Roberto 同学看起来是生气了,用全大写字母又重新强调了一次。当然虽然也

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

+0  提高 lua 处理向量运算性能的一点尝试

Tag: lua与虚拟机 | 优化与技巧 | 语言与设计
云风 发于 2018年02月08日 11:42 | 点击: 947 | 展开摘要
如果用纯 lua 来做向量/矩阵运算在性能要求很高的场合通常是不可接受的。但即使封装成 C 库,传统的方法也比较重。若把每个 vector 都封装为 userdata ,有效载荷很低。一个 float vector 4 ,本身只有 16 字节,而 userdata 本身需要额外 40 字节来维护;4 阶 float 矩阵也不过 64 字节。更不用说在向量运算过程中大量产生的临时对象所带来的 gc 负担了。

采用 lightuserdata 在内存额外开销方面会好一点点,但是

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

+0  向量库的一点改进

Tag: lua与虚拟机
云风 发于 2018年02月07日 22:20 | 点击: 552 | 展开摘要
前段为 3d engine 写的向量运算库小伙伴在用,提了很多意见,所以这段时间一直在改进。

一开始觉得逆波兰表示法的运算表达式不太习惯,觉得需要绕个弯想问题,希望做一个表达式编译的东西,但是用了几天后,又觉得其实不是什么大问题,习惯了就好了。

但心智负担比较大的地方是那个 id 的正负号约定,也就是生命期管理。我想了一下,人为的去管理生命期,有些对象是要长期持有的,有些对象只在当前渲染帧使用,在使用的时候严格区分它们不太现实。

一开始的版本,我需要使用者在计算表达式中

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

+0  lua 模块管理的一点改进

Tag: lua与虚拟机
云风 发于 2018年01月31日 10:47 | 点击: 651 | 展开摘要
lua 从 5.2 开始,简化了 5.1 中的模块管理方式,然后一直保持到现在这个样子。

模块用 require 加载,同名模块在一个 vm 中只加载一次,第 2 次开始会返回上次加载的结果。加载模块时会利用 package.path 或 package.cpath 中定义的字符串模板,把模块名转换为文件名,依次尝试打开文件。

我在新项目中,由于整合了不少模块,感觉现有的这套机制有点点不够用。所以我做了一点点小改动,支持了类似 python 的模块管理那样的相对机制。当在

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

+0  是时候启动一个为移动设备设计的 3d 引擎项目了

Tag: lua与虚拟机 | 我爱折腾
云风 发于 2017年12月20日 11:28 | 点击: 714 | 展开摘要
首先,我们在 2011 年底开创的简悦被阿里巴巴文化娱乐集团全资收购了。原来简悦的全套班底转型为阿里大文娱游戏事业群。

当收购的事情尘埃落定,我发现可以从新的视角来看待未来,重新设计制作一款 3d 引擎这件事可以重新启动了。在简悦一直想做而做不了这件事,是因为没有余力,必须优先考虑产品盈利;而对于阿里来说,投入资源来做这样一件短期没有收益,但长远看来却很有意义的事是很自然的。

世面上已经有了很多优秀的 3d 游戏引擎,比如目前最为流行的 Unity 和口碑优异的 Unre

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

+0  Lua 实现 ECS 框架的一些技巧

Tag: lua与虚拟机 | 优化与技巧 | 语言与设计
云风 发于 2017年12月16日 21:36 | 点击: 525 | 展开摘要
最近在用 Lua 实现一个 ECS 框架,用到了一些有趣的 Lua 语法技巧。

在 ECS 框架中,Component 是没有方法只有数据的,方法全部写在 System 中。Entity 本身仅仅是 Component 的组合,通常用一个 id 表示。

但实际写代码的时候,使用面向对象的语法(用 Lua 的冒号 这个语法糖)却是比较自然的写法。比如我们在操作一个 Component 数据的时候,用 component:foobar() 比用 foobar(componen

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

+0  给 Lua 在 windows 下换上 utf-8 文件名支持

Tag: lua与虚拟机
云风 发于 2017年10月25日 23:36 | 点击: 601 | 展开摘要
最近在 windows 做开发比较多,lua 原生库使用的都是 C 标准库中的函数,比如文件操作就是用的 fopen 打开文件。这对 unicode 支持的很糟糕。我希望所有和文件名打交道的地方都使用 utf-8 编码,所以今天花了一点时间实现了这么一个库。

我把 lua 原生库中和文件名有关的 api 都重新实现了一遍,包括了:loadfile , dofile , os.rename , os.remove , os.execute, os.getenv , 以及 io

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

+0  BGFX 的一个 lua 封装库

Tag: lua与虚拟机 | 我爱折腾 | 游戏开发
云风 发于 2017年10月21日 20:14 | 点击: 1079 | 展开摘要
前两年有同学给我推荐了 BGFX 这个库,第一眼被它吸引是它的口号:"Bring Your Own Engine/Framework" style rendering library 。这动不动就说自己是 3d engine 的时代,好好做好一个渲染库,仅仅做好渲染库,是多难得的一件事情。

今年国庆节的时候,偶然间我又翻到这个仓库,居然作者一直在更新。坚持了五年,一直在维护这么个小玩意,让我对这个项目多了点信心。节后我饶有兴趣的研究了一下它的代码。

现在我觉得,这个库的设

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

+0  Lua 5.3.4 的一个 bug

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

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

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

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

+0  Lua 5.3.4 的一个 bug

Tag: lua与虚拟机 | 调试
云风 发于 2017年08月16日 10:18 | 点击: 909 | 展开摘要
昨天我们一个项目发现了一处死循环的 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 | 点击: 640 | 展开摘要
最近同事碰到的一个需求:需要频繁把一组数据在 skynet 中跨网络传递,而这组数据实际变化并不频繁,所以做了大量重复的序列化和传输工作。

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

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

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

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

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

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

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

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