最新 | 最热门 | 最高评价

+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

+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

+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

+1  实现一个简单的服务端推方案

Tag: Technical | Lua | Nginx
老王 发于 2012年09月28日 16:34 | 点击: 2551 | 展开摘要
客户端和服务端的交互有推和拉两种方式:如果是客户端拉的话,通常就是Polling;如果是服务端推的话,一般就是Comet,目前比较流行的Comet实现方式是Long Polling。

注:如果不清楚相关名词含义,可以参考:Browser 與 Server 持續同步的作法介紹。

先来看看Polling,它其实就是我们平常所说的轮询,大致如下所示:

Polling

因为服务端不会主动告诉客户端它是否有新数据,所以Polling的实时性较差。虽然可以通过加快轮询频率的方式来

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

+1  Nginx与Lua

Tag: Technical | Lua | Nginx
老王 发于 2012年08月31日 17:05 | 点击: 3063 | 展开摘要
火云邪神语录:天下武功,无坚不破,唯快不破!Nginx的看家本领就是速度,Lua的拿手好戏亦是速度,这两者的结合在速度上无疑有基因上的优势。

最先将Nginx,Lua组合到一起的是OpenResty,它有一个ngx_lua模块,将Lua嵌入到了Nginx里面;随后Tengine也包含了ngx_lua模块。至于二者的区别:OpenResty是Nginx的Bundle;而Tengine则是Nginx的Fork。值得一提的是,OpenResty和Tengine均是国人自己创建的项

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

+1  pbc 优化

Tag: lua与虚拟机
云风 发于 2012年04月26日 18:47 | 点击: 1287 | 展开摘要
最近几天优化了一下 pbc 。

这是一个大改动,所以写 blog 记录一下。

首先,我为 rmessage 定制了一个 heap alloc ,在使用 rmessage 解包的时候不再调用系统的 malloc 。而是从一个连续内存 heap 上取用内存。这样在删除 rmessage 对象时也会更快。因为只需要把 heap 回收即可。

当然这样会导致 rmessage 解包时用到的内存增加。对于内存紧张,性能关键部分,我还是推荐 pattern 模式。虽然比较难用,但可

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

+1  Lua int64 的支持

Tag: lua与虚拟机
云风 发于 2012年04月11日 19:01 | 点击: 2302 | 展开摘要
虽然今天发了 twitter ,以及向 lua mailling list 里投递了消息,不过想想还是写一篇 blog 记录一下。

Lua 只支持一种 number ,默认是 double 类型。虽然你可以通过修改 luaconf.h 里的定义,把 lua number 改成 int64 。但是为了 int64 类型而放弃浮点数,恐怕不是大多数人想要的。

int64 通常用在 uuid 上,也就是说不需要对其数学运算,只需要可以比较就好了。我以前最喜欢的做法是用 8 by

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

+1  lua 5.2 的 _ENV

Tag: lua与虚拟机
云风 发于 2011年12月30日 00:34 | 点击: 2325 | 展开摘要
lua 5.2 正式发布了,对于 lua 语言本身的修改,重中之重就是对 environment 这个概念的修改。

可以说, 5.1 以前的 environment 已经没有了。environment 对于制造一个安全的沙盒(或是实现 DSL)是一个很重要的语言特性,我以前很喜欢使用,但也很容易用错。这次的修改我认为是一个谨慎的决定,并使得 lua 语言更为精简和严谨了。

我这样理解 5.2 中的 environment 。本质上,lua 取消了原有意义上的 enviro

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

+1  Lua 下实现抢占式多线程

Tag: lua与虚拟机
云风 发于 2011年08月09日 18:50 | 点击: 1448 | 展开摘要
Lua 5.2 的开发进度可以回溯到 2010 年 1 月。漫长的流程到今天已经快两年过去,终于等到了 beta 版。我十分期待它可以在 2011 年内正式发布。在这几经折腾的两年里,许多新特性企图挤进 5.2 版,又最终被否决。

当我们审视改进列表,似乎看不到太多耳目一新的东西。但如果仔细阅读一下源代码,就会发现,大部分地方都重新实现过了,以配合这些表面上看起来不大的修改。如果你对 Lua 有足够理解,会发现,这次最激动人心的改进是 "yieldable pcall an

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

+0  向量库的一点改进

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

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

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

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

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

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

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

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

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

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

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

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

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

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