构建Lua解释器Part7:构建完整的语法分析器(上)

前言

        在上一章里,我完成了词法分析器的设计与实现的论述,接下来我要继续论述语法分析器的设计与实现。限于篇幅,我将会把语法分析器分为两个部分来论述,本章为上部,下一章为下部。本章将会重新复习编译器的构造,并且论述编译流程,以及lua的parser所涉及的编译相关的内容,最后通过阐述虚拟机相关指令的实现,作为结尾。本章所涉及的代码,全部在dummylua工程里,欢迎star。另外,如果你喜欢我写的文章,喜欢讨论技术,欢迎加入我创建的群:QQ185017593

[Read More]

构建Lua解释器Part6:词法分析器设计与实现

前言

        构建Lua解释器Part5,对Lua解释器进行了整体介绍,并且以一个hello world程序为例子,给读者一个初步的概念。通过那一篇,我们知道了编译器至少要包括词法分析其和语法分析器,而本篇,我将集中时间和精力,用来介绍和讲解Lua词法分析器的设计与实现,实际上,它是对Part5词法分析器部分的一个补充。本文所指的词法分析器,是参照Lua-5.3这个版本的源码,并且亲自动手实现和测试过,它也已经被整合到dummylua这个工程中,欢迎大家star。由于整个词法分析是我自己重新实现,因此不会在所有的细节上和官方lua保持一致,最后由于本人水平有限,如有写的不正确的地方,欢迎大家批评指正。此外,我已经建了一个qq群(QQ:185017593),有兴趣参与技术讨论的同学可以加进来。

[Read More]

skynet网络机制

前言

        我在前几年,写了一篇《skynet源码赏析》,阐述了skynet的整体设计,和核心运作机制流程,该文针对的是skynet-1.0版本,如今skynet已经升级到1.3版本,总的来说,skynet整体架构并没有特别大的改动,不过从1.2版本开始,skynet增强了网络并发处理的能力。1.3改进了cluster机制,修复了一些大量并发可能导致的bug。尽管《skynet源码赏析》这篇,已经详细地阐述了skynet内部实现机制,不过对于网络部分,这篇只是阐述了大致的运作机理,并未深入源码层进行非常细致的分析,为了填补这个遗憾,我决定在近期新增一篇专门讲解skynet网络机制的blog,此外我还计划在未来几个月内,写一篇集群机制的blog,以此完成我所谓的“skynet源码剖析三部曲”,XD。

[Read More]
skynet 

构建Lua解释器Part5:脚本运行基础架构的设计与实现

前言

        在经过漫长的准备,我终于完成了《构建Lua解释器》系列的第五部分的代码编写,并且通过了预定的测试。本篇我将对dummylua项目中的脚本运行基础架构的设计与实现进行介绍和解析,它包括了lua编译器基础架构以及虚拟机基础架构。过去4个部分的开发,为本部分提供了坚实且必要的基础,本篇将为编译与运行lua脚本搭建最基础的架构,后续内容将在此架构上继续填充与丰富,本部分,我们的目标是编译并运行如下所示的一段脚本代码:

[Read More]

Understanding computer endianness

Preface

After a long time, now I decide to add a new post. This is my first post written in English. Maybe it is a challenge, but it is surely a good beginning. I believe that one step at a time can make a thousand miles. I am going to talk about the endianness in this post.

[Read More]
common 

C#服务端框架设计与实现

前言

        在完成构建Lua解释器Part4以后,我原计划是将业余时间投入到Lua虚拟机的研究之中。不过最近,我们项目希望服务端和客户端共享战斗逻辑,功能由客户端实现,借以降低开发联调的成本,而客户端主要使用C#语言,在确定客户端能够做到表现和逻辑分离以后,我们决定服务端也搭建C#战斗集群来运行战斗逻辑。

[Read More]

构建Lua解释器Part4:Table设计与实现

前言

        本篇我将对dummylua中Table的设计和实现进行介绍和说明。本文的目的旨在梳理清dummylua项目Table的数据结构和运作流程,该部分深度参考了lua-5.3.4的Table设计与实现,由于所有的细节是我自己根据理解重新实现,因此不会在所有的设计细节上和官方lua保持一致,但是遵循了基本的设计思路。
        Table是Lua语言中举足轻重的组成部分,掌握和理解它具有战略意义,这也是实现Lua虚拟机的基础所在,本文首先介绍dummylua项目Table的数据结构,然后在概念上介绍一些基本的操作流程,如创建、resize、查询、插入和迭代等操作。

[Read More]

构建Lua解释器Part3:String设计与实现

前言

        上一章节我介绍了dummylua项目的gc的设计原理和实现方式,该部分我基本是仿造了官方lua-5.3.4的做法。本章节,我将为大家带来dummylua项目TString的设计实现讲解。和以往任何一篇一样,本篇我也是基本遵循lua-5.3的设计思想,但由于实现是我凭理解自己手动实现,因此不会在所有的细节上和官方lua保持一致。
        任何一门语言都要支持字符串,lua也一样,本章将从lua string的数据结构开始阐述,然后深入其他细节进行阐述,并试图揭露这些设计的历史背景和原因,由于本人能力有限,如有不当之处想要指明,或是想和我一起讨论,欢迎加Q群与我讨论(QQ185017593),我是群主,欢迎大家的到来。

[Read More]

构建Lua解释器Part2:Garbage Collection基础架构

前言

        上一篇我已经设计和实现了Lua解释器最基础的基本数据结构,实现了纯C函数在栈中的调用流程,以及保护模式调用函数等内容,今天要介绍的则是Lua解释器的GC基础架构。Garbage Collection机制,可能是让人们听之不寒而栗的机制,都说GC很复杂,需要花费大量时间去消化和理解,那为什么要在本系列的第2篇就早早引入?做这个决定并非一时冲动之举,而是经过思考后而决定的。之前在阅读了云风大神翻译的《编程之魂》第7章[1],这篇关于对Lua设计者的访谈记录中,作者有这么说过:

[Read More]

构建Lua解释器Part1:虚拟机的基础--Lua基本数据结构、栈和基于栈的C函数调用的设计与实现

前言

        从本篇开始,我们正式进入到Lua解释器的开发阶段(这是一个遵循Lua5.3标准的项目)。本篇并不直接接入到设计和实现语法分析器和词法分析器的阶段,而是先设计和实现Lua虚拟机的基础数据结构(包括Lua最基本的数据结构,如基本数据类型,表示虚拟机状态的global_State和lua_State结构,在函数调用中扮演重要角色的CallInfo结构等)以及设计和实现基于栈的C函数调用流程。这些都是理解后面虚拟机运作的基础。由于这是一个仿制项目,为了和官方版本做区分,就称之为dummylua,后面要称呼本项目时,一律用dummylua来表示。

[Read More]