python代码使用,Python从开源代码到使用(上)

本文探讨了Python、Java和C三种编程语言的编译和运行机制。Python作为解释型语言,其编译器工作相对简单,大部分工作在运行时完成。Java的编译器生成字节码,由JVM执行,而C语言编译后直接生成机器码。文章还介绍了Python的CPython编译过程,包括解析、语法树转换和字节码生成。
摘要由CSDN通过智能技术生成

你用Python写的每行编码都叫句子。Python中有很多形式的句子,主要包括变量命名和赋值语句,根据检验一行使用编码的条件语句,拿来使用频繁一致句子块的循环语句等等这些。

简介比较常见的编译程序模型:Java、Python、C。

在进行接下来的话题以前,先简介三种经典的编译程序模型。

松本忠雄老先生,在解读言语处理器的构成时,罗列了一类一般来讲的架构设计。

d47d5d07300519d76742fad55dc68c9e.png

处理程序主要主要包括三个部分:编译器(Compiler)、使用时(Runtime)和库(Lib)。

编译器:通俗的讲,是编译程序开源代码的应用程序。一般来讲,它会把开源代码编写出使用时(Runtime)鉴别的中间代码,但在恶劣情形下,比如说C,考虑到并没有使用时(Runtime),它会立即导出机器码。编译器还可以自身调整开源代码,移除使用时无需的数据,如批注等。

当Java虚拟机使用时,解释器和即时编译器能够 密切配合,挑选最好的方式 来评判编译程序当地编码的时间段和立即诠释使用编码的时间段。

ETF使用时应用程序:该应用程序是拿来使用特定编码的,最广为人知的就是JVM,因此还可以称之为虚拟机了。

虚拟堆栈描述了Java方式 使用的线程内存模型:每种方式 使用时,Java虚拟堆栈同时创建存储局部变量表、操作堆栈、动态连接、方式 出口等数据。每种方式 都被调用,直到使用完毕,对应于虚拟机栈从入栈到出栈的过程。

Lib):库是能够 理解的,它就像是一个字典,使用该应用程序所需的额外支持。基本上,标准库应该包含像stdio.h这样的基本IO库,以及平台提供的系统调用等。

这里的Java是经典的Java,中规中矩地遵循这个过程。

首个Java编译器(Javac)将开源代码.java文件编写出字节码。

在虚拟机(JVM)中引入文件中的字节码,而在这里,JVM承担了使用时(Runtime)的任务。

在JDK使用期间引入所需的库(Lib)。

因此,Python将有何不同?

同样,Python也会遵循这一过程~~。

但Python中编译器(Compiler)所承担的工作量相对较小,因为它无需进行复杂的语法检查以及形式校验等工作,而且大多数工作都是在使用时完成的,而且大多数错误也只能在使用期间发现。

类似于这样的言语,Runtime承担了大部分工作,它看起来就像是从开源代码立即使用出来,因此被称为“诠释型”。

同样,Python的使用效率远不及Java,也不如C等静态编译语言。

那C呢?

这种方式 能够 根据需要使用相应的编译程序调整,例如转换机器无需的变量名,添加混淆等,而使用时(Runtime)立即导出的编码则几乎被忽略,而导出文件通过链接应用程序能够 转换为平台可执行文件。

假如有一位了解反编译的同学,应该会对反编译后的C开源代码可读性有很大的怀疑,有时候只会去汇编,以了解应用程序的使用逻辑,相对于Java的.class文件,字节码保留了更多的数据,反编译后的编码可读性稍微好一些。

Hooli在我很喜欢的美剧“硅谷”里也有这样一个桥段,他组织了一个团队对Richard的音乐节目进行反编译,以获得数据压缩技术。

这个过程很有趣,有很多书都用了很长的篇大论来简介这个,这里就不再展开了。

一、CPython编译程序过程

首先从编译器进行,Python的编译程序过程大致分为以下四个步骤:

1.开源代码到解析树的解析(ParserTree)

2.将分析树转化为抽象语法树

3.把抽象语法树转换成控制流图(ControlFlowGraph)

4.根据流图向虚拟机发送字节码(bytecode)(ceval)

1d6b73c31e50e330da405064acdae826.png

d7c9af21bf7c2bb7150269c3070c1d11.png

dbb1a11137f4c04ca0bd472441113ed0.png

该python源码的编译程序和使用过程与最新的CPython3.8.4一致。

大多数人对这部分内容并不感兴趣,我就简单介绍一下,编译器主要进行词法和语法分析,遍历语法树生成流,最后为虚拟机生成机器码,即字节码。在这里,每一点都包含了大量的数据,所以无需再详细描述编译程序的细节。然后,通过虚拟机和字节码分析Python的使用情形。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值