自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

专注于网络编程,游戏后台,高并发

天天积累,天天成长,喜欢开源 https://github.com/shonm520

  • 博客(16)
  • 资源 (3)
  • 收藏
  • 关注

原创 一步步写lua解释器--多参赋值的问题

有个问题倒是缠绕了很多时间,问题非常简单清晰,就是,函数的返回值取值个数的问题。例如function ft() return 13, 78 endlocal a, b, c = 3, 4, ft()print(a, b,c)a, b, c = 3, ft(), 5print(a, b,c)a, b, c = ft(), 5print(a, b,c)a, b, c = ft...

2018-08-27 00:19:38 693

原创 一步步写lua解释器--递归的bug

在网上与人讨论时,别人问我能否调用递归。这个确实还没有执行过,我也想试一试。结果一试就GG了。调试的结果是闭包内部的局部变量表push和pop的次数好像不一致,导致pop空表,然后就崩溃了。经过反复调试,还是没有找到问题,局部表的push和pop就在块开始和结束的地方,应该是没有问题的。调试是个非常复杂的过程,因为嵌套的调用非常多,一般递归里面肯定是由if语句的,而if语句又是写在块里面,逐渐...

2018-08-27 00:12:13 555

原创 一步步写lua解释器--泛型for循环

写泛型for之前,我发现连这个语法都不是太清晰,因为大都for, in 后面跟着pairs()或ipairs()函数,以为for,in后面只能是这两个函数。查看了官网资料,for, in 的语法规则是:for namelist in explist do block end 也就是说for,in后面需要一个表达式列表,但是他们必须要有一定的的规则,例如:for k,v in ip...

2018-08-27 00:03:23 749

原创 一步步写lua解释器--数值for循环

lua中for语句分为数值型for循环和泛型for循环。其中数值型for较为简单,我们先说它。数值型for循环的要点:for var=exp1,exp2,exp3 do <执行体> end例如:for i = 1, 2,1 do print(i)end需要特别注意的是,其中变量i是这个for循环体的局部变量,也就是说这个i在for循环外...

2018-08-26 23:56:14 481

原创 一步步写lua解释器--table的实现

lua中的table貌似是lua中唯一的数据结构了,他既可以充当数组,也可以充当map使用,把这两种结合为一个数据结构,足以说明lua的简洁易用性。原本以为table实现起来会比较复杂,结果一上午就差不多写好了,而if语句却写了一整天,当然也包括了优化其他代码。table的实现包括构造和存取。一个table的构造:local a = {b = 3,c = {e = 9}}语法树...

2018-08-26 23:49:06 615

原创 一步步写lua解释器--if else语句

if 语句可以拆成三个部分:逻辑判断部分,if 左边的部分,if右边部分,例如:if b == 1 then local c = 100 print(c)else print(2)endb==1为逻辑判断部分local c=100 print(c)为if左边部分,print(2)为右边部分如果if 没有else 则右边部分为空。对于if a ...

2018-08-26 23:25:24 970

原创 一步步写lua解释器--闭包的处理

前面说到函数执行完毕,也就是闭包退出时,会清除其作用域的局部变量。但是有个问题就是保存闭包的上值,何为上值,举个简单的例子:local f = function(a) return function() a = a + 1 return a ...

2018-08-26 22:59:35 398

原创 一步步写lua解释器--函数语句

函数包括函数名,参数,函数体。函数体又包括语句,返回语句。函数的声明又分为显式,匿名式,例如下面两种:local f = function(params) ... endlocal function f(params) ... end不管哪种类型,我们需要提取其名字f,保存在局部变量表里,这个倒是不难。然后是对函数的每个部分逐一解析。函数参数是名字变量列表,这个相当于初始化名字列表,...

2018-08-26 22:27:07 438

原创 一步步写lua解释器--代码生成

上一篇讲了如何生成语法树。生成语法树之后就要生成代码了,即可以被执行的指令,想想都有点激动。前面提到再复杂的代码都可以转换为赋值,运算,比较等指令。赋值是将一个确定的数值或字符串赋给一个变量,他是一个二元操作。运算无非是简单的四则运算,加减乘除,他们都是二元的。比较也是将值与true or false对比,也是二元操作。赋值拿local a = 1 举例,变量是a,值是1。遇到这个语句时,怎么...

2018-08-26 18:42:39 1448

原创 一步步写lua解释器--闭包的由来

原本函数在最开始的时候就实现了,但是后来发现了不少bug,都是由参数个数,返回值个数等引起的,比想象的要复杂一些。lua中函数与闭包是紧密相连的。我们早在学习c或java的的时候,就认识了函数,学习诸如lua,python,js脚本语言的时候才听说闭包这个词。在很长一段时间内我对闭包的概念都不是很理解,后来才慢慢清晰。现在亲自实现脚本语言后,才真正明白闭包的含义。简单一句话概括就是,函数是...

2018-08-25 23:55:19 462

原创 一步步写lua解释器--语法分析

当我们从源码中读取到一个个单词token之后,就需要将这些token转换为实际的语句了。一门语言的产生是有一定的道理,是用来解决实际问题的,没人会吃饱了没事干发明一门语言。例如在学数学时要求一个一元一次方程的结果即解方程ax + b = c,我们可以写如下代码:local f = funciton(a, b, c) if a ~= 0 then local x = (c - ...

2018-08-25 23:44:08 1460 4

原创 一步步写lua解释器--开篇

本人去年开始接触lua,之后就被它简单的语法和恰到好处的功能给吸引住了。本人搞了几年的C++,深感C++的繁琐和深奥,后来接触了像python,javascript等脚本语言,学习到了函数式编程语言的精妙。听说lua语言源码短小精悍,于是打算研究一下源码。可是看到其源码才发现,没有编译原理基础的我寸步难行,看别人写分析lua源码的博客也是门路不对。后来决定恶补一下编译原理的知识,在网上看了一些...

2018-08-25 21:47:48 6653

原创 muduo一个简单echo服务器的分析

muduo一个简单echo服务器的分析前两篇写muduo网络框架线程处理,这两篇通过一个小的echo服务器来完整说明这个网络事件处理的流程。echo是muduo自带的例子,十分简单:int main(){ LOG_INFO << "pid = " << getpid(); muduo::net::EventLoop loop; muduo::net:...

2018-08-03 17:53:40 1360

原创 muduo多线程的启动

上篇说了多线程处理的概述,这篇说说具体实现。muduo的多线程是由线程池中启动的。线程池类EventLoopThreadPool在TcpServer类中创建一个新的实例。发现在muduo中,各种类的关系基本上引用和包含即组合关系,很少有派生关系的,没有继承关系就没有虚函数的应用了。可能陈硕觉得继承关系比较复杂,耦合度太高,破坏整体设计。但是我觉得muduo中那么多不同种类的智能指针,还有基...

2018-08-03 16:08:06 853

原创 muduo 多线程的处理

一般网络编程中为什么会用到多线程呢,无非是充分利用服务器多核的特性,提高网络并发量,吞吐率等。一般情况下,我们可以轻松想到这样的模型:主线程中监听socket连接事件,当产生新的连接时生成新的线程来处理。这种方式比较直接,但是有些不好处理的地方,例如线程的数量,真的是一个连接开一个线程吗。其实可以用线程池来解决这个问题,那说到线程池,那又如何解决线程与连接对应的问题,毕竟一个连接肯定是始终要在一个...

2018-08-03 11:26:45 2129 1

原创 TCP为什么要三次握手

经常有人会问tcp建立连接时为什么要三次握手,两次行不行呢?不行,那可能会死人的,不信我讲个故事。北宋末年,统治阶级奢靡腐败,苛捐杂税压得人们喘不过气来。一时间盗贼四起,纷纷占山为王。盗贼们时不时打家劫舍,骚扰村民,连官府都不敢轻举妄动。后来上任了一位较有作为的县官,不忍看到百姓受苦,决心围剿盗贼。但是盗贼在山头,易守难攻,他们决定兵分两路,分为东边军和西边军,从东边和西边夹击盗贼,一举拿...

2018-08-01 19:26:23 7012 13

windows 小游戏代码

包含,两个经典的游戏代码 俄罗斯方块 扫雷 很好的windows 编程学习资料

2010-08-04

Windows程序设计中文版.rar

学习windows编程经典的资料! 原 作 者:Charles Petzold 译 者:余孟学

2010-08-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除