Lua5.0编程电子书中文版

这个电子书文档对于Lua开发者来说非常有帮助,是案头必备文档之一。虽然是5.0的版本,但是相差不是很多,因为5.1的更新是在于一些内部(internal)的改变,如GC机制和基于Register的虚拟机。

介绍通过ChunkSpy来分析Lua的虚拟机指令集。

准备用LuaTask来做一些Lua多线程方面的实验,这是源代码,有空看看。

《Lua5.0编程电子书中文版》有6个想法

  1. 楼主,打扰下,请教一个lua源码问题。
    LUA_API void lua_insert (lua_State *L, int idx) {
    StkId p;
    StkId q;
    lua_lock(L);
    p = index2adr(L, idx);
    api_checkvalidindex(L, p);
    for (q = L->top; q>p; q–) setobjs2s(L, q, q-1);
    setobjs2s(L, p, L->top);
    lua_unlock(L);
    }

    这个函数中lua栈上增加一个TValue,但是L->top却没有加1,在下实在不明白原因,楼主可否指点一二。

  2. lua_insert

    void lua_insert (lua_State *L, int index);
    Moves the top element into the given valid index, shifting up the elements above this index to open space. Cannot be called with a pseudo-index, because a pseudo-index is not an actual stack position.

    这段Lua manual的lua_insert说明应该可以回答你的问题了,虽然名字上叫做insert,实际是栈顶与某个index的交换,top没有加那是因为只是交换没有新增。

  3. 感谢博主的回复,在下还有一个白痴问题相问,在看到如下两个宏时,
    #define adjustresults(L,nres) \
    { if (nres == LUA_MULTRET && L->top >= L->ci->top) L->ci->top = L->top; }

    #define checkresults(L,na,nr) \
    api_check(L, (nr) == LUA_MULTRET || (L->ci->top – L->top >= (nr) – (na)))
    有了一些疑惑,L->ci->top和L->top有什么关系,我看到注释上说ci是call info for current function,难道L->top不是随着当前函数调用情况调整的吗?
    博主的blog质量真是高,令人获益非浅,感谢你了。

  4. Sil,现在我还没有对Lua代码作比较细节上的研究,所以你的问题现在也没法回答。希望在后面代码阅读的时候能够解释这个问题。

  5. 楼主,你好!请教一个问题:
    lua脚本文件如何调用一些大型网站(如淘宝网)的API?具体的例子如要根据客户端IP获得所归属城市,可调用淘宝网的IP地址库借口接口实现,lua脚本如何实现??

发表评论