用 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

继续阅读...

Cocoa 并发编程笔记

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

继续阅读...