Python内核编译

编译环境

  1. Windows11,VMware16,Ubuntu20.04,虚拟环境。
  2. PC机,内存32G,CPU 16 核心,I7八代。
  3. Ubuntu20.04 虚拟机。

编译准备

  1. 下载Python源码,https://www.python.org/downloads/source/
  2. 新建python文件夹,解压源码
sudo tar -zxvf Python-3.10.2.tgz

编译源码

  1. 进入源码目录
cd Python-3.10.2
  1. 初始化编译环境
./configure
  1. 开始编译
make -j8 OPT=-g CFLAGS=-g

编译成功
在这里插入图片描述

调试源码

  1. 下载Clion: https://www.jetbrains.com/clion/
  2. 解压 源码
sudo tar -zxvf CLion-2020.3.4.tar.gz
  1. 启动CLion
cd clion-2020.3.4
cd bin
./clion.sh
  1. 新建项目,点击 New Project
    在这里插入图片描述

  2. 导入Python源码
    在这里插入图片描述

  3. 配置构建, 配置CMakeLists

cmake_minimum_required(VERSION 3.17)
project(python)

set(CMAKE_CXX_STANDARD 14)

file(GLOB SOURCE_FILES
        Programs/*.c
        Python/*.c
        Parser/*.c
        Objects/*.c
        Modules/*.c)

include_directories(.)
include_directories(Include)

add_executable(python ${SOURCE_FILES})
  1. 配置调试,第四步将build去掉
    在这里插入图片描述

  2. 开始调试,设置断点,点bug虫虫
    在这里插入图片描述

总结

Python是解释性编程语言,简单易用,有各种强大的第三方库,但是速度慢。Python内核通过Parser解析器对Python语法进行分析,然后通过compile.c进行编译,这一步会生成中间码,并生成.pyc序列化文件,然后交由ceval.c进行解释执行。Python内核通过c语言来构建对象模型,模拟类型关系。Pyrhon的GC通过引用计数和分代回收机制完成。Python虽然是脚本语言,但她却是强类型的。

相比于之前分析过的HotSpot,Python的内核实现相对比较简单,但也有不同之处,HotSpot是用C++实现的,Python内核使用C实现的,通过C来构建对象模型,模拟类型系统,比HotSpot的对象模型实现得更彻底,Objects目录下可以看到甚至有codeobject,funcobject,fileobject等等。再有二者都有中间码,单略有差异,Java字节码文件有严格的标准格式,甚至可以将Python代码编译成Java的字节码扔到HotSpot运行,而Pyhton则是通过序列化的方式生成中间字节码。还有Python仅有一个解释器来翻译执行,而HotSpot内置C1,C2编译器JIT等,尽管Python也尝试过JIT,但Python语言动态性太强,希望可以重写内核来实现吧。另外在核心执行环节,Python的解释器是一个大大的switch…case…来解释Python代码。而HotSpot则采用线索寻址来实现,效率高一点。语言设计就是这样吧,需要各方面做出牺牲和平衡。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值