用C#解释Python字节码(具有精细控制)

2024-09-29 18:33:02 发布

您现在位置:Python中文网/ 问答频道 /正文

对于我的一个项目想法,我有以下需求,这非常准确:

我希望能够在每个字节码指令的基础上执行Python代码(如有必要,可在手前预编译)。我还需要访问Python VM内部的内容(框架堆栈、数据堆栈等)。理想情况下,我还希望删除许多Python内置功能,并以自己的方式重新实现其中的一些功能(如文件编写)

所有这些都必须用C#编码(我使用Unity)。

我可以放弃Python的一些实际特性,特别是关于导入等复杂的东西。但是,我希望大部分特性保持不变

我稍微研究了一下IronPython的代码,但它对我来说仍然非常模糊,而且看起来也非常庞大。我开始翻译Byterun(一个用Python编写的Python字节码解释器),但我面临很多困难,因为Byterun利用了Python的许多特性来。。。解释Python

今天,我不要求预先制定一个解决方案(除非你有一个想法?),而是要求一些建议、可以看的地方等等。你对我应该首先研究的东西有什么想法吗


Tags: 数据项目代码功能框架内容字节堆栈
1条回答
网友
1楼 · 发布于 2024-09-29 18:33:02

在遥远的过去,我曾尝试过自己实现Python虚拟机,学到了很多东西,但从未接近完全可以工作的实现。我使用C实现作为起点,特别是https://github.com/python/cpython/tree/main/Objectshttps://github.com/python/cpython/blob/main/Python/ceval.c(查找switch(opcode)

以下是一些要点:

掌握Python对象模型。使用实例化、属性访问、索引和切片、调用、比较、算术操作和表示所需的方法实现抽象PyObject类。为None、boolean、int、float、string、tuple、list和dictionary提供具体的实现

实现VM的核心:一个帧对象,它在操作码上循环,并使用一个巨大的switch语句(在这里的C实现之后)将其分派给PyObject的相应方法。框架应该为操作码的操作人员维护一个PyObjects堆栈。根据操作码的不同,参数从堆栈中弹出并推送到堆栈上。dict可用于存储和检索局部变量。使用Frame对象为函数对象创建PyObject

熟悉名称空间的概念以及Python构建名称空间概念的方式。使用dict将(属性)名称映射到对象,实现模块、类和实例对象

最后,根据需要添加尽可能多的内置函数,以获得有用的实现

我认为你很容易低估自己的工作量,但是。。。玩得开心

相关问题 更多 >

    热门问题