最新 | 最热门 | 最高评价

+0  Lua简明教程

Tag: 杂项资源 | 编程工具 | 编程语言 | C++ | Javascript | Lua
陈皓 发于 2013年12月03日 08:29 | 点击: 9199 | 展开摘要
这几天系统地学习了一下Lua这个脚本语言,Lua脚本是一个很轻量级的脚本,也是号称性能最高的脚本,用在很多需要性能的地方,比如:游戏脚本,nginx,wireshark的脚本,当你把他的源码下下来编译后,你会发现解释器居然不到200k,这是多么地变态啊(/bin/sh都要1M,MacOS平台),而且能和C语言非常好的互动。我很好奇得浏览了一下Lua解释器的源码,这可能是我看过最干净的C的源码了。

我不想写一篇大而全的语言手册,一方面是因为已经有了(见本文后面的链接),重要的

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

+0  Lua 的垃圾回收

Tag: Lua | 开源 | 软件开发
Singularity 发于 2013年10月27日 15:23 | 点击: 3024 | 展开摘要
这篇 blog 是最近研究 Lua 垃圾回收 (Gabage Collector) 的笔记整理。研究 Lua […]

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

+0  Lua 5.2 新增的分代 GC

Tag: lua与虚拟机
云风 发于 2013年09月26日 16:23 | 点击: 1149 | 展开摘要
以前我在 blog 写过 Lua 5.1 的 gc 代码分析 ,而 Lua 5.2 对这部分代码改动颇多,暂时也没有精力更新这个系列,先挑重点写吧。

Lua 5.2 的 GC 的最大改进是增加了一种叫 generational 的模式,Lua 的官方文档里是这样解释的。

As an experimental feature in Lua 5.2, you can change the collector's operation mode from incremental

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

+0  Closure 与 Unbound 变量

Tag: Lua | 软件开发
Singularity 发于 2013年09月08日 14:16 | 点击: 1720 | 展开摘要
大凡了解或编写过简单 Lisp 解释器的人都知道 unbound 变量这个概念。如下面这段代码 [1],对其中 […]

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

+0  Nginx与Gzip请求

Tag: Technical | Lua | Nginx
老王 发于 2013年09月02日 23:20 | 点击: 1328 | 展开摘要
前些天,移动端的同事跑来问:某些API需要传输大数据,Nginx服务器能否支持Gzip请求?一方面可以节省移动端流量;另一方面还可以加快传输速度,提升用户体验。对于Apache来说,利用SetInputFilter,可以很轻松的实现这个功能,那么Nginx如何做呢?

既然移动端发送的是Gzip请求,自然需要想想如何在服务端解压缩。搜索一下现成的Nginx的模块,发现和Gzip相关的模块有如下几个:

Gzip: Gzip responses.

Gzip Precompre

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

+0  去掉 full userdata 的 GC 元方法

Tag: lua与虚拟机 | 优化与技巧
云风 发于 2013年08月27日 11:13 | 点击: 1117 | 展开摘要
根据 Lua 文档中的说法,lightuserdata 比 fulluserdata 要廉价一些。那么,其中的区别在哪里呢?

空间开销上,fulluserdata 是一个 GC 对象,所以比 lightuserdata 要多消耗一点内存,这点内存往往对程序不造成太大的影响。

时间开销上,fulluserdata 在访问它时和 lightuserdata 并无太大区别,它们都只能通过元方法才能在 Lua 中使用。所有 lightuserdata 共用一个元表,不如 full

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

+0  coroutine 的回收利用

Tag: lua与虚拟机 | skynet
云风 发于 2013年07月25日 15:12 | 点击: 1053 | 展开摘要
这几天在 lua 和 luajit 的邮件列表上有人讨论 coroutine 的再利用问题。

前几天有个用 skynet 的同学给我写了封邮件,说他的 skynet 服务在产生了 6 万次 timeout 后,内存上升到了 50M 直到 gc 才下降。

这些让我重新考虑 skynet 的消息处理模块。skynet 对每条消息的相应都产生了一个新的 coroutine ,这样才能在消息处理流程中,可以方便的切换出去让调度器调度。诸如 RPC/ socket 读写这些 ap

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

+0  Programming in Lua(六)-Continuation

Tag: Lua | 开源 | 软件开发
Singularity 发于 2013年07月14日 08:29 | 点击: 1749 | 展开摘要
在之前的 blog 中 (三、五) 讨论了 Lua C APIs 的 continuation 概念。可以说 […]

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

+0  回调还是消息队列

Tag: lua与虚拟机
云风 发于 2013年07月04日 18:58 | 点击: 1213 | 展开摘要
前几天在做 Hive 的 socket 库的时候, 遇到一个问题很典型,我记得不是第一次遇到了。值得记录一下。

socket 底层有一个 poll 的 api ,通过 epoll 或 kqueue 或 select 取得一系列的事件。用 lua 怎么封装它呢?

一个比较直接的想法是注入一个 callback function ,对于每个事件回调一个 lua 函数。但这容易引起许多复杂的问题。因为回调函数很不可控,内部可能抛出异常,也可能引起函数重入,或是做了一些你不喜

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

+0  Hive , Lua 的 actor 模型

Tag: lua与虚拟机
云风 发于 2013年06月26日 19:10 | 点击: 5362 | 展开摘要
上个周末我一直在想,经过一年多在 skynet 上的开发,我已经有许多相关经验了。如果没有早期 erlang 版本的历史包袱以及刚开始设计 skynet 时的经验不足,去掉那些不必要的特性后的 skynet 应该是怎样的。

一个精简过代码的 skynet 不需要支持 Lua 之外的语言和通讯协议。如果某个服务的性能很关键,那么可以用 C 编写一个 Lua 库,只让 Lua 做消息分发。如果需要发送自定义协议的消息,可以把这个消息打包为一个 C 结构,然后把 C 结构指针

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

+0  MongoDB lua driver

Tag: lua与虚拟机
云风 发于 2013年06月18日 12:54 | 点击: 1207 | 展开摘要
唔,我知道有人已经做了 MongoDB 的 lua driver ,比如这个 。但我不想仅仅是对 C++ API 的封装,而想从协议层做起,这样日后可以方便改为异步模型,也好整合到 skynet 中去。

这里还有一份纯 Lua 的实现,是从协议层做的封装。但有几个问题,一是依赖 lua-socket 库,二是纯 lua 实现不如 C 库性能好,三是特性没有支持完整。

我曾经想在 C Driver 的基础上做封装。做的过程中发现 c driver 代码质量不高,且特性支持不

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

+0  写了一个 lua bson 库

Tag: lua与虚拟机
云风 发于 2013年06月14日 12:59 | 点击: 1998 | 展开摘要
在 bson 的官方网站上链接了一个纯 Lua 实现的 bson 库,但是实现的不完整。

我用 C 实现了一个 Lua bson 库。

bson 是为 MongoDB 设计的结构化数据序列化协议,所以有很多设定是为 mongodb 服务的,如果单用于序列化结构化数据,那么那些不一定要实现。但我写这个的最终目的是做一个 lua 的 mongo driver ,所以就实现的比较完整了。

bson 结构中,有一些固定长度的字段,修改它们不必重新编码。这在 mongDB 的通讯

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