大家好,新一期的荐书栏目如期跟大家见面了。
先来看看今天的主角是谁:《Python源码剖析——深度探索动态语言核心技术》,2008年出版,作者 @陈儒 ,评分8.7分。
是的,你没看错,出版年份2008年。这本书基于Python2.5,到了十年后3.7版本的年代,可以说大部分内容已经过时了,而且,还可能缺失了很多关键内容。那你也许会问,一本过时的书,有啥好推荐的呢?下面且听我给你慢慢道来。

一个巧合,一份期待

在写第一篇荐书《编写高质量代码改善 Python 程序的 91 个建议》的时候,我偶然发现知乎上有人提及,说 @赖勇浩 大大正在接手这本源码剖析的新版本编写,很多人留言说期待。我想起曾经看到,有人推荐过这本书,于是便去查了一下。
书的内容简介中有这一段,我看了便觉得兴趣满满:

本书以CPython为研究对象,在C代码一级,深入细致地剖析了Python的实现。书中不仅包括了对大量Python内置对象的剖析,更将大量的篇幅用于对Python虚拟机及Python高级特性的剖析。通过此书,读者能够透彻地理解Python中的一般表达式、控制结构、异常机制、类机制、多线程机制、模块的动态加载机制、内存管理机制等核心技术的运行原理,同时,本书所揭示的动态语言的核心技术对于理解其他动态语言,如 Javascript、Ruby等也有较大的参考价值。

作为一个半路上车,刚走出新手村的Pythoner,我正愁如何才能成为一个优秀的Pythonista,这本书闪耀着绝世秘籍的光芒,我起初有点望而却步,过后却又跃跃欲试。
那么,新书啥时候上市呢?在华蟒用户组 里,正好有人问到这个消息,群众们纷纷表示翘首以待。不过,赖勇浩站出来回复了:
看回复的时间,这事已经过去一年了…
虽然这个神秘的新作者拖稿了,但书的期待值并未因此减损,相反,这恰恰意味着新书上市之日更近了!说不定就在明年上半年了呢。赶在新书出版前,我们荐书栏目先来安利一波,这绝对是一件有先见之明的事,喵喵,美滋滋~~~

一份提纲,一些建议

铺垫了这么多,接下来要好好说下这本书的内容了。以下内容仅针对08版书籍,等新版上市后,荐书栏目会对两版的差异跟进介绍。
全书主要分两部分,第一部分(1-6章)剖析Python的几大内建对象(如整数、字符串、列表、字典),涉及对象创建、维护、缓冲池、提升效率的机制等内容;第二部分(7-16章)剖析Python虚拟机,涉及虚拟机框架、一般表达式、控制流、函数机制、类机制、运行环境初始化、动态加载机制、多线程机制、内存管理机制等内容。
有道是,Python中万物皆对象。而Python是用C语言实现的,C语言却是典型的面向过程语言 ,那么,它是如何实现”万物皆对象“的呢?实际上,Python对象是C的结构体在堆上申请的一块内存(包括连续内存与非连续内存),所有内建的类型对象都是被静态初始化了的。
按照书中的分类,Python对象可分如下:
其中,Fundamental对象是指类型对象,Numeric对象是指数值对象,Sequence对象是指容纳其它对象的序列集合对象,Mapping对象是类似于C++中map的关联对象,Internal对象是Python虚拟机在运行时内部使用的对象。
还有一种分类方式,Python对象可以分为定长对象 与变长对象。从这些分类中可以看出,Python对象之间存在着天然差异,那么,不同对象的生命周期管理(创建、维护、使用、回收)、对象的多态、对象缓冲池、以及其它特有的机制,这些都是怎么实现的呢?
书中第一部分内容就是对以上问题的回答。阅读过程中,我读到了一些熟悉的内容,例如之前在《Python中的“特权种族”是什么?》中发明的“特权种族”(例如神秘的[-5,256]数字、以及Intern机制的短字符串),它们在内建对象剖析的部分里都有。阅读的过程,就是从知其然,到知其所以然的过程,于我大有益处。
说实话,源码分析的部分,对我来说太难了,因为C语言基础早已交还给大学老师了…但是,阅读第一部分的好处是,你不必完全懂源码,因为作者加了很多注释,相关的分析过程也很详尽。
至于书中的第二部分,我还不敢进入。这部分需要一些编译原理知识、字节码及虚拟机知识。留待今后继续学习。
全书章节的编排结构特别清晰,已经提供了一份很好的学习路径提纲。这里,我还搜集了一些阅读建议,下面看看有什么:

如果你在用一门高级语言,想了解语言的实现原理,这本书是你的必选;如果你是一个 C/C++ 程序员,想写出高质量的程序,这本书也是你必选。—— @simonliu

需要说明的是,我不会向python语言的学习者推荐这本书,因为它不是一本python语言的教材。相反,作为分析Python运行时机制的专著,书中充斥着有关C、C++的讨论(我还读到了有用java做为比较的段落)。这不要求读者是专业的C/C++程序员,但是至少应该能够读懂C代码,最好知道 C++ STL是怎么回事。…我坚信,这本优秀的著作,值得译为英文,向全世界的C/C++/Python程序员推荐。——@膘

很好的讲解Python源码剖析的书籍,深入讲解了Python的各种特性是如何通过C语言实现的,对于想了解Python底层实现的程序员很有帮助,讲解的很详细,不过看底层C实现看多了也确实容易乏味、消磨耐性,尤其后面高级特性的剖析时,看起来愈发吃力、费劲。 目前先通读了一遍,帮助自己了解了Python的不少特性和其底层机制,还有很多地方草草略过并不十分明白,日后实力更上一层楼时,再回来拜读。 好书推荐!——@流星云

源码可以不读,这本书还是值得读的。——@赖勇浩

常备的手边书,深入了解Python的好书。——@清风

一份资源,更多福利

相信能够读到这里的读者,都燃起了一些阅读兴趣,可以“按图索骥”去学习。电子学习资源很多,对于爱学习 的你们来说,这不是啥难事。豆瓣读书、当当网和京东图书上,也有电子书可购买。
但是,如果你想买纸质书,不好意思,早就绝版了。二手旧书的价格贵得吓人,下面讯息给不差钱的同学们参考下:
在中英文的Python书籍中,这本剖析源码的书籍,可能是绝无仅有的一本,就凭这点,怎么推荐都不为过。对于可能会很快上市的新书,则是怎么期待都不为过的。如果有小伙伴知道出版消息,恳请在后台告知于我,不胜感激。
在荐书《黑客与画家》的时候,我们送出了一本精装书福利。等到这本源码剖析的新书上市时,送书福利肯定会是大大的,大家拭目以待吧。当然,后续其它荐书的书目,也很有可能会送福利,一样不容错过。
所以,我要打个小广告,还没关注的小伙伴,赶紧扫描下方二维码,立刻关注公众号Python猫 ,关注我们的荐书栏目,让我们一同学习,一同进步,一同抢福利,喵喵喵~~~
往期荐书回顾:
第二期:《Python最佳实践指南
第三期:《黑客与画家
延伸阅读: