0%

如果服从我人生度过的二十多年留下的惯性,那么今年大概率依然不会有这篇年终总结的。一来是拖延症作祟,说到底,1 月 1 日也只是一个人为定义的分隔符,并不存在什么具体的物理意义 —— 那么轻松地 delay 过这种无意义的日子对于重度拖延症患者来说也是非常自然的事情。二来,也不觉得这样的总结能给我带来什么收益(广义的)。
那么之所以会有这篇处女作,确实是一个小小的契机改变了我的想法。

Read more »

源码阅读笔记是不可能续写的,这辈子都不可能续写的,paper notes 也是几年也不会更新一篇的,还不如把博客随便当个笔记本记录点遇到过的有意思的问题好了。

Protobuf 是 Google 整的一个序列化/反序列化框架,性能不算很好不过用的人比较多,各个语言的实现也比较全,其中 golang 的版本是 google 官方维护的 golang/protobuf,但由于比较保守,对各种新 feature request 不太感兴趣,所以社区广泛使用的是一个 fork 的版本 gogo/protobuf,gogo 版本不仅在性能上做了很多优化,而且提供了很多 extensions,可以让生成的代码更符合 go 开发的习惯。

这篇 blog 记录的是在使用 stdtime extension 中遇到的一个性能问题排查过程和修复方案。stdtime extension 可以把 Google 提供的一个公共库中 Timestamp 的类型定义转化为 golang 标准库 time.Time 的定义。

Read more »

前言

HaystackF4 是 Facebook 为了解决照片存储的场景开发的一套小文件存储系统。整个设计非常简洁(褒义,虽然简洁到让人怀疑这也能发 OSDI),但是却把每个部分的设计和考虑解释得非常清楚。读完 GFS 会感觉有不少未解之谜在 paper 中没交代清楚,但读完 Haystack 和 F4 就感觉异常通顺。Facebook 一开始开发了 Haystack 是为了覆盖整个照片存储场景,后来发现了温存储场景可以优化的地方,又开发了 F4 将冷数据从 Haystack 中剥离出来,单独存储,并且 F4 的 paper 中描述了整套 BLOB Storage 系统同时修改了一些 Haystack 的设定,因此将这两篇放在一起讲。F4 也分享了很多 Facebook 在这套系统的设计和使用上的很多经验,值得学习。

Read more »

前言

这是 CPython 源码阅读系列的第一篇,我也不知道能坚持多久,或许连这篇都写不完(如果你能在网上看到这句话,说明至少第一篇写完了)。

Python 是一门非常强大的动态语言,语法特性多且优美,非常符合人类直觉,是我最喜欢的语言之一,再加上 CPython 做的优化非常少(笑),不像某些 JS 引擎如 V8,为了性能各种 hack 技巧太多不适合阅读学习。

CPython 源码链接

对 Python 比较精通以后,自然而然会产生疑问,那么强大的 Python,是怎么通过一门语法特性非常少的静态语言 C 来实现的呢?

当然,阅读 CPython 源码的第一步,就是让你抛弃 C 语言是静态类型的错觉。

本系列无明显顺序,更类似于个人阅读中的笔记,可能有错误,欢迎指出。

本系列文章要求阅读者:

  • 了解 C 语言的特性,特别是强制转换时的行为
  • 了解 Python 语言本身的基本行为和高级特性
Read more »

HaScheme 是用 Haskell 实现的 Scheme 解释器,作为 函数式编程语言课程的 Course Project, 应该是这学期最满意且收获最多的一个大作业了,得益于之前编译原理 Course Project NaiveC 踩了很多坑,对编译器/解释器前端相关的一些理论有了一些了解,在连肝五天以后基本完成了 Scheme 标准语法的大部分内容。

HaScheme 基于 Stack 构建了项目,如经典的解释器架构一样,将项目主要划分为了三个模块,LexerParserInterpreter,输入的 Scheme 代码首先通过 Lexer 转为 token 序列,然后通过 Parser 将 tokens 转换为 AST,最后由 Interpreter 解释 AST 执行。

HaScheme 参考了很多 Write yourself a Scheme in 48 hours 这个教程的内容,这个教程非常初学者友好,不过这个教程实现的文法作用域有一些 bug。HaScheme 中修复了文法作用域的问题,并且扩展了语法特性。

Read more »

这学期(又)上了一遍软工3,一开始准备做个微信端的校园服务公众号,后来感觉不是很喜欢微信开发,需要纠结很多微信 API 和权限的问题,所以更换了纯 API 的项目。

CamusAPI 这个项目的初衷是希望建立一个清华内部的校园开放 API 平台,供校园应用的开发者使用,不需要处理复杂的爬虫逻辑和页面逻辑,将学校的系统封装成一层清晰完整的 RESTful API 系统。

Read more »