<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[isaf的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/yanjun_1982</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; yanjun_1982]]></copyright><item><title><![CDATA[lua版本历史]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/87931989</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/87931989</guid><author>yanjun_1982</author><pubDate>Tue, 26 Feb 2019 11:35:33 +0800</pubDate><description><![CDATA[版本号说明：
* 版本号由 &quot;主版本号.次版本号.修正版本号&quot;组成。修正版本号为0时可以忽略。
* 主版本号与次版本号统称为版本号，相同版本号的版本它们的参考手册是相同的，虚拟机、字节码及相关的库是兼容，即ABI（Application Binary Interface）兼容的。
* 如果只是修复一些bug，则只增加修正版本号。
* 如果增加了一些功能，则增加次版本号，同时修正版本号复0。
* 如...]]></description><category></category></item><item><title><![CDATA[如何阅读lua的字节码]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/79584630</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/79584630</guid><author>yanjun_1982</author><pubDate>Fri, 16 Mar 2018 17:50:13 +0800</pubDate><description><![CDATA[
  本文简单介绍一下如何阅读lua的字节码。


有以下lua源码：



--文件名：main.lua
local a = 123
local b = 456
function foo()
    local c = 1
    return 1, 123, a
end

我们使用luac这个工具（使用lua源码可以编译出来）可以查看这段代码对应的字节码是怎样的，使用以下命令（windows下...]]></description><category></category></item><item><title><![CDATA[为什么Lua虚拟机指令的格式是BCAop而不是CBAop？]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/79440000</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/79440000</guid><author>yanjun_1982</author><pubDate>Sun, 04 Mar 2018 21:36:08 +0800</pubDate><description><![CDATA[lua的虚拟机指令数据是长度为32位（unsigned int或unsigned long）。其中低6位是操作码，接下来8位是参数A，紧接着是9位的参数C，最后是9位的参数B。 
那它的格式是BCAop。为什么不是CBAop呢？按字母顺序命名不好吗？ 
lua的作者roberto是这样解释的：http://lua-users.org/lists/lua-l/2015-05/msg00491.htm...]]></description><category></category></item><item><title><![CDATA[建了个讨论lua的QQ群，欢迎喜欢lua的朋友们加入。]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/79431390</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/79431390</guid><author>yanjun_1982</author><pubDate>Sat, 03 Mar 2018 16:52:28 +0800</pubDate><description><![CDATA[群号：698032152]]></description><category></category></item><item><title><![CDATA[文件描述符与文件句柄]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/79421528</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/79421528</guid><author>yanjun_1982</author><pubDate>Fri, 02 Mar 2018 20:52:41 +0800</pubDate><description><![CDATA[在我们日常编程中经常会遇到文件描述符（file descriptor）和文件句柄（file handler）这两个概念，特别是需要开发跨平台（跨windows和linux）项目的时候会被这两个概念搞得很头痛，所以下面来说说它们是什么东西及它们的区别与联系。



文件描述符

本质是一个索引号（非负整数），系统用户层可以根据它找到系统内核层的文件数据。这是一个POSIX标准下的概念，常见于类Uni...]]></description><category></category></item><item><title><![CDATA[编译luamongo]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/20001367</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/20001367</guid><author>yanjun_1982</author><pubDate>Wed, 26 Feb 2014 21:31:11 +0800</pubDate><description><![CDATA[想试一下mongodb的lua驱动，去github下了一个luamongo，结果走上一条不归路啊。
    首先luamongo封装了mongodb的C++接口，而且还用到了bootst，而我这两者都没有。
    网上下载了bootst和mongodb，结果发现mongodb这货编译要用到python和scons，又去下载了python和scons。
    又折腾了一个环境变量，终于可以]]></description><category></category></item><item><title><![CDATA[lua5.2参考手册已经翻译好了]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/18766221</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/18766221</guid><author>yanjun_1982</author><pubDate>Sat, 25 Jan 2014 12:32:21 +0800</pubDate><description><![CDATA[英文水平有限，恐怕有误译，欢迎讨论指正。
 
文档是wps格式的，可以用word直接打开，不过推荐使用wps ^_^。]]></description><category></category></item><item><title><![CDATA[关于求模与求余]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/17392607</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/17392607</guid><author>yanjun_1982</author><pubDate>Wed, 18 Dec 2013 11:50:46 +0800</pubDate><description><![CDATA[求模与求余的区别]]></description><category></category></item><item><title><![CDATA[翻译lua5.2的参考手册]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/11949071</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/11949071</guid><author>yanjun_1982</author><pubDate>Mon, 23 Sep 2013 19:34:55 +0800</pubDate><description><![CDATA[决定翻译lua5.2的参考手册，借此机会了解一下lua5.2的东西。
争取在10月底翻译完，加油！]]></description><category></category></item><item><title><![CDATA[lua的前景？？]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/11786871</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/11786871</guid><author>yanjun_1982</author><pubDate>Tue, 17 Sep 2013 21:15:33 +0800</pubDate><description><![CDATA[除了专业的游戏公司，貌似很少人在用lua来做开发啊，国内的lua社区越来越不行了。
    lua还在不断的发展，但每次新版本c接口都改动很大，项目想要升级有点困难啊。
    lua还有前途吗？]]></description><category></category></item><item><title><![CDATA[修改lua_tinker以支持lua5.2]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/9945489</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/9945489</guid><author>yanjun_1982</author><pubDate>Tue, 13 Aug 2013 11:55:31 +0800</pubDate><description><![CDATA[由于lua_tinker是在lua5.0的时候开发的，后来作者不知道哪去了，也不维护一下。还好lua5.1对c接口的改动不大，所以lua_tinker可以不作任何修改就可以支持lua5.1。但lua5.2的一项修改是去掉了LUA_GLOBALINDEX这个宏，所以lua_tinker中用到的lua_settable(L, LUA_GLOBALINDEX)和lua_gettable(L,
 LUA]]></description><category></category></item><item><title><![CDATA[最近]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/9286527</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/9286527</guid><author>yanjun_1982</author><pubDate>Wed, 10 Jul 2013 00:07:10 +0800</pubDate><description><![CDATA[最近开始忙着搞新项目，所以都没时间来更新博客（不过反正也没什么人来看，呵呵）。新项目我的主要工作还是写Lua脚本，目前写了一个关卡框架给策划折腾，由于目前还在研发初期，需求不稳定，所以也没有开发一个配套的编辑器给策划用，策划现在是手工用脚本来当配置文件，目前也配了40多个关卡，尽管玩法很简单。
    有空的时候我也写一些服务端和客户端的小功能，比如一些脚本接口，界面处理之类的，还没真正写过一个]]></description><category></category></item><item><title><![CDATA[关于如何释放lua table占用的内存]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/9049775</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/9049775</guid><author>yanjun_1982</author><pubDate>Fri, 07 Jun 2013 18:10:05 +0800</pubDate><description><![CDATA[table的大小是动态变化的。看如下代码：

tb = {1,2,3} --数组大小4，hash表大小1（不管hash表有没有存数据，它的大小最小为1）

tb[5] = 5
tb[100] = 100 --数组大小4，hash表大小2因为后插入的两个数的key过于离散，所以它们被保存到hash表中。最终tb的大小为4+2=6。

这时我们对table进行删除操作：

tb[1] =]]></description><category></category></item><item><title><![CDATA[关于lua数字for循环的实现]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/8966332</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/8966332</guid><author>yanjun_1982</author><pubDate>Thu, 23 May 2013 17:32:42 +0800</pubDate><description><![CDATA[看以下代码：

for i=1,2 do
  print(i)
  i=3
end
输出是什么？如果习惯了C/C++语言，会觉得因为改变了控制变量i为3，所以在执行第二次循环体之前判断不通过，所以输出是1。

但结果输出是1和2，即虽然改变了i，但循环还是执行了2次。这是为什么呢？
看了lua的源代码，发现在语法分析阶段，表达式中的i（也叫控制变量）和循环体中的i并不是一个值，其实表达]]></description><category></category></item><item><title><![CDATA[关于lua table的实现]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/8961799</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/8961799</guid><author>yanjun_1982</author><pubDate>Wed, 22 May 2013 18:41:35 +0800</pubDate><description><![CDATA[以下内容只作本人学习笔记，内容会随着我对lua源码分析的深入慢慢修改，所以以下内容只作参考，并非100%正确。
    脚本table中的元素在c中是分两个地方存放的，即数组与hash表。table中元素的位置也不是一直固定的，它会根据table被修改的情况动态改变。下面分两种情况说一下table的特点。
    第一，先来看构造table时lua是怎么处理的。
    如果构造table的]]></description><category></category></item><item><title><![CDATA[lua链接dll的问题]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/8951890</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/8951890</guid><author>yanjun_1982</author><pubDate>Mon, 20 May 2013 19:33:28 +0800</pubDate><description><![CDATA[lua可以链接专门为lua写的dll，用require就可以了。但有个小地方是需要注意的。有场景如下：
1.有一个脚本require.lua，它放在script目录下。
2.有两个dll：test.dll，lua.dll，test.dll依赖于lua.dll，它们放在bin目录下。
3.script与bin是同级目录。


为了使require.lua可以链接test.dll，在脚本要]]></description><category></category></item><item><title><![CDATA[菜鸟笔记：c/c++中关于lib与dll文件的生成与使用。]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/8560910</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/8560910</guid><author>yanjun_1982</author><pubDate>Thu, 31 Jan 2013 21:22:41 +0800</pubDate><description><![CDATA[当我们的软件大到一定程度的时候，就要考虑将软件划分为多个模块，从而降低软件的复杂度以及复用部分资源。模块的主要表现形式有很多种，其中最常用的就是lib和dll文件。下面简单讲一下lib和dll的生成和使用方法。
        先讲一下静态链接与动态链接。静态链接是指在编译的时候就把模块的内容加载进来一起编译，这样编出来的exe文件包含了模块的内容，因此会比较大。而动态链接是指程序在运行时去加载]]></description><category></category></item><item><title><![CDATA[通信协议中三次握手的故事]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/7663883</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/7663883</guid><author>yanjun_1982</author><pubDate>Thu, 14 Jun 2012 17:24:58 +0800</pubDate><description><![CDATA[在革命战争影片中，经常会看到英勇的解放军战士背着步话机在喊“长江长江，我是黄河，听到请回答。”很明显，这是呼号为黄河的一方想找呼号为长江的另一方说事，为了保证影片的节奏，导演往往把后面的联络过程省略了，其实后面还有两步，长江听到黄河的呼叫后要回答“黄河黄河，我是长江，我听到了你，请回答。”这叫做第二次握手。黄河听到长江的呼叫后还要回答“长江长江，我是黄河，我听到了你，现在请你收报”，这是第三次握手]]></description><category></category></item><item><title><![CDATA[Lua学习笔记1]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/7596171</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/7596171</guid><author>yanjun_1982</author><pubDate>Wed, 23 May 2012 22:22:58 +0800</pubDate><description><![CDATA[今天上班的时候和程序对一个功能的程序接口，需求是这样的：脚本代码根据配置文件生成一组中奖信息，用table来保存，然后将这个table传给程序接口，程序根据这个table中的数据向玩家显示中奖界面。很简单的一个功能，脚本这边的函数很快就写完了，然后我就琢磨着程序的接口应该怎么写，由于之前没有试过在程序接口中访问lua脚本传过来的table，所以遇到了一些麻烦，上网搜了一下相关资料，总算搞清楚了。现]]></description><category></category></item><item><title><![CDATA[游戏业中的脚本]]></title><link>https://blog.youkuaiyun.com/yanjun_1982/article/details/5934097</link><guid>https://blog.youkuaiyun.com/yanjun_1982/article/details/5934097</guid><author>yanjun_1982</author><pubDate>Mon, 11 Oct 2010 19:45:00 +0800</pubDate><description><![CDATA[<br />    脚本不是游戏业的新技术，但脚本为业外的人所知悉，却应归功于《魔兽世界》（以下简称Wow）在世界范围的流行。通过Wow伟大的自定义界面系统，Lua这一脚本语言一举成名天下知。<br /> 虽然Lua的出名有点横空出世的感觉，但游戏业内早就使用脚本来开发游戏了。即便是在国内，我们所熟悉的网游大多数是用脚本开发的。此前已有人士透露，网游的长青树《梦幻西游》和《大话西游2》就大量应用了脚本技术；特别是《大话西游2》，比Wow早几年做了基于Lua脚本的游戏开发。可以说，国内与国外在脚本技术上并不存]]></description><category></category></item></channel></rss>