pythonpythonPython

大师兄的Python源码学习笔记(一): 准备工作

2021-01-27  本文已影响0人  superkmi

大师兄的Python源码学习笔记(二): 对象

一、总体架构

1. 文件组(File Groups)
  • 核心模块(Core modules): Python自带的内建模块。
  • 库(Library): 第三方包。
  • 用户自定义模块(User-defined Modules):用户自定义扩展的模块。
2. 核心(Python Core)

1) Scanner对应词法分析,将Python源码分为一个个token。
2) Parser在Scanner的分析结果上进行语法分析,建立抽象语法树(AST)。
3) Complier根据AST生成指令集合-Python字节码(byte code)。
4) Code Evaluator执行字节码,也可以称为虚拟机。

3. 运行环境(Runtime Environment)

1) 对象/类型系统(Object/Type structures):包含了各种内建对象,比如int、list、dict和各种用户自定义的类型和对象。
2) 内存分配器(Memory Allocator):负责创建对象时的内存申请。
3) 运行时状态信息(Current State Of Python):维护解释器再执行字节码时不同的状态之间切换的动作。

二、Win10下配置源码编译环境

三、源代码组织

.
├── Doc
├── Grammar
├── Include
├── LICENSE
├── Lib
├── Mac
├── Makefile.pre.in
├── Misc
├── Modules
├── Objects
├── PC
├── PCbuild
├── Parser
├── Programs
├── Python
├── README.rst
├── Tools
├── aclocal.m4
├── config.guess
├── config.sub
├── configure
├── configure.ac
├── install-sh
├── m4
├── pyconfig.h.in
└── setup.py

四、修改源码

static PyObject *
long_to_decimal_string(PyObject *aa)
{
    PyObject *v;
    if (long_to_decimal_string_internal(aa, &v, NULL, NULL, NULL) == -1)
        return NULL;
    return v;
}
static PyObject *
long_to_decimal_string(PyObject *aa)
{
    PyObject *str = PyUnicode_FromString("here before int");
    PyObject_Print(str, stdout, 0);
    printf("\n");

    PyObject *v;
    if (long_to_decimal_string_internal(aa, &v, NULL, NULL, NULL) == -1)
        return NULL;
    return v;
}
Python 3.7.2 (default, Jan 27 2021, 11:30:56) [MSC v.1925 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print(1)
'Here before int'
1
上一篇下一篇

猜你喜欢

热点阅读