手写Python虚拟机

手写Python虚拟机 / 华为编译专家揭秘 Python 底层原理

海纳 华为资深编译专家,原 Huawei JDK 团队负责人

  • 课程介绍
  1. 导学|三小时掌握C++(上)

    清除你的语言障碍,三小时教你掌握C++

  2. 导学|三小时掌握C++(中)

    面向对象设计原则与设计模式

  3. 导学|三小时掌握C++(下)

    CPython代码快速导读

  4. 01|源起:动态编程语言如何引爆虚拟机的革命?

    迈出从零开始实现Python虚拟机的第一步

  5. 02|编程语言全景图(上):编译器是如何把源代码翻译成字节码的?

    一个编程语言的编译器把源代码翻译成计算机可以理解的结构并最终执行的全过程

  6. 03|编程语言全景图(下):虚拟机是如何执行字节码的?

    实现一个简单的虚拟机,来运行生成的字节码

  7. 04|字节码文件:编译器与虚拟机的标准合约

    编译器与虚拟机的标准合约

  8. 05|分支语句:控制流让程序具备基本的运算能力

    控制流让程序具备基本的运算能力

  9. 06|循环语句:控制流让虚拟机执行复杂的运算

    实现循环语句

  10. 07|类型标识:虚拟机支持对象自检的基础设施

    类型标识:虚拟机支持对象自检的基础设施

  11. 08|函数和栈帧:深入区分函数的静态描述和动态记录

    如何区分函数的静态描述和动态记录

  12. 09|函数对象 :函数是依赖什么成为第一类公民的?

    函数对象

  13. 10|变量的作用域:哪些复杂规则是因函数而产生的?

    变量的作用域

  14. 11|函数的参数:赋予函数意义的关键特性

    函数的参数:赋予函数意义的关键特性

  15. 12|Native方法:打通底层软件与高层应用的关键

    聊聊Native方法

  16. 13|列表(上):Python语言的核心数据结构

    Python语言的核心数据结构——列表

  17. 14|列表(下):列表所支持的基本操作

    列表所支持的基本操作

  18. 15|字典(上):关联式数据结构的基本表示

    字典定义、创建和对元素的增、删、查、改等操作

  19. 16|字典(下):位置参数和闭包依赖字典实现

    这节课我们就来完善函数中与列表、字典相关的特性。

  20. 17|函数闭包:函数式编程的重要支撑

    实现函数闭包

  21. 18|类型对象:虚拟机如何识别对象的类型?

    我们准备实现完备的对象系统,从而实现面向对象编程的大部分能力

  22. 19|自定义类型:面向对象编程的基础设施

    这节课我们来实现创建自定义类型的功能。

  23. 20|创建对象:支持对象创建和访问属性以完成基本对象系统

    像函数一样调用类型对象,创建类型实例。

  24. 21|继承和多态:完善面向对象编程的两大特征

    实现方法重载和复写,以及类的继承特征

  25. 22|自动内存管理:把程序员从内存缺陷的海洋里解放出来

    自动内存管理

  26. 23|复制算法:最简单高效的垃圾回收算法

    最简单高效的垃圾回收算法——复制算法

  27. 24|标记和回收:完成对象的搬移以整理内存

    标记和回收:完成对象的搬移以整理内存

  28. 25|模块和库:构筑现代软件系统的基础材料

    这节课我们实现模块的基本功能

  29. 26|动态扩展库:Python大流行的最根本保障

    Python大流行的最根本保障——动态扩展库

  30. 27|异常(上):优雅高效地处理运行时发生的错误

    优雅高效地处理运行时发生的错误

  31. 28|异常(下):处理 finally 子句和 traceback 对象

    处理 finally 子句和 traceback 对象

  32. 29|Generator:一种无栈协程的简易实现

    实现 Generator

  33. 结束语|结束,只是新的开始

    结束,只是新的开始

  34. 结课测试|一起挑战吧!

    结课测试共20道单选题,满分为100分,系统自动评分,快来挑战吧!

课程介绍

【上新特惠,限时秒杀】 你将获得 Python 基础特性与执行模型详解 深入剖析字节码转换与执行全过程 掌握内存管理、编译优化等核心技术 各类虚拟机性能对比与最佳实践 讲师介绍 课程介绍...

【上新特惠,限时秒杀】


你将获得

  • Python 基础特性与执行模型详解
  • 深入剖析字节码转换与执行全过程
  • 掌握内存管理、编译优化等核心技术
  • 各类虚拟机性能对比与最佳实践

讲师介绍


课程介绍

由于国内芯片自主研发进程加快,各个公司开始筹建自己的编译器团队以开发特定领域的大模型,这一趋势显著增加了 AI 编译器领域对专业人才的需求。但在传统教育体系下走入社会的开发工程师大多不具备自己独立设计并优化编译器和虚拟机的能力,在遇到内存管理、性能调试等生产问题时往往不知所措。

那如何才能具备这样的能力呢?

海纳作为一名拥有多年编译器开发经验的技术专家,经过多年的探索和实践,发现动手写一个虚拟机是快速上手编译开发的最优的路线。通过手写 Python 虚拟机,你可以获得从宏观到微观多维度的编程能力。

  • 深入了解编程语言的工作原理和执行流程。
  • 掌握编译原理,特别是编译器的前端和后端工作机制。
  • 了解如何优化虚拟机的性能,包括 JIT 编译技术和内存管理策略。
  • 实现虚拟机的内存管理模块,掌握自动垃圾回收算法和内存分配策略。
  • 通过构建一个完整的虚拟机项目,体验软件工程从设计、编码到测试和维护的全过程。

在课程中,海纳会带你一步步实现一个自己的 Python 虚拟机,每一环节都会配备详尽的示例代码,并融入他在行业内积累的宝贵经验和设计决策背后的思考。

课程设计

为了让整个项目既环环相扣,又有一定的独立性,海纳按照不同的模块将课程分成了 6 个章节。

第一章 编程语言的发展历程与基本架构

这一章海纳老师会带你深入探讨虚拟机的起源与演进,了解它的核心优势,学习编译器是如何将源代码转化为字节码的,你还可以通过实例看到虚拟机的执行过程,包括字节码序列化、解释执行及 JIT 编译技术。这些都是 Python 虚拟机相关的背景知识,是后面具体实操的理论基础。

第二章 控制流

学完这一章的内容,你会了解到 Python 字节码指令集、字节码文件的格式、虚拟机如何对字节码文件进行加载等内容。然后就可以实现最基本的控制流了,例如分支结构、循环结构。也就是说,虚拟机已经具备了基本的计算能力。

第三章 函数的实现机制

函数作为 Python 语言的第一类公民,可以做为参数传递给其他函数,也可以做为返回值被传出函数之外。这是函数式编程最基本的特性,但要实现函数式编程,还需要理解自由变量、闭包等特性,所以这一章你会全面了解语言虚拟机是如何实现这些高级特性的。

第四章 对象系统和语言内建对象

面向对象编程的三大特征是封装、继承和多态。在这一章中,你会看到虚拟机是如何实现通过类型创建对象,以及如何表达类型之间的继承关系这些基本内容的,然后进一步掌握运行时识别、函数覆写、操作符重载等面向对象编程中的高级主题。

第五章 内存管理与垃圾回收

这一章你会学到 Python 对象的内存分配策略,包括静态分配与动态分配的原理与实现。同时也对垃圾回收算法(如引用计数、标记清除、分代回收)的选择与实现有初步的了解。垃圾回收算法是一个独立且庞大的体系,而这一章将成为你学习垃圾回收算法的第一课,带你轻松走进内存管理知识殿堂。

第六章 异常、迭代、模块系统

异常、迭代、模块系统等高级主题相对独立,但同时也有一些依赖关系。在前五章的基础上,你完全有能力自己设计并实现这些主题。所以这一部分的内容相对简略,以说明架构设计为主,你可以根据课程中给出的架构设计,自己动手实现这些高级特性。


课程目录


适合人群

本课程面向有一定的 Python 编程背景,特别是那些对编译器设计、操作系统和计算机架构有基本了解的工程师。


订阅须知