假装自己是人类
手把手教你构建 C 语言编译器(1)- 设计

本章是“手把手教你构建 C 语言编译器”系列的第二篇,我们要从整体上讲解如何设计我 们的 C 语言编译器。

手把手教你构建 C 语言编译器(0)- 前言

“手把手教你构建 C 语言编译器” 这一系列教程将带你从头编写一个 C 语言的编译器。 希望通过这个系列,我们能对编译器的构建有一定的了解,同时,我们也将构建出一个能 用的 C 语言编译器,尽管有许多语法并不支持。

Vim 小技巧——合并行块

看教程时,自己动手输入教程的例子有助于学习和理解。但有时会发现自己输入的代码跑不通,而粘贴的代码是正确的。这时我们希望能一行行地对比自己输入的代码和原始代码。用 Vim 怎么做到呢?

Vim 小技巧-删除行末空格

在编写代码时,我们时常一不留神就在行末多打了几个空格。却又看不出来,即使用 vim-airline 之类的插件能知道有行末空格(trailing spaces),删除起来也特别麻烦。本文就介绍一个我就常用的 vim 快捷键:删除行末空格。

Closure 内涵理解

某人学习了许久的闭包,认为自己已掌握了其中的精髓,于是问禅师: “禅师,闭包真心强大,相比对象:我觉得对象只能算是穷人的闭包!” 禅师微微摇头,并不说话。这人怎么也想不通,只得回去苦心钻研。 许久之后,这人再次找到禅师: “原来闭包只是穷人的对象” 只见禅师轻轻一笑,点了点头。

闭包(closure)的概念,常出现在函数式编程的概念中。当今许多动态语言都包含了闭 包的概念,如 python、Javascrip、Lisp 等。甚至静态语言(如 rust)也开始支持。那 么这个神奇的闭包究竟是什么?又为什么会受到大家的热爱呢?本文将从闭包(closure)与对象(Object)的关系入手,通过实例来分析闭包背后的内涵。

Vim 最大化当前窗口

在编辑/查看文件时,时常遇到的一个需求是:临时最大化当前窗口(vim 术语中的 window,tmux 中的 pane)。Vim 原生并不支持该操作,但我们可以利用原生的标签页(tab page)来模拟这样的行为。

Test of Hexo

折腾许久的博客工具,反而没有实际写多少内容。遂决定“尽量”不折腾了,而是专心写些东西。最终用 Hexo 搭的博客,选 Maupassant 作主题,几乎没有额外的配置,准备就此开工。第一篇文章就用作测试 Hexo 的 Markdown 语法吧。