一、项目概述
Python是一个动态类型语言,其解释器是一个基于栈式字节码的抽象机器。本项目拟实现一个Python虚拟机,探索支持动态类型语言的虚拟机的设计与实现技术。
二、需求分析:
Python源文件首先被编译成字节码文件,这个文件的后缀是.pyc,Python虚拟机需要做的工作就是读取并解析.pyc文件,然后根据字节码执行相应的计算。本项目中的虚拟机需要实现Python中的基本功能:控制流、函数、列表、字典、类和对象、垃圾回收、加载模块。
三、用例图
从上面的需求分析可以得到如下的用例:
四、业务类图
在Python中,一切都是对象,数字、字符串、元组、列表、字典、函数、方法、类、模块等等都是对象。PyObject类是Python中所有类型的基类,整型、浮点型、列表、词典、字符串等类型都继承自它。在pyc文件中,CodeObject结构存放着程序的绝大部分信息,它是程序源代码编译之后的结果,我们用CodeObject类用来保存它的信息。
Python拥有自动内存管理机制,因此需要一个GC进行所有对象的回收。我们需要一个虚拟机的堆,所有对象的内存分配就在这个堆中进行。
程序的每一次函数调用都会有一个栈帧与之对应,因此要实现一些数据结构堆函数调用过程进行记录。这里用FrameObject实现栈帧调用。
五、数据模型
pyc文件以二进制形式读入内存,经由虚拟机分析、运行,不需要数据模型。