我用 C++ 写了一个轻量级 Python 虚拟机,刚刚开源

大家好,分享一个我最近正式开源的项目: S.A.A.U.S.O

这是我的本科毕业设计,也是我大学期间投入精力最多的个人项目之一。它是一个使用 C++20 实现的 Python 虚拟机 ,目标是兼容 CPython 3.12 字节码、支持 Python 语言的核心功能子集

项目源码现已开源到 GitHub,链接:github.com/WU-SUNFLOWE... (请顺手帮我点一个⭐star~)

这篇文章中我会先做一个整体介绍。后面会将毕设论文的正文内容逐步整理后,分篇发到掘金上。

0x00 什么是 Python 虚拟机?

Python 是一种基于虚拟机(virtual machine,VM)技术的高级编程语言。

在 Python 程序运行的过程中,编译器前端会将 Python 源代码翻译为字节码(bytecode)。

接下来,Python 虚拟机(Python VM,PVM)作为后端,逐条解释执行字节码指令,并负责对象管理、垃圾回收和运行时支撑。

0x01 这个项目是做什么的?

S.A.A.U.S.O 是一个面向学习、研究和嵌入式场景的 Python 虚拟机实现。

我希望它不仅能作为毕业设计完成答辩,也能成为一个结构清晰、便于阅读和改造的工程项目。也就是说,除了"能跑",我还比较关注它的系统性和可维护性。

0x02 目前项目里已经有什么?

当前在毕业设计开发阶段,S.A.A.U.S.O 已经完成的核心能力大致包括:

  • 基础对象系统: PyObject / Klass / VTable
  • 若干内建类型: int / float / str / list / tuple / dict / bool / None
  • 句柄系统: HandleScope 与长期句柄
  • 虚拟机堆与 GC:已具备新生代回收能力
  • 字节码解释器:基于 CPython 3.12 字节码模型
  • 异常处理:包含异常对象体系与解释器侧 unwind 主路径
  • 模块系统:支持基本 import
  • 最小可用 Embedder API:支持宿主程序嵌入、编译与执行脚本、注入原生能力

S.A.A.U.S.O 的整体架构图如下:

现阶段整个项目当中,仅就 VM 内核而言,共有大约 3.2 万行 C++ 核心源码。

这意味着,S.A.A.U.S.O 并不是一个简单的玩具 VM 项目,而是一个尽量朝着真实运行时系统方向去做的工程。

0x03 为什么要做这个项目?

最初的动机主要有两个:

  • 想系统地理解类似于 Python、JavaScript 这些高级编程语言是如何工作的
  • 想在本科阶段完成一个具备一定系统复杂度,并且能够长期维护和持续演进的项目

我一直觉得,在学习 CS 的过程中,很多东西只有"自己动手做一遍",对其的理解才会真正成熟

通过完成这个项目,我发现 Python 语言中很多看上去只是"一行代码"或者"一个语义细节"的东西,背后其实牵动的是整条虚拟机系统的链路。

0x04 这个项目有什么难点?

如果只看表面,很容易觉得Python 虚拟机就是逐条解释执行字节码

但真正做起来,难点往往不在某一个功能点,而在于以下的具体工程问题:

  • 对象分配和初始化顺序
  • GC 安全问题
  • 异常状态抛出、传递、捕获与栈展开
  • 运行时状态管理
  • 各个子系统自身的高内聚,子系统之间的低耦合
  • 测试、调试和回归验证

也是因为这些问题,我对如何设计与实现中大型 C++ 工程这个问题更具体的认识。

很多时候,真正花时间的不是"把功能写出来",而是:

  • 按照单一职责、依赖倒置等原则,将模块拆清楚、将模块之间的关系捋清楚。
  • 保证各个模块具备良好的稳定性,与一定的可拓展性。

0x05 这个项目适合谁看?

如果你对下面这些话题感兴趣,欢迎来进一步了解 S.A.A.U.S.O:

  • Python/JavaScript 等高级语言的虚拟机/解释器实现
  • Python 运行时机制
  • 中大型 C++ 系统
  • 嵌入式脚本引擎
  • 编程语言实现相关的个人项目

0x06 后续我会进一步分享什么?

我已经在我的毕业论文中详细探讨了 S.A.A.U.S.O 内部的一些核心设计思路、技术路线与工程实现。后续我会视情况进一步将它们进行整理,并分享出来。

包括但不限于:

  • VM 统一运行时上下文容器(Isolate)
  • 对象系统与核心行为分派
  • 虚拟机堆与 GC 机制
  • 对象句柄
  • 字节码解释器
  • 异常处理机制

0x07 小结

S.A.A.U.S.O 的项目链接我已经放在文章开头了。欢迎 star、issue、讨论,也欢迎直接在掘金的评论区交流想法。

这是我本科阶段最重要的项目之一。现在把它正式开源出来,也算是给这一段旅程画上一个句号。

如果你也在开发编程语言、虚拟机、运行时系统等个人作品,希望这个项目能给你一点参考~

相关推荐
Bruce_kaizy26 分钟前
c++ linux环境编程——文件io介绍以及open 、write 、read 三剑客深度详解
linux·服务器·c++·ubuntu·操作系统·文件io
冬奇Lab1 小时前
一天一个开源项目(第113篇):notebooklm-py - 把 Google NotebookLM 变成可编程 API,还能接入 Claude Code
人工智能·google·开源
字节跳动开源1 小时前
veRL 推出开源 Uni-Agent:为通用 Agent 训练打造统一框架
开源
字节跳动开源2 小时前
Viking AI 搜索 CLI 正式发布:会说话,就能做搜索推荐
数据库·人工智能·开源
玖釉-2 小时前
下一个排列:从字典序到原地算法的完整推导
数据结构·c++·windows·算法
少年、潜行3 小时前
【开源】基于STM32的无线姿态检测仪设计
stm32·嵌入式硬件·开源·姿态检测仪
枕星而眠3 小时前
数据结构八大排序详解(一):四大简单排序
c语言·数据结构·c++·后端
努力努力再努力wz3 小时前
【Qt入门系列】:按钮组件全解析:从 QAbstractButton 到快捷键事件、单选与复选机制
c语言·开发语言·数据结构·c++·git·qt·github
财经资讯数据_灵砚智能4 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年5月26日
大数据·人工智能·python·信息可视化·自然语言处理·ai编程·灵砚智能