系统:ubuntu 12.04 STL
python版本:2.7
既然要学习python的源码,首先咱们要在电脑上安装python而且下载python的源码,ubuntu 12.04 STL
自带的python版本为2.7.3,这就能够了,接下来下载源码,下载python2.7.7的源代码,下载结束后解压文件,咱们会看到以下文件结构:,接下来介绍一下,
demo文件夹里放的是一些例子;
Doc文件夹里放的是文档,Grammer是语法分析器,include是python所包含的一些头文件,Lib是python的库,都是用python语言写的,Moduels是用C写的python模块,Parser是分词器。图片是最生动的文字,如今我来附上我所理解的python整体架构图片:
其中,最左边的python的库,模块以及用户自定义的模块,都依赖于python解释器来实现,而python解释器主要包括扫描器,分词器,编译器和代码生成四部分,咱们写一个python文件以后,由python解释器执行,其大体执行过程以下:
一、扫描器扫描python文件,将扫描结果发给分词器;
二、在扫描过程当中识别出文件中的对象,类型和结构(注:在python中类型和结构都是对象);
三、分词器将结果发给编译器,编译器在此时生成相应对象同时给对象分配内存空间;
四、编译以后将代码生成,进行内存管理并处理当前状态。
五、对象、类型、结构体、内存管理以及当前状态构成了python极其复杂的runtime运行时。
还有,不少人会有疑问,python是动态语言,内存究竟是如何管理的,初来乍到,我也不太明白,因为python的各类历史缘由,python的内存处理和线程管理很是复杂,打开源码看看,若是出现相似object_new这样的东西,那么他的内存就是用C++中的new来开辟的,若是是object_malloc这样的东西,则表示内存是用C中的malloc来实现的。
python属于脱管型的语言,内存不须要咱们手动处理,方便了不少,其实,python在底层是用自动引用计数器来实现的,python中建立小对象时,每每直接在内存池中建立,而大对象则是使用new/malloc从内存中再建立一个。针对并不复杂的对象关系时,好比只有一个对象时,python是不会运行链路检测的,而若是对象不少,过系又很复杂,就会有一个链路检测,以防出现循环引用和死循环的问题,当释放内存时,则遵照自动引用计数的规则,很是了不得。
好了,本篇先讲到这里,下次继续学习。python
后续的python学习笔记: http://www.androiddev.net/python2/ android