之前很长一段时间,我一直将注意力集中在 Python 应用上,推广一些好用但不知名的库或者框架。我有个习惯,碰到比较好的工具,喜欢研究它的底层实现,而非满足于 “用好” 一个工具,期间阅读了一些优秀的 Python 库源码,震撼于这些作者天才的构思和精妙的哲学思维,再回头看看自己对 Python 的浅薄认识,愧不敢当,自己充其量就是知道基本的语法而已,遂决定深入研究 Python 语言的 C 版本源码。我认为技术实际上应该称为“代码的艺术”,里面有些东西只可意会不可言传,只有在她身上投入足够多的精力、时间,层层抽丝剥茧、宽衣解带,才能逐渐摸透肌理,真的做到 “懂” 她。这个过程必然是痛苦、枯燥的,毕竟要爬到巨人的肩膀上不是一件容易的事,最终能到达那个地方便足矣。
在开始之前,我检索了目前市面上能找到的书籍,希望可以借力,幸运的是陈儒先生的《Python源码剖析-深度探索动态语言核心技术》已经在 CPython 源码方面做了一些工作,可惜该书已成绝版,陈儒先生的这本书以 Python 2.5 为分析对象,如今的最新版本是 Python 3.8,时隔多年,Python 语言也经历了诸多彻底的变化,尤其是 Python 3 中引入了一些与 Python 2 完全不兼容的特性。
虽然如此,陈儒先生的这本书依然为我指明了方向,极具参考价值,如果有可能也有兴趣,你也可以先阅读《Python源码剖析-深度探索动态语言核心技术》一书,可以对 Python 的实现有一个基本的印象。
我计划在陈儒先生的基础上,以最新的 3.8 版源码为目标进行研究,由于我对最新的 Python 源码也不熟悉,前期一段时间更多参考陈儒先生的工作完成,后期逐步增加我比较关注的细节。
更早的时候我对 Java 虚拟机和 Lua 虚拟机做过一些粗略的研究,其中 Java 虚拟机是目前应用最广泛的虚拟机之一,Lua 则是目前最快的虚拟机之一。大多数高级语言都拥有自己的虚拟机,实现方案各有特色,其中充斥这人类精英对复杂系统的哲思,通过对比它们的实现,我希望更清晰的展示其中的优秀思想。这些编程语言或者虚拟机最让我着迷的是其 “自举” 能力,即一些语言特性不仅是它们提供的服务,这些语言特性甚至也在底层支撑语言本身,这说明它是一种高度自洽的系统,我将会在后面的解析中重点提醒到这一点。