资源简介
由于国内芯片自主研发进程加快,各个公司开始筹建自己的编译器团队以开发特定领域的大模型,这一趋势显著增加了 AI 编译器领域对专业人才的需求。但在传统教育体系下走入社会的开发工程师大多不具备自己独立设计并优化编译器和虚拟机的能力,在遇到内存管理、性能调试等生产问题时往往不知所措。
那如何才能具备这样的能力呢?
海纳作为一名拥有多年编译器开发经验的技术专家,经过多年的探索和实践,发现动手写一个虚拟机是快速上手编译开发的最优的路线。通过手写 Python 虚拟机,你可以获得从宏观到微观多维度的编程能力。
- 深入了解编程语言的工作原理和执行流程。
- 掌握编译原理,特别是编译器的前端和后端工作机制。
- 了解如何优化虚拟机的性能,包括 JIT 编译技术和内存管理策略。
- 实现虚拟机的内存管理模块,掌握自动垃圾回收算法和内存分配策略。
- 通过构建一个完整的虚拟机项目,体验软件工程从设计、编码到测试和维护的全过程。
在课程中,海纳会带你一步步实现一个自己的 Python 虚拟机,每一环节都会配备详尽的示例代码,并融入他在行业内积累的宝贵经验和设计决策背后的思考。
课程设计
为了让整个项目既环环相扣,又有一定的独立性,海纳按照不同的模块将课程分成了 6 个章节。
第一章 编程语言的发展历程与基本架构
这一章海纳老师会带你深入探讨虚拟机的起源与演进,了解它的核心优势,学习编译器是如何将源代码转化为字节码的,你还可以通过实例看到虚拟机的执行过程,包括字节码序列化、解释执行及 JIT 编译技术。这些都是 Python 虚拟机相关的背景知识,是后面具体实操的理论基础。
第二章 控制流
学完这一章的内容,你会了解到 Python 字节码指令集、字节码文件的格式、虚拟机如何对字节码文件进行加载等内容。然后就可以实现最基本的控制流了,例如分支结构、循环结构。也就是说,虚拟机已经具备了基本的计算能力。
第三章 函数的实现机制
函数作为 Python 语言的第一类公民,可以做为参数传递给其他函数,也可以做为返回值被传出函数之外。这是函数式编程最基本的特性,但要实现函数式编程,还需要理解自由变量、闭包等特性,所以这一章你会全面了解语言虚拟机是如何实现这些高级特性的。
第四章 对象系统和语言内建对象
面向对象编程的三大特征是封装、继承和多态。在这一章中,你会看到虚拟机是如何实现通过类型创建对象,以及如何表达类型之间的继承关系这些基本内容的,然后进一步掌握运行时识别、函数覆写、操作符重载等面向对象编程中的高级主题。
第五章 内存管理与垃圾回收
这一章你会学到 Python 对象的内存分配策略,包括静态分配与动态分配的原理与实现。同时也对垃圾回收算法(如引用计数、标记清除、分代回收)的选择与实现有初步的了解。垃圾回收算法是一个独立且庞大的体系,而这一章将成为你学习垃圾回收算法的第一课,带你轻松走进内存管理知识殿堂。
第六章 异常、迭代、模块系统
异常、迭代、模块系统等高级主题相对独立,但同时也有一些依赖关系。在前五章的基础上,你完全有能力自己设计并实现这些主题。所以这一部分的内容相对简略,以说明架构设计为主,你可以根据课程中给出的架构设计,自己动手实现这些高级特性
资源目录
——/天下无鱼17号盘-90T/计算机教程SDJDS/02-极客时间/第四部分/329-100761401-专栏课-海纳-手写 Python 虚拟机(完结) ├─01|源起:动态编程语言如何引爆虚拟机的革命?.md 11.72KB ├─01|源起:动态编程语言如何引爆虚拟机的革命?.mp3 11.44MB ├─01|源起:动态编程语言如何引爆虚拟机的革命?.pdf 2.26MB ├─02|编程语言全景图(上):编译器是如何把源代码翻译成字节码的?.md 19.62KB ├─02|编程语言全景图(上):编译器是如何把源代码翻译成字节码的?.mp3 12.58MB ├─02|编程语言全景图(上):编译器是如何把源代码翻译成字节码的?.pdf 2.07MB ├─03|编程语言全景图(下):虚拟机是如何执行字节码的?.md 19.28KB ├─03|编程语言全景图(下):虚拟机是如何执行字节码的?.mp3 13.51MB ├─03|编程语言全景图(下):虚拟机是如何执行字节码的?.pdf 1.98MB ├─04|字节码文件:编译器与虚拟机的标准合约.md 20.54KB ├─04|字节码文件:编译器与虚拟机的标准合约.mp3 13.92MB ├─04|字节码文件:编译器与虚拟机的标准合约.pdf 2.46MB ├─05|分支语句:控制流让程序具备基本的运算能力.md 14.57KB ├─05|分支语句:控制流让程序具备基本的运算能力.mp3 9.39MB ├─05|分支语句:控制流让程序具备基本的运算能力.pdf 1.43MB ├─06|循环语句:控制流让虚拟机执行复杂的运算.md 18.49KB ├─06|循环语句:控制流让虚拟机执行复杂的运算.mp3 9.49MB ├─06|循环语句:控制流让虚拟机执行复杂的运算.pdf 2.47MB ├─07|类型标识:虚拟机支持对象自检的基础设施.md 15.1KB ├─07|类型标识:虚拟机支持对象自检的基础设施.mp3 7.98MB ├─07|类型标识:虚拟机支持对象自检的基础设施.pdf 1.68MB ├─08|函数和栈帧:深入区分函数的静态描述和动态记录.md 11.48KB ├─08|函数和栈帧:深入区分函数的静态描述和动态记录.mp3 9.87MB ├─08|函数和栈帧:深入区分函数的静态描述和动态记录.pdf 1.8MB ├─09|函数对象:函数是依赖什么成为第一类公民的?.md 21.52KB ├─09|函数对象:函数是依赖什么成为第一类公民的?.mp3 10.33MB ├─09|函数对象:函数是依赖什么成为第一类公民的?.pdf 2.47MB ├─10|变量的作用域:哪些复杂规则是因函数而产生的?.md 17.15KB ├─10|变量的作用域:哪些复杂规则是因函数而产生的?.mp3 10.7MB ├─10|变量的作用域:哪些复杂规则是因函数而产生的?.pdf 856.46KB ├─11|函数的参数:赋予函数意义的关键特性.md 19.02KB ├─11|函数的参数:赋予函数意义的关键特性.mp3 8.29MB ├─11|函数的参数:赋予函数意义的关键特性.pdf 2.18MB ├─12|Native方法:打通底层软件与高层应用的关键.md 22.47KB ├─12|Native方法:打通底层软件与高层应用的关键.mp3 14.22MB ├─12|Native方法:打通底层软件与高层应用的关键.pdf 1.56MB ├─13|列表(上):Python语言的核心数据结构.md 26.6KB ├─13|列表(上):Python语言的核心数据结构.mp3 16.6MB ├─13|列表(上):Python语言的核心数据结构.pdf 2.46MB ├─14|列表(下):列表所支持的基本操作.md 25.84KB ├─14|列表(下):列表所支持的基本操作.mp3 11.53MB ├─14|列表(下):列表所支持的基本操作.pdf 1.92MB ├─15|字典(上):关联式数据结构的基本表示.md 23.9KB ├─15|字典(上):关联式数据结构的基本表示.mp3 14.88MB ├─15|字典(上):关联式数据结构的基本表示.pdf 1.82MB ├─16|字典(下):位置参数和闭包依赖字典实现.md 18.79KB ├─16|字典(下):位置参数和闭包依赖字典实现.mp3 12.74MB ├─16|字典(下):位置参数和闭包依赖字典实现.pdf 1.68MB ├─17|函数闭包:函数式编程的重要支撑.md 20.65KB ├─17|函数闭包:函数式编程的重要支撑.mp3 13.69MB ├─17|函数闭包:函数式编程的重要支撑.pdf 2.25MB ├─18|类型对象:虚拟机如何识别对象的类型?.md 19.68KB ├─18|类型对象:虚拟机如何识别对象的类型?.mp3 12.98MB ├─18|类型对象:虚拟机如何识别对象的类型?.pdf 2.75MB ├─19|自定义类型:面向对象编程的基础设施.md 19.16KB ├─19|自定义类型:面向对象编程的基础设施.mp3 13.48MB ├─19|自定义类型:面向对象编程的基础设施.pdf 756.46KB ├─20|创建对象:支持对象创建和访问属性以完成基本对象系统.md 20.1KB ├─20|创建对象:支持对象创建和访问属性以完成基本对象系统.mp3 12.68MB ├─20|创建对象:支持对象创建和访问属性以完成基本对象系统.pdf 1.55MB ├─21|继承和多态:完善面向对象编程的两大特征.md 25.18KB ├─21|继承和多态:完善面向对象编程的两大特征.mp3 14.83MB ├─21|继承和多态:完善面向对象编程的两大特征.pdf 1.9MB ├─22|自动内存管理:把程序员从内存缺陷的海洋里解放出来.md 16.41KB ├─22|自动内存管理:把程序员从内存缺陷的海洋里解放出来.mp3 14.19MB ├─22|自动内存管理:把程序员从内存缺陷的海洋里解放出来.pdf 2.27MB ├─23|复制算法:最简单高效的垃圾回收算法.md 22.53KB ├─23|复制算法:最简单高效的垃圾回收算法.mp3 15.24MB ├─23|复制算法:最简单高效的垃圾回收算法.pdf 1.46MB ├─24|标记和回收:完成对象的搬移以整理内存.md 27.29KB ├─24|标记和回收:完成对象的搬移以整理内存.mp3 15.73MB ├─24|标记和回收:完成对象的搬移以整理内存.pdf 2.72MB ├─25|模块和库:构筑现代软件系统的基础材料.md 17.63KB ├─25|模块和库:构筑现代软件系统的基础材料.mp3 10.84MB ├─25|模块和库:构筑现代软件系统的基础材料.pdf 1.29MB ├─26|动态扩展库:Python大流行的最根本保障.md 18.45KB ├─26|动态扩展库:Python大流行的最根本保障.mp3 13.09MB ├─26|动态扩展库:Python大流行的最根本保障.pdf 1.67MB ├─27|异常(上):优雅高效地处理运行时发生的错误.md 25.9KB ├─27|异常(上):优雅高效地处理运行时发生的错误.mp3 14.29MB ├─27|异常(上):优雅高效地处理运行时发生的错误.pdf 2.09MB ├─28|异常(下):处理finally子句和traceback对象.md 14.2KB ├─28|异常(下):处理finally子句和traceback对象.mp3 8.09MB ├─28|异常(下):处理finally子句和traceback对象.pdf 1.19MB ├─29|Generator:一种无栈协程的简易实现.md 20KB ├─29|Generator:一种无栈协程的简易实现.mp3 11.79MB ├─29|Generator:一种无栈协程的简易实现.pdf 1.34MB ├─images │ ├─771605 │ │ ├─324197e998ee7d274439d6ae1318aaa7.pdf 355.76KB │ │ ├─324197e998ee7d274439d6ae1318aaa7.png 158.14KB │ │ ├─b1a535116f3a5dc5c78eb53df5b27622.pdf 162.1KB │ │ ├─b1a535116f3a5dc5c78eb53df5b27622.png 272.37KB │ │ ├─fe1273d83c2e5e245700fa19324d18d4.pdf 278.26KB │ │ └─fe1273d83c2e5e245700fa19324d18d4.png 208.96KB │ ├─771660 │ │ ├─01f33b8729bb289658b79af49ca257dc.pdf 206.82KB │ │ ├─01f33b8729bb289658b79af49ca257dc.png 153.81KB │ │ ├─1ea8133850ebb83f94bf8bcf0877633c.pdf 69.75KB │ │ ├─1ea8133850ebb83f94bf8bcf0877633c.png 80.32KB │ │ ├─5ea648a5d7cd6fc5eca7640d57897c83.pdf 103.22KB │ │ ├─5ea648a5d7cd6fc5eca7640d57897c83.png 117.39KB │ │ ├─ccfa870a1eb9a2bdd1c9ed5d0cf222d2.pdf 117.64KB │ │ └─ccfa870a1eb9a2bdd1c9ed5d0cf222d2.png 107.17KB │ ├─771898 │ │ ├─2c9600efe3e6fc7yy2877441afa26fbf.pdf 287.64KB │ │ └─2c9600efe3e6fc7yy2877441afa26fbf.png 497.75KB │ ├─771985 │ ├─772694 │ │ ├─ba9ee25d195e399f277b56905c3bc315.jpg 476.18KB │ │ └─ba9ee25d195e399f277b56905c3bc315.pdf 482.72KB │ ├─772703 │ ├─774403 │ │ ├─324197e998ee7d274439d6ae1318aaa7.pdf 355.76KB │ │ └─324197e998ee7d274439d6ae1318aaa7.png 158.14KB │ ├─774409 │ │ ├─17086a688yy18a3258faecc89db002d0.pdf 85.88KB │ │ └─17086a688yy18a3258faecc89db002d0.png 52.36KB │ ├─774417 │ │ ├─2e8c128c99291f57f5c0fd4548af2e01.pdf 170.38KB │ │ ├─2e8c128c99291f57f5c0fd4548af2e01.png 82.02KB │ │ ├─69f17b130becf91dce6e08aed25ba1f3.pdf 97.57KB │ │ ├─69f17b130becf91dce6e08aed25ba1f3.png 43.02KB │ │ ├─6b9286d031e12943d11557dc55d8cc46.pdf 222.14KB │ │ └─6b9286d031e12943d11557dc55d8cc46.png 86.32KB │ ├─775514 │ ├─776949 │ │ ├─10c4f4fyyd82dc55747a841e0945477b.pdf 159.22KB │ │ ├─10c4f4fyyd82dc55747a841e0945477b.png 80.07KB │ │ ├─83d893e0ba9a7271b2eb4609c5315189.pdf 94.16KB │ │ └─83d893e0ba9a7271b2eb4609c5315189.png 68.05KB │ ├─776954 │ ├─776961 │ │ ├─7fcd114022ff43149a4c34d2185fa4be.pdf 90.88KB │ │ ├─7fcd114022ff43149a4c34d2185fa4be.png 52.37KB │ │ ├─ff5646ce3251214273a64yye20361e7c.pdf 86.28KB │ │ └─ff5646ce3251214273a64yye20361e7c.png 52.83KB │ ├─777628 │ ├─778919 │ │ ├─6bea886237c2427e3e155305fece5211.pdf 74.92KB │ │ └─6bea886237c2427e3e155305fece5211.png 56.11KB │ ├─780132 │ ├─780140 │ ├─781338 │ ├─781345 │ │ ├─761564yy460a1108a69f0e834e456ec9.pdf 85.75KB │ │ ├─761564yy460a1108a69f0e834e456ec9.png 54.28KB │ │ ├─f6a22bd87f95c4fce6386e224ff8c69d.pdf 83.8KB │ │ └─f6a22bd87f95c4fce6386e224ff8c69d.png 60.36KB │ ├─781683 │ ├─782323 │ │ ├─8520460d637193f95937c5cfd75d9801.pdf 155.94KB │ │ ├─8520460d637193f95937c5cfd75d9801.png 77.31KB │ │ ├─a7d63b04a4beb86a14b77aa837f6128e.pdf 77.06KB │ │ ├─a7d63b04a4beb86a14b77aa837f6128e.png 43.72KB │ │ ├─af38a3eca9e81dc0f3b04c4d5ed993a5.pdf 160.21KB │ │ └─af38a3eca9e81dc0f3b04c4d5ed993a5.png 74.73KB │ ├─782484 │ │ ├─121cc1df376149eabf50d058f9105218.pdf 161.59KB │ │ ├─121cc1df376149eabf50d058f9105218.png 66.71KB │ │ ├─2e73e7d63d7f4bde3738518b2d56e4e6.pdf 164.29KB │ │ ├─2e73e7d63d7f4bde3738518b2d56e4e6.png 76.19KB │ │ ├─c250324e2b6f9befd6847fe9b2b12533.pdf 96.71KB │ │ ├─c250324e2b6f9befd6847fe9b2b12533.png 57.23KB │ │ ├─c4a19f1af604d2a6yy15d90a24ba4191.pdf 132.91KB │ │ └─c4a19f1af604d2a6yy15d90a24ba4191.png 66.94KB │ ├─782495 │ │ ├─0f201de8c81bdac36bba48dd618a5984.pdf 119.33KB │ │ └─0f201de8c81bdac36bba48dd618a5984.png 72.18KB │ ├─782504 │ │ ├─737d8d43111c257720ea89875586692b.pdf 322.32KB │ │ └─737d8d43111c257720ea89875586692b.png 252.11KB │ ├─785249 │ │ ├─773e3b48529868b77b2269bbaca59291.pdf 182.9KB │ │ └─773e3b48529868b77b2269bbaca59291.png 161.56KB │ ├─785277 │ │ ├─66210ef222d0e86a96ece837530cc2df.pdf 72.64KB │ │ ├─66210ef222d0e86a96ece837530cc2df.png 24.48KB │ │ ├─734ce05ed2df3f9f195cf1fd5a77dbfd.pdf 62.93KB │ │ ├─734ce05ed2df3f9f195cf1fd5a77dbfd.png 27.89KB │ │ ├─86642eb21b73b6309eac43ca2d6b9d7d.pdf 154.74KB │ │ ├─86642eb21b73b6309eac43ca2d6b9d7d.png 70.18KB │ │ ├─f6aa26dd4fde6e3fbaf8b09cda6e3957.pdf 100KB │ │ └─f6aa26dd4fde6e3fbaf8b09cda6e3957.png 54.75KB │ ├─785300 │ │ ├─08f45b58ffdf10a6b7e401b9ff04a264.pdf 92.66KB │ │ ├─08f45b58ffdf10a6b7e401b9ff04a264.png 42.43KB │ │ ├─238e24270dd4f9f4f3d530fba0eaaa81.pdf 46.22KB │ │ ├─238e24270dd4f9f4f3d530fba0eaaa81.png 25.39KB │ │ ├─3yy8db514685a2e7eb0c305cd39ab417.pdf 79.54KB │ │ ├─3yy8db514685a2e7eb0c305cd39ab417.png 40.97KB │ │ ├─b8ba5bcf5c574b6e785f066996256b67.pdf 48.09KB │ │ ├─b8ba5bcf5c574b6e785f066996256b67.png 31.37KB │ │ ├─de0b7b47230e641dyy08c66ebed34fdf.pdf 120.94KB │ │ └─de0b7b47230e641dyy08c66ebed34fdf.png 50.79KB │ ├─788719 │ │ ├─21592b07e25ebf61c429b7a969a273e8.pdf 103.67KB │ │ ├─21592b07e25ebf61c429b7a969a273e8.png 42.04KB │ │ ├─84e537f2afd291719daea44f11f8dfd2.pdf 86.64KB │ │ └─84e537f2afd291719daea44f11f8dfd2.png 38.86KB │ ├─788992 │ ├─790215 │ ├─790838 │ ├─791160 │ ├─792430 │ ├─792446 │ │ ├─1dc4a1b119cc53163b952dab048f5b7b.jpg 264.75KB │ │ └─1dc4a1b119cc53163b952dab048f5b7b.pdf 271.29KB │ └─792447 │ ├─28d1be62669b4f3cc01c36466bf811a4.pdf 30.08KB │ └─28d1be62669b4f3cc01c36466bf811a4.png 5.7KB ├─list.txt -1.#INDB ├─videos │ ├─02|编程语言全景图(上):编译器是如何把源代码翻译成字节码的? │ │ └─2cf450a8-18f79f4b206-0000-0000-01d-dbacd.mp4 12.65MB │ ├─04|字节码文件:编译器与虚拟机的标准合约 │ │ └─344c7866-18f93ee3d18-0000-0000-01d-dbacd.mp4 78.37MB │ ├─导学|三小时掌握C++(上) │ │ └─1613bf3a-18f84671e25-0000-0000-01d-dbacd.mp4 240.4MB │ ├─导学|三小时掌握C++(下) │ │ └─6285b576-18fed3848dc-0000-0000-01d-dbacd.mp4 679.51MB │ └─导学|三小时掌握C++(中) │ └─424d64a-18fa95e4a7d-0000-0000-01d-dbacd.mp4 1.84GB ├─导学|三小时掌握C++(上).md 624B ├─导学|三小时掌握C++(上).pdf 1.78MB ├─导学|三小时掌握C++(下).md 218B ├─导学|三小时掌握C++(下).pdf 1.8MB ├─导学|三小时掌握C++(中).md 239B ├─导学|三小时掌握C++(中).pdf 1.69MB ├─开篇词|从0开始,打造一个属于自己的Python引擎.md 10.5KB ├─开篇词|从0开始,打造一个属于自己的Python引擎.mp3 9.22MB ├─开篇词|从0开始,打造一个属于自己的Python引擎.pdf 2.21MB ├─结束语|结束,只是新的开始.md 6.09KB ├─结束语|结束,只是新的开始.mp3 5.55MB ├─结束语|结束,只是新的开始.pdf 1.02MB ├─结课测试|一起挑战吧!.md 415B └─结课测试|一起挑战吧!.pdf 347.74KB
学习
感谢分享