Articles are paginated with only three posts here for example. You can set the number of entries to show on this page with the “pagination” setting in the config file.

MongoDB初探

前言

        本篇内容是我阅读完MongoDB 4.2官方文档后的梳理总结,并且只是梳理。梳理的内容并不包含MongoDB官方文档的方方面面,更多的是与我们项目相关联的部分。本篇博客不是简单对官方文档的整理,其中包含了很多官方文档之外的资料,文章的脉络和结构,也是根据本人的理解进行组织。本文并不打算阐述太多MongoDB操作和部署相关的内容,更多的是梳理其内部的一些运作机制,如果想了解如何部署和使用MongoDB API,请查阅官网
        最后,由于本人水平有限,如有不当之处欢迎指出,同时也欢迎读者加入QQ:185017593群聊。

[Read More]

红黑树探索

前言

        在沉浸了一年多之后,我开始重新拾起了写博客的习惯。过去一年主要在忙我的书的事情,一本关于如何实现Lua解释器的书–《Lua解释器构建:从虚拟机到编译器》。这本书将由机械工业出版社出版,目前已经过了终审,处于校对环节,预计明年1月能够出样书,大概2月份能够上市。随书源码已经放到github上了,有兴趣的读者可以点击这里进行访问。由于我想写的内容已经在书中展现,因此原来的博客dummylua-tutorial系列不再更新。
        对书籍的预热结束,言归正传,本篇将深入探索红黑树。红黑树由于难于理解与实现,业内一直将“手撸红黑树”作为调侃的梗。本文将要探索的是红黑树的设计与实现,在开始写博客之前,我已经动手将红黑树实现了一遍,并且通过了预定的测试,确实是“手撸红黑树”了,XD。该项目我已经放到github上,读者可以通过这个链接red-black-tree进行下载。

[Read More]
C 

构建Lua解释器Part12:Weaktable

前言

        本章我开始论述lua的弱表(weaktable)机制,到目前为止,我已经完成了弱表的设计和实现了,读者可以在dummylua的对应章节目录,找到对应的代码工程。本章,我首先会介绍什么是弱表,它的用途,最后分别介绍弱键、弱值以及完全弱引用。

[Read More]

探索libevent

前言

        libevent是当前一个非常知名的跨平台网络库,学习并研究它,可以让我们理解一个优秀的网络库是如何设计的。为此,我近期花了几天时间,过了一遍libevent的基础数据结构和基本运行机制。虽然libevent库整体并不是很大,但是短短几天内要彻底掌握所有的细节,还是有相当的难度,因此这里,我只阐述libevent最核心的运作机制。本文研究的libevent的版本是libevent-2.1.12-stable。

[Read More]

构建Lua解释器Part11:Upvalue

前言

        本章,我将深入探讨lua的upvalue机制。在写这篇博客之前,我已经自己动手实现了这个机制,并且将其提交到了github仓库dummylua上了。为了专注于upvalue机制本身的讨论,本章不会展示大量的代码细节,尽量在抽象层面来论述。

[Read More]

构建Lua解释器Part10:userdata

前言

        本章节,我开始对dummylua的userdata的设计与实现,进行论述。它的大体设计与实现,仍然是仿照了lua5.3的标准,由于,所有的内容,都是我自己理解后,重新实现,因此在一些实现细节上略有不同,但是整体设计思路遵循了lua的设计思想。本章的篇幅不会很长,因为userdata这个部分并不是非常复杂,因此我这里也会速战速决,将userdata的一些核心思想论述清楚,就将本章完结。

[Read More]

构建Lua解释器Part9:metatable

前言

        本章,我们将进入到metatable的探索之中。由于这块本身比较简单,而且我也不打算罗列代码细节,因此本章的篇幅不会很大。只是对一些我认为比较关键的部分,进行说明。首先,本章的主要任务,首先是简要介绍metatable是做什么的,然后简要说明一下,它如何被设置,接着介绍metatable的访问域,双目运算操作域、单目运算操作域等。最后会告诉读者,本章的实现逻辑位于dummylua工程的哪些部位。

[Read More]

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

前言

        前面,我已经用3篇blog的巨大篇幅,详细论述了Lua编译模块的一些基本知识。其中,Part5通过一个简单的打印hello world的例子,论述了编译出来的虚拟机指令,如何存到Proto结构中,最后再通过虚拟机执行的流程。Part6详细论述了,词法分析器的设计与实现。而Part7则论述了,expression的编译流程。本章,将作为Lua内置编译器论述的最后一个部分。往后的部分,将不再涉及编译相关的内容。当然,经历这篇,相信读者能够完全理解Lua内置编译器的设计与实现,个人认为完整度还是比较高的。

[Read More]

构建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]