当前位置:   article > 正文

python虚拟机详解_Python 虚拟机实现(一)

python虚拟机的实现

python并不将py文件编译为机器码来运行,而是由python虚拟机一条条地将py語句解释运行,这也是为什么被称为解释语言的原因之一。但python虚拟机并不直接执行py語句,它执行编译py語句后生成的字节码。本篇简单地讲下编译、运行的过程,涉及到的内容有如何编译、控制流、函数及类的实现等。

0. python的编译

python将py文件编译成为PyCodeObject,再将这个对象写入某文件就成为了pyc文件,文件中包含python的magic number(来说明编译时使用的python版本号)、源文件的mtime(使pyc和py文件保持同步)、编译出的code对象。将对象写入到一个文件似乎听起来不太可能,不过其实很简单,python只写入特定类型的对象,比如要写入一个code对象,python会按一定的顺序将这个对象中的属性一一写入,由于对象是固定的,因而只要记下写入时的顺序就可以从文件中恢复出对象。注意我们这里谈论的并不是python中的序列化。python在写入实际的对象时会写入标识符,即可以标明对象的边界,又可以保持内容信息以在内存中恢复出对象。

python将对象写入文件最后会将调用到两个函数,一个用来写个int,一个用来写入string。对于string来说,为了达到和intern机制一样的目的不重复写string,在写入的时候python还会维持一个dict来保存已经写入的被intern处理后的string,因此当一个string被intern处理过并且出现在之前所说的dict中时,python仅仅会写入该string的索引值,即它是第几个string。当读取文件时,python则会根据每个string的索引值重建一个list,碰到重复的intern的string时就可以根据索引值读出该string的值了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/199093
推荐阅读
相关标签
  

闽ICP备14008679号