一、项目概述

Python是一个动态类型语言,其解释器是一个基于栈式字节码的抽象机器。本项目拟实现一个Python虚拟机,探索支持动态类型语言的虚拟机的设计与实现技术。

二、需求分析:

Python源文件首先被编译成字节码文件,这个文件的后缀是.pyc,Python虚拟机需要做的工作就是读取并解析.pyc文件,然后根据字节码执行相应的计算。本项目中的虚拟机需要实现Python中的基本功能:控制流、函数、列表、字典、类和对象、垃圾回收、加载模块。

三、用例图

从上面的需求分析可以得到如下的用例:

四、业务类图

在Python中,一切都是对象,数字、字符串、元组、列表、字典、函数、方法、类、模块等等都是对象。PyObject类是Python中所有类型的基类,整型、浮点型、列表、词典、字符串等类型都继承自它。在pyc文件中,CodeObject结构存放着程序的绝大部分信息,它是程序源代码编译之后的结果,我们用CodeObject类用来保存它的信息。

Python拥有自动内存管理机制,因此需要一个GC进行所有对象的回收。我们需要一个虚拟机的堆,所有对象的内存分配就在这个堆中进行。

程序的每一次函数调用都会有一个栈帧与之对应,因此要实现一些数据结构堆函数调用过程进行记录。这里用FrameObject实现栈帧调用。

五、数据模型

pyc文件以二进制形式读入内存,经由虚拟机分析、运行,不需要数据模型。

posted on 2020-12-15 17:49  xiop  阅读(263)  评论(0)    收藏  举报