python内核源码编译-内核级pyhon:编译python编译器和语法变化

如今,说到编程语言,几乎离不开Python。 甚至这种语言也早已成为切茴香的手段。 各种1元学习Python的引流课程层出不穷。 从这个现象中,我们可以感受到Python句型设计的成功。 它基本实现了其创作者的初衷:简单易懂,其美如白居易的诗:“老妇能懂”。

事实上,Python看似简单的外表下隐藏着非常复杂的内核。 我在笔试中被问到如何用python语言创建一个对象。 ,在后来的搜索过程中,了解到每个python对象都可以定义一个__new__方法,用于为对象预先分配显存,然后__init__方法作用于这块显存进行初始化。 由此,我意识到python语言比我想象的要复杂得多。 同时,虽然python代码有特定的书写套路,也就是所谓的“pythony”方法,但这种方法可以极大地简化代码大小,提高可读性,比如所谓的Commplementation。 在意识到自己对python语言理解的粗俗之后,我决定重新学习和学习python句型。

我读过一些Python语言的书籍,但总觉得有点枯燥。 这就像记忆短语一样,需要你死记硬背。 我突然意识到为什么不深入python编译器的实现,看看它是如何设计和实现的。 通过编译器的分析来理解python句型是不是更有技术含量了,而且我一开始就设计了两个编译原理课程:这里是课程链接。 如果你从编译原理的角度去寻找Python语言,这个角度会变得更加高级,你对Python语言的理解也会更加通透。

Python本身是一个开源项目,所以它的编译器源码非常容易获得,但是整个项目考虑到在各个平台上开发的需求,所以进行了专门的配置。 我发现基于windows,使用vs2019来研究Python内核代码最合适。 首先我们看一下它的下载和编译。 第一步是下载代码,借助git,命令如下:

python内核源码编译-内核级pyhon:编译python编译器和语法变化

git clone https://github.com/python/cpython

下载后,本地目录下会有一个cpython文件夹,所有代码都在上面。 我们需要对代码3.9.0b1分支进行研究,因此需要执行如下分支切换命令:

cd cpython
git checkout tags/v3.9.0b1 -b v3.9.0b1

使用vs2019编译Python内核时,需要做一些配置。 我们需要通过visualstudioinstaller安装一些与Python开发相关的组件,如右图:

然后进入代码目录:/cpython/pcbuild/,点击上面的pcbuild.sln打开整个项目,然后打开vs的解决方案管理器,点击小房子左边的图标,将视图转换为文件夹查看,我们可以看到整个python内核的代码层次结构:

现在我们还不能直接编译它的代码python内核源码编译,因为很多依赖组件还没有下载。 pcbuild目录下有一个get_externals.bat脚本,专门用于获取外部依赖组件。 而这个脚本需要做一些修改,因为上面有一个组件因为版本问题无法直接下载,用电脑打开,然后修改如下:

python内核源码编译-内核级pyhon:编译python编译器和语法变化

选择如上图这一行,原来的内容是libffi,我们下载的时候需要指定一个版本,这里我们指定版本3.30,所以选择该行,修改为libffi-3.3.0,然后打开控制台,输入get_externals。 bat执行脚本,会下载相关组件,完成后,cpython目录下会多出一个目录:externals,我们还需要做一些修改,进入externals目录,将上面的子目录libffi-3.3.0改成到libffi,否则编译时会出错。 完成此类工作后,使用VS的“生成”->“生成解决方案”来编译python编译器。 整个工程很小,不到5分钟就可以编译完成。

接下来,让我们更改代码,对 python 编译器进行一些可见的更改。 打开Grammar目录,然后打开文件Grammar,这是Python的语法定义文件。 看过这里的编译原理教程的朋友应该很熟悉这个文件的内容。 如果你是不懂编译原理的朋友,可能很难理解。 。 开通后,我们进行以下修改:

看上图中选中的那一行,我们在pass之前添加了一个新的关键字proceedpython内核源码编译,学过python的朋友都知道pass是一个关键字,意思是“直接跳过”,这里我们再添加一个效果相同的关键字proceed,它的用法和pass一样,这里可以添加任意关键字,比如keepgoing等,完成后重新编译项目,以便python句子库重新读取语法文件并构建新的句子解析树,编译完成后,打开命令行窗口,执行以下操作:

从 vs 启动命令行后,路径应该位于 PCBuild 下。 如果你的机器是64位的,编译出来的可执行文件是amd64下的,所以cd进去,然后执行python_d.exe -Xoldparser,这样启动Python运行环境,对应的编译器使用我们修改后的句型,然后输入一段代码如上图所示,将pass替换为proceed,执行后可以看到编译器能够识别出proceed关键字,其功能与pass相同。

在 Grammar 文件夹下,还有一个名为 Token.txt 的文件。 同样,如果你看过我的编译原理课程,你一定熟悉这个文件的内容。 python编译器本身自带词法分析功能。 我们在PCBuild的父目录下创建一个源代码文件,如下:

#Demo application
def  my_function():
    proceed
    

如何执行以下命令:

可以看到,python编译器在阅读源码后,输出了一系列符号描述。 这个符号对应着所谓的token,它是编译原理中的一个关键概念。 不了解的朋友可以去我的课程看看。 在后续的深入研究中,我考虑使用java和c来实现python编译器。 如果我们能够顺利完成的话,我们必须对Python句型有足够深入的理解。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 python内核源码编译-内核级pyhon:编译python编译器和语法变化 https://www.wkzy.net/game/168157.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务