用 Golang 撸一个玩具编译器

社畜以来每日搬砖,很久没有像读书时一样学习一些东西沉淀下了。最近在 GitHub 上看到 the-super-tiny-compiler 这个项目,很喜欢它极简的设计和实现,也给了对编译原理一知半解的我一个从头再来的机会。个人感觉原项目用 JavaScript 抹去了一些实现细节的同时也模糊了具体的理解,故此用 Golang 学习与实现。 概述这里我们实现的玩具编译器是将 lisp 风格的代码转化为 C 语法,例如 (add 2 (su

继续阅读...

排序算法笔记

从接触算法就开始说的排序,这里总结一下。 Bubble Sort冒泡排序是最基础的排序了,主要有三个基本步骤: 每次比较两个值 如果左边的值更大,则交换两个值的位置,以将更大的值排到右边 向右移动一个位置 123456789func bubbleSort(data: inout [Int]) { for outerIdx in stride(from: data.count - 1, to: 0, by: -1) &

继续阅读...

数据结构笔记

这学期感觉 Terry 的 Data Structures for Application Developers 对我帮助巨大。毕竟非科班出身,很多概念都是一知半解。第一天上课的时候,Terry 掏出了一把小锤子,尝试用它干各种事情。大家哈哈大笑的时候,Terry 说, This is exactly what you are doing. You have lots of tools, but you always use Arra

继续阅读...

Raspberry Pi 手记

近期搞来一块新电脑(?)不能免俗,选择了 Raspberry Pi 3B。树莓派的牛皮纸袋包装真的很可爱,乍一看真的很像从超市买了一袋子树莓回来。 初始化安装系统准备一张 MicroSD 卡,系统镜像直接下载 Raspbian。有个 Noobs 是一个 easy installer,没什么用处。下载镜像后烧写到 MicroSD 卡里,推荐使用 Etcher,全平台的一个简洁好用的镜像烧写工具。 “无头”启动一般来说,树莓派是需要接上

继续阅读...

Cocoa 并发编程笔记

并发所描述的概念就是同时运行多个任务。这些任务可能是以在单核 CPU 上以分时的形式同时运行,也可能是在多核 CPU 上以真正的并行方式来运行。在 iOS/macOS 中,主要提供了 pthread, NSThread, NSOperationQueue, Grand Central Dispatch 和 NSRunloop 等方法实现并发编程。 Thread线程(thread)是组成进程的子单元,操作系统的调度器可以对线程进

继续阅读...