ZPython 是一个用 Zig 语言从零开始实现的完整 Python 解释器,遵循 CPython 3.15 的语言规范和架构设计。项目采用模块化架构,参考 RustPython 的设计理念,确保代码的可维护性和可扩展性。
本项目旨在创建一个高性能、内存安全、易于理解的 Python 实现,利用 Zig 的以下特性:
- 显式内存管理:完全掌控内存分配,避免隐藏的性能开销
- 编译时计算:利用 comptime 在编译期进行优化
- 零成本抽象:性能接近 C 的同时保持代码可读性
- 模块化设计:清晰的模块边界,易于维护和扩展
- 完整实现:支持 Python 3.15 的所有语言特性
- 优秀的工具链:Zig 自带构建系统和包管理器
ZPython 采用模块化架构,参考 RustPython 的设计理念,主要包含以下模块:
源代码 → 编译器前端 → 字节码 → 虚拟机核心 → 执行
- 对象系统:PyObject 基类和类型系统
- 工具函数:字符串处理、数值转换等
- 内存管理:垃圾回收和引用计数
- 垃圾回收系统:多种 GC 算法(引用计数、标记清除、分代收集、并发收集、混合模式)
- 位置:
common/
- 词法分析器:将 Python 源代码转换为 token 流
- PEG 解析器:使用 PEG 解析 token 流生成 AST
- 代码生成器:将 AST 转换为字节码
- 符号表:变量作用域分析
- 位置:
compiler/
- 字节码执行器:执行 Python 字节码
- 对象系统:所有 Python 类型的实现
- 执行帧:函数调用和栈管理
- 内置函数:Python 内置函数实现
- 位置:
vm/
- CLI 接口:命令行参数解析
- REPL:交互式解释器
- 脚本执行:Python 文件执行
- 位置:
zpython/
- 内置模块:sys, os, math 等
- 标准函数:print, len, range 等
- 位置:
stdlib/
ZPython/
├── build.zig # Zig 构建配置
├── main.zig # 程序入口
├── main_simple.zig # 简化测试入口
├── README.md # 本文件
├── LICENSE # 许可证
├── common/ # 共享基础设施
│ ├── mod.zig # 模块入口
│ ├── types/ # 类型定义模块
│ │ ├── mod.zig # 类型模块入口
│ │ ├── object.zig # PyObject 等基础类型
│ │ └── gc_types.zig # GC 相关类型定义
│ ├── memory/ # 内存管理模块
│ │ ├── mod.zig # 内存模块入口
│ │ ├── allocator.zig # 基础内存分配器
│ │ └── refcount.zig # 引用计数实现
│ ├── gc/ # 垃圾回收算法模块
│ │ ├── mod.zig # GC 统一接口和工厂
│ │ ├── config.zig # GC 配置
│ │ ├── refcount/ # 引用计数 GC
│ │ │ └── refcount_gc.zig
│ │ ├── mark_sweep/ # 标记清除 GC
│ │ │ └── mark_sweep_gc.zig
│ │ ├── generational/ # 分代 GC
│ │ │ └── generational_gc.zig
│ │ ├── concurrent/ # 并发三色标记 GC
│ │ │ └── concurrent_gc.zig
│ │ └── hybrid/ # 混合 GC
│ │ └── hybrid_gc.zig
│ └── utils/ # 工具函数模块
│ ├── mod.zig # 工具模块入口
│ └── helpers.zig # 工具函数实现
├── compiler/ # 编译器前端
│ ├── mod.zig # 模块入口
│ ├── lexer/ # 词法分析
│ │ └── lexer.zig # 词法分析器
│ ├── parser/ # 语法分析
│ │ └── parser.zig # PEG 解析器
│ ├── ast/ # AST 生成
│ │ ├── ast.zig # AST 节点
│ │ ├── nodes.zig # 详细节点数据结构
│ │ └── visitor.zig # 访问器模式
│ ├── codegen/ # 代码生成
│ │ ├── codegen.zig # 代码生成器
│ │ ├── context.zig # 编译上下文
│ │ └── emitter.zig # 字节码发射器
│ ├── bytecode/ # 字节码
│ │ └── bytecode.zig # 字节码定义
│ └── symtable/ # 符号表
│ ├── symtable.zig # 符号表定义
│ ├── builder.zig # 符号表构建器
│ └── analyzer.zig # 符号表分析器
├── vm/ # 虚拟机核心
│ ├── mod.zig # 模块入口
│ ├── interpreter.zig # 虚拟机实现
│ ├── eval/ # 字节码执行
│ │ ├── eval.zig # 执行器
│ │ ├── instruction_protocol.zig # 指令协议
│ │ └── instruction_handlers.zig # 指令处理器
│ ├── frame/ # 执行帧
│ │ └── frame.zig # 帧管理
│ ├── objects/ # 对象系统
│ │ ├── objects.zig # 对象入口
│ │ ├── function.zig # 函数对象
│ │ └── types/ # 类型实现
│ │ ├── int.zig # 整数类型
│ │ ├── float.zig # 浮点数类型
│ │ ├── str.zig # 字符串类型
│ │ ├── list.zig # 列表类型
│ │ ├── dict.zig # 字典类型
│ │ ├── tuple.zig # 元组类型
│ │ ├── set.zig # 集合类型
│ │ ├── bool.zig # 布尔类型
│ │ ├── none.zig # None 类型
│ │ ├── range.zig # 范围类型
│ │ ├── slice.zig # 切片类型
│ │ ├── complex.zig # 复数类型
│ │ ├── bytes.zig # 字节类型
│ │ └── bytearray.zig # 字节数组类型
│ ├── builtins/ # 内置函数
│ │ └── builtins.zig # 内置函数实现
│ ├── lifecycle/ # 生命周期管理
│ │ └── lifecycle.zig # 对象生命周期
│ └── stdlib/ # 标准库
│ └── modules.zig # 模块系统
├── zpython/ # 主程序
│ ├── mod.zig # 模块入口
│ ├── main.zig # 主程序实现
│ └── cli.zig # 命令行接口
├── stdlib/ # 标准库
│ ├── mod.zig # 模块入口
│ ├── module_protocol.zig # 模块协议
│ ├── modules/ # 标准模块
│ │ ├── modules.zig # 模块系统
│ │ ├── sys.zig # sys 模块
│ │ ├── builtins.zig # builtins 模块
│ │ ├── os.zig # os 模块
│ │ └── math.zig # math 模块
├── tests/ # 测试目录
│ ├── test_low_coupling_architecture.zig # 低耦合架构测试
│ ├── test_integration.zig # 集成测试
│ ├── unit/ # 单元测试
│ ├── integration/ # 集成测试
│ ├── benchmarks/ # 性能测试
│ └── run_tests.zig # 测试运行器
├── docs/ # 文档目录
│ ├── low_coupling_architecture.md # 低耦合架构文档
│ ├── api/ # API 文档
│ └── examples/ # 示例代码
└── .github/ # GitHub 配置
├── workflows/ # CI/CD 工作流
├── dependabot.yml # 依赖更新
└── copilot-instructions.md # Copilot 指导
- Zig 0.15.0+ (推荐使用最新版本)
# macOS (Homebrew)
brew install zig
# 或从官网下载
# https://ziglang.org/download/# 克隆项目
git clone https://github.com/ViewWay/ZPython.git
cd ZPython
# 构建 debug 版本
zig build
# 构建 release 版本(优化)
zig build -Doptimize=ReleaseFast
# 构建最小体积版本
zig build -Doptimize=ReleaseSmall
# 构建安全优化版本
zig build -Doptimize=ReleaseSafe# 运行简化测试
./zig-out/bin/zpython
# 运行所有测试
zig build test
# 运行特定测试
zig build test -- --test-filter "lexer"
# 查看测试覆盖率
zig build test --summary all# 生成 API 文档
zig build docs- 模块化架构重构 - 参考 RustPython 设计
- 构建系统更新 - 支持 Zig 0.15
- 基础模块结构 - common, compiler, vm, zpython, stdlib
- 对象系统框架 - PyObject 基类和类型系统
- 内存管理框架 - 垃圾回收和引用计数
- 垃圾回收系统重构 - 多种 GC 算法模块化实现
- 引用计数 GC - CPython 风格的引用计数
- 标记清除 GC - 传统垃圾回收算法
- 分代收集 GC - Java 风格的分代垃圾回收
- 并发三色标记 GC - Go 风格的并发垃圾回收
- 混合 GC - 智能算法选择和切换
- 统一 GC 接口 - 工厂模式和多态设计
- 编译器前端框架 - 词法分析、语法分析、代码生成
- 虚拟机核心框架 - 字节码执行器、执行帧
- CI/CD 工作流 - 多平台、多架构支持
- 核心对象类型实现 - 完整的 Python 内置类型
- str 类型 - 字符串对象,支持所有字符串操作
- list 类型 - 列表对象,支持索引、切片、迭代
- dict 类型 - 字典对象,支持键值对操作
- 指令处理器扩展 - 实现更多字节码指令
- 内置函数模块 - 核心内置函数实现
- os 模块 - 完整的操作系统接口
- 文件系统操作 - getcwd, chdir, listdir, mkdir, rmdir, remove, rename
- 环境变量 - getenv, putenv, environ
- 进程管理 - system, getpid, getppid
- math 模块 - 完整的数学函数库
- 基础函数 - sqrt, pow, abs, ceil, floor, round
- 三角函数 - sin, cos, tan, asin, acos, atan
- 对数函数 - log, log10, log2, exp
- 常量 - pi, e, tau, inf, nan
- AST 实现完善 - 完整的抽象语法树
- 节点数据结构 - Module, FunctionDef, ClassDef, 表达式, 语句等
- 访问器模式 - 前序、中序、后序遍历,节点转换
- 位置信息 - lineno, col_offset, end_lineno, end_col_offset
- 符号表分析器 - 完整的作用域分析
- 作用域分析 - 模块级、函数级、类级、嵌套作用域
- 变量绑定识别 - Local, Global, Free, Cell, Parameter
- 多遍分析流程 - 构建、分析、错误检测
- 错误检测 - 未定义变量、重复参数、声明冲突
- 代码生成器核心 - 完整的编译器后端
- 编译上下文 - 字节码、常量池、名称表、变量表
- AST 到字节码转换 - 表达式、语句、控制流
- 控制流处理 - 跳转、循环、异常、with 语句
- 字节码优化器 - 常量折叠、死代码消除、窥孔优化
- 集成测试 - 完整的测试套件
- 低耦合架构验证 - 协议接口测试
- 端到端集成测试 - 核心组件协作测试
- 词法分析器完善 - 完整的 token 识别
- PEG 解析器实现 - 完整的语法分析
- 字节码执行器 - 完整的虚拟机实现
- 异常系统 - 异常处理和错误恢复
- 异常系统 - 异常处理和错误恢复
- 模块系统 - 导入机制和模块管理
- 高级特性 - 生成器、装饰器、异步支持
- 性能优化 - JIT 编译和内存优化
- 调试工具 - 调试器和性能分析器
ZPython 实现了多种垃圾回收算法,采用模块化设计,支持运行时切换:
-
引用计数 GC (Reference Counting)
- CPython 风格的引用计数
- 对象引用计数为 0 时立即释放
- 低延迟,适合实时应用
-
标记清除 GC (Mark and Sweep)
- 传统垃圾回收算法
- 两阶段:标记可达对象,清除未标记对象
- 处理循环引用
-
分代收集 GC (Generational)
- Java 风格的分代垃圾回收
- 新生代、老年代分离管理
- 提高收集效率
-
并发三色标记 GC (Concurrent Tri-color)
- Go 风格的并发垃圾回收
- 三色标记算法
- 低暂停时间
-
混合 GC (Hybrid)
- 智能算法选择和切换
- 根据内存使用情况动态调整
- 平衡性能和延迟
const common = @import("common/mod.zig");
// 创建 GC 实例
const gc_config = common.highPerformanceConfig();
const gc = try common.createGC(gc_config, allocator);
defer gc.deinit();
// 使用 GC
const obj = try gc.allocate(100);
gc.deallocate(obj);
try gc.collect();defaultConfig()- 默认配置highPerformanceConfig()- 高性能配置lowLatencyConfig()- 低延迟配置memoryOptimizedConfig()- 内存优化配置debugConfig()- 调试配置
- 清晰的模块边界:每个模块职责单一,易于理解和维护
- 避免循环依赖:单向依赖关系,降低复杂度
- 易于测试:每个模块可独立测试
- 易于扩展:新功能可以独立模块形式添加
- 多种算法支持:根据应用场景选择最适合的 GC 算法
- 统一接口:所有 GC 算法使用相同的 API
- 运行时切换:支持动态切换 GC 算法
- 低耦合设计:每个 GC 算法独立实现,互不影响
- 高性能:利用 Zig 的底层控制能力优化性能
- RustPython 架构:经过验证的模块化设计
- CPython 兼容:遵循 Python 语言规范
- Zig 最佳实践:符合 Zig 语言设计理念
- GitHub Actions:多平台 CI/CD 支持
- 自动化测试:单元测试、集成测试、性能测试
- 文档生成:自动生成 API 文档
- 代码质量:格式检查、静态分析
- 显式控制:清晰的内存管理和错误处理
- 编译时执行:comptime 功能强大
- 零开销互操作:C ABI 兼容,易于集成
- 优秀的工具链:内置构建系统、测试和文档生成
- 跨平台:原生支持交叉编译
- 遵循 CPython 规范:保证语言行为一致性
- 清晰的代码结构:易于理解和维护
- 详尽的注释:每个关键部分都有中文注释说明
- 完善的测试:保证代码质量和正确性
- 性能优先:利用 Zig 的底层控制能力优化性能
虽然 ZPython 遵循 Python 语言规范,但实现细节有所不同:
- 使用 Zig 实现,而非 C
- 显式的内存管理策略
- 模块化架构设计
- 不支持 C 扩展 API(计划通过 C ABI 支持)
- 性能特性可能与 CPython 不同
- 更好的跨平台支持
欢迎贡献代码、报告问题或提出建议!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 开启 Pull Request
- 遵循 Zig 官方代码风格 (
zig fmt) - 通过
zig build test测试 - 为新功能添加测试
- 为公共 API 添加文档注释
- 关键部分使用中文注释
本项目采用 MIT 许可证 - 详见 LICENSE 文件
本项目受以下项目启发:
- CPython - 官方 Python 实现
- RustPython - Rust 实现的 Python 解释器
- Zig - Zig 编程语言
- PyPy - 高性能 Python 实现
我们刚刚完成了 ZPython 的核心实现,实现了以下重大进展:
- 完整的对象类型:str、list、dict 类型完整实现,遵循对象协议
- 标准库模块:os 和 math 模块完整实现,提供完整的操作系统和数学函数接口
- AST 系统:完整的抽象语法树实现,包括节点数据结构和访问器模式
- 符号表分析:完整的作用域分析和变量绑定识别
- 代码生成器:完整的编译器后端,支持 AST 到字节码转换和优化
- 集成测试:完整的测试套件,验证低耦合架构和端到端功能
- 低耦合设计:所有组件通过协议接口交互
- 模块化结构:每个功能独立模块,易于维护和扩展
- 参照成熟项目:遵循 CPython 和 RustPython 的架构设计
- 完整的错误处理:统一的错误类型和异常处理机制
- 内存安全:使用 Zig 的内存安全特性
- 30 个文件被修改或创建
- 8,536 行代码新增
- 17 个新文件创建
- 所有测试通过,编译成功
我们完成了 common/ 模块的重大架构重构,实现了以下改进:
- 降低耦合度:将垃圾回收算法拆分为独立模块
- 提高可维护性:清晰的模块边界和统一的接口
- 增强可扩展性:新 GC 算法可轻松添加
- 改善测试性:每个模块可独立测试
- 模块化设计:
types/、memory/、gc/、utils/独立模块 - 统一接口:所有 GC 算法使用相同的
GCInterface - 工厂模式:通过
createGC()函数创建 GC 实例 - 配置驱动:支持多种预设配置和自定义配置
- 低耦合:GC 算法之间无相互依赖
- 高内聚:相关功能组织在一起
- 易扩展:新算法只需实现统一接口
- 易维护:清晰的代码结构和文档
注意:这是一个完整的 Python 解释器实现项目,采用现代化的模块化架构。当前已完成核心实现,包括对象系统、标准库、编译器后端等关键组件,正在进行词法分析器和解析器的完善。