今天打算开一个新的系列,本系列将和大家一起对Python的源码进行分析,有参考陈儒的《Python 源码剖析》(强烈推荐这本书),做到知其然知其所以然。

总体架构

首先我们先从总体结构看一下Python源码的整体架构:

大致分为三个模块

  • 代码文件 File Groups - python所提供的的大量的模块、库、以及用户自定义的模块。用户还可以通过自定义模块来扩展python系统。
  • 解释器 Python Core- 又称Python虚拟机,对代码分析理解,翻译成字节流,并运行这些字节代码。
    • Scanner 负责词法分析的工作,将代码一行一行切分为 token
    • Parser 则负责语法分析,将 Token 组织为抽象语法树
    • Compiler 则将语法树转化为指令集合的字节码流,最后由 Code Evaluator 来执行这些字节码。
  • 运行环境 Runtime Env - 包括运行时的对象、基础类型结构、内存分配器和实时的运行状态信息。
    • ObjectType Structure 分别是程序在运行过程中生成的对象和Python中的自带内建对象,如int、List、dict等。
    • Memory Allocator 则负责申请创建对象需要的内存,本质就是封装了 C 语言里面的 malloc() 函数。
    • Current State 负责维护运行时的各类状态信息,以便在程序执行过程中如果发生状态变化(正常态和异常态)时,仍然能正常运行。

然后可以看一下Python源码的目录结构:

这里有几个目录值得关注一下:

Include:包含了 Python 提供的所有头文件,如果用户需要自己用 C 或 C++来编写自定义模块扩展 Python,那么就需要用到这里提供的头文件。

Lib:包含了 Python 自带的所有标准库,且都是用 Python 语言编写的。

Modules:包含了所有用 C 语言编写的模块,比如 math、hashlib 等。它们都是那些对速度要求非常严格的模块。而相比而言,Lib 目录下则是存放一些对速度 没有太严格要求的模块,比如 os。

Parser:包含了 Python 解释器中的 Scanner 和 Parser 部分,即对 Python 源代码进行词法分析和语法分析的部分。除此以外,此目录还包含了一些有用的工 具,这些工具能够根据 Python 语言的语法自动生成 Python 语言的词法和语法分析器,与 YACC 非常类似。

Objects:包含了所有 Python 的内建对象,包括整数、list、dict 等。同时,该目录还包括了 Python 在运行时需要的所有的内部使用对象的实现。

Python:包含了 Python 解释器中的 Compiler 和执行引擎部分,是 Python 运行的核心所在。

PCbuild:包含了 Visual Studio 2003 的工程文件,研究 Python 源代码就从这里开始。

Programs:包含了 Python 二进制可执行文件的源码。

Python源码解读之零 Python源码整体架构相关推荐

  1. DM 源码阅读系列文章(二)整体架构介绍

    2019独角兽企业重金招聘Python工程师标准>>> 作者:张学程 本文为 DM 源码阅读系列文章的第二篇,第一篇文章 简单介绍了 DM 源码阅读的目的和规划,以及 DM 的源码结 ...

  2. 深度解读MRS IoTDB时序数据库的整体架构设计与实现

    [本期推荐]华为云社区6月刊来了,新鲜出炉的Top10技术干货.重磅技术专题分享:还有毕业季闯关大挑战,华为云专家带你做好职业规划. 摘要:本文将会系统地为大家介绍MRS IoTDB的来龙去脉和功能特 ...

  3. MyBatis 源码解读(零)导语

    简单介绍下我使用最多的持久层框架 Hibernate valuelist MyBatis 这三个框架,也是用过国内的一些产品,不过已经很少了. 虽然已经使用了很长时间,但是还没有认真的读过该项目的源码 ...

  4. 涨薪秘籍之源码篇:Spring全家桶源码解读,大师晋级笔记

    最近很多人留言说今年找工作太难了,要涨薪几乎更难了 !真的就这么悲观吗?其实不然,我们企业一直都在大量的招人,一直都没停过.只是一点和之前不一样要求变高了,优秀的人一直都缺. 我身边朋友所在的大厂也一 ...

  5. linux下free源码,linux命令free源码解读:Procps free.c

    linux命令free源码解读 linux命令free源码解读:Procps free.c 作者:isayme 发布时间:September 26, 2011 分类:Linux 我们讨论的是linux ...

  6. Java Review - PriorityQueue源码解读

    文章目录 Pre PriorityQueue 概述 PriorityQueue 继承关系 PriorityQueue通过用数组表示的小顶堆实现 时间复杂度 构造函数 方法 add()和offer() ...

  7. Java Review - Queue和Stack 源码解读

    文章目录 Pre 概述 Queue Deque ArrayDeque 一览 构造函数 属性 方法 addFirst() addLast() pollFirst() pollLast() peekFir ...

  8. PostgreSQL 源码解读(35)- 查询语句#20(查询优化-简化Having和Grou...

    本节简单介绍了PG查询优化中对Having和Group By子句的简化处理. 一.基本概念 简化Having语句 把Having中的约束条件,如满足可以提升到Where条件中的,则移动到Where子句 ...

  9. Elasticsearch 7.X Ik源码解读,及自定义远程动态词库

    一.ik 远程词库 上篇文章对ik进行了整体的讲解,包括远程动态词库的讲解,但是上篇文章中是基于nginx+静态txt文件实现的,利用nginx 对文件修改后自动添加Last-Modified 的属性 ...

最新文章

  1. AI人才「用工荒」如何解决?看看这几家顶级公司的应对策略
  2. php curl viewstate,php curl – 发布asp.net viewstate值
  3. 语言 重量计算_R语言 第五章 高级绘图工具(4)
  4. c++11中thread join和detach的区别
  5. RabbitMQ单机瞎玩(1)
  6. ASP.NET Core和Angular 2双剑合璧
  7. 不会JS中的OOP,你也太菜了吧!(第二篇)
  8. CentOS 7安装Teamviewer 12
  9. 6.数据结构 --- 树和二叉树
  10. 同步现象 心理学_「心理学学了些什么?」基础心理学知识1
  11. MyVoix2.0.js 源码分析 WebSpeech与WebAudio篇
  12. OV7725学习(二)
  13. WPS Office Pro v10.8.2.6726 绿色便携专业增强版
  14. julia安装源_[julia]本地离线安装package
  15. 如何让微信公众号的排名靠前些,文章的排名规则
  16. Win 7 安装office visio
  17. 超人说我最叼蝙蝠侠笑了 超级英雄战力排名
  18. Registered driver with driverClassName=oracle.jdbc.driver.OracleDriver was n
  19. 网络游戏(MMORPG) 好玩的原因
  20. 计算机软件在生物学应用,计算机辅助教学软件在生物教学中的应用

热门文章

  1. 神秘的程序员表情包 (第一发)
  2. 论文精读:Asynchronous, Photometric Feature Tracking using Events and Frames(IJCV 2019)
  3. 韩语计算机术语大全,韩语词汇辅导:韩语计算机、互联网术语1
  4. Python求数组众数
  5. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift 论文笔记
  6. 微信小程序开发之小程序交互(实现登录功能)
  7. Android的webview有什么用,Android中webview使用的一些坑
  8. 在 CentOS 8 上使用 LXC / LXD 运行 Linux 容器
  9. python爬虫实战一|大众点评网
  10. python爬虫教程简书_7个Python爬虫实战项目教程