- 课程目录
- 课程介绍
-
在线阅读:开篇词|让我们来写一门计算机语言吧
复现技术大牛的大脑和技术,普通人也能写一门编程语言!
-
课前热身|开始学习之前我们要准备什么?
开始学习之前,我们要准备哪些基础配置和前导知识?
-
01|实现一门超简单的语言最快需要多久?
实现一门超简单的语言最快需要多久?一节课的时间,够吗?
-
02|词法分析:识别Token也可以很简单吗?
识别Token也可以很简单!
-
03|支持表达式:解析表达式和解析语句有什么不同?
解析表达式和解析语句有什么不同吗?左递归的困境又要怎么解决呢?
-
04|如何让我们的语言支持变量和类型?
一文告诉你怎么让我们的编程语言支持变量和类型!
-
05|函数实现:是时候让我们的语言支持函数和返回值了
一节课带你升级编程语言的函数功能!
-
06|怎么支持条件语句和循环语句?
一节课让你的语言支持条件语句和循环语句!
-
07|怎么设计属于我们自己的虚拟机和字节码?
一文带你着手设计自己的字节码和虚拟机!
-
08|基于TypeScript的虚拟机(一):实现一个简单的栈机
今天开始实现TypeScript版栈机的第一步!
-
09|基于TypeScript的虚拟机(二):丰富特性,支持跳转语句
今天就来丰富我们基TS的虚拟机的特性,让它支持跳转语句!
-
10|基于C语言的虚拟机(一):实现一个简单的栈机
今天让我们来实现一个基于C语言的虚拟机!
-
11|基于C语言的虚拟机(二):性能增长10倍的秘密
能让我们C语言版本的虚拟机性能增长十倍的秘密是什么呢?这篇文章告诉你!
-
12|物理机上程序运行的硬件环境是怎么样的?
物理机上程序运行的硬件环境是怎么样的呢?
-
13|物理机上程序运行的软件环境是怎么样的?
物理机上程序运行的软件环境是怎么样的?
-
14|汇编代码学习(一):熟悉CPU架构和指令集
这节课我们来熟悉CPU架构和指令集,为你学习汇编语言打下良好基础!
-
15|汇编语言学习(二):熟悉X86汇编代码
今天我们来熟悉X86汇编代码,为你学习汇编代码打下良好的基础!
-
16|生成本地代码第1关:先把基础搭好
这节课开始来讲生成本地代码的算法思路和基础功能!
-
17|生成本地代码第2关:变量存储、函数调用和栈帧维护
今天我们继续生成本地代码,支持变量存储、函数调用和栈帧维护等更丰富的特性。
-
18|生成本地代码第3关:实现完整的功能
今天我们终于为我们的语言生成完整功能的本地代码了。
-
19|怎么实现一个更好的寄存器分配算法:原理篇
这次我们从原理上分析一下怎么来优化我们的寄存器分配算法!
-
20|怎么实现一个更好的寄存器分配算法:实现篇
今天我们直接上手实现一个更好的寄存器分配算法!
-
21|加深对栈的理解:实现尾递归和尾调用优化
这节课,我们通过实现尾递归和尾调用优化来加深对栈的理解。
-
期中测试|快来检验你在起步篇的学习成果吧
快来检验你在起步篇的学习成果吧
-
“他山之石”|Sugar:这门课你可以试试这么学
来听听我们这门课的助教Sugar的学习方法论。
-
“屠龙之秘”|实现计算机语言这样的技术能用在哪里?(一)
今天我们来探讨一些计算机语言的相关技术能用在哪里。
-
22|增强编译器前端功能第1步:再识数据流分析技术
今天,我们进一步学习数据流分析技术,来增强我们编译器的前端功能。
-
23|增强编译器前端功能第2步:增强类型体系
今天,我们继续来增强编译器前端功能,增强我们语言的类型体系。
-
24|增强编译器前端功能第3步:全面的集合运算
今天我们继续来增强编译器前端功能,让它支持全面的集合运算。
-
25|增强编译器前端功能第4步:综合运用多种语义分析技术
今天继续来增强我们语言的编译器前端功能,综合应用多种语义技术。
-
26|增强更丰富的类型第1步:如何支持浮点数?
今天我们回到编译器后端的内容上来,看看怎么增强我们语言支持的类型。
-
27|增加更丰富的类型第2步:如何支持字符串?
今天我们继续增加我们语言支持的类型,让它支持字符串。
-
28|增加更丰富的类型第3步:支持数组
今天我们继续增加我们语言支持类型:数组。
-
29|面向对象编程第1步:先把基础搭好
今天我们正式进入支持面向对象编程!
-
30|面向对象编程第2步:剖析一些技术细节
今天我们暂停一下,讨论一些技术细节。
-
31|面向对象编程第3步:支持继承和多态
今天我们来实现面向对象中对最核心的功能:继承和多态
-
32|函数式编程第1关:实现高阶函数
今天让我们开始学习函数式编程!
-
33|函数式编程第2关:实现闭包特性
今天我们来实现函数式编程的另一个特性,实现闭包。
-
34|内存管理第1关:Arena技术和元数据
今天我们开始挑战实现内存管理!
-
35|内存管理第2关:实现垃圾回收
今天我们将会完成垃圾回收机制。
-
36|节点之海:怎么生成基于图的IR?
节点之海是怎么一种优化算法?
-
37 | 从AST到IR:体会数据流和控制流思维
一起体会不断lower的过程!
-
38|中端优化第1关:实现多种本地优化
今天开始进行中端优化!
-
39|中端优化第2关:全局优化要怎么搞?
看看基于我们的IR,可以怎么快速进行全局优化。
-
40|中端优化第3关:一起来挑战过程间优化
今天我们会来学习几个过程间优化的算法。
-
41|后端优化:生成LIR和指令选择
怎么生成生成LIR和指令选择?
-
42|到这里,我们的收获和未尽的工作有哪些?
感谢每一个你的坚持,专栏已接近尾声,来细数一下我们的收获和未完成的工作吧!
-
期末考试|实现编程语言这些核心知识点,你掌握得咋样了?
一起来赴一场满分之约吧!
-
结束语|等待你大展身手的那些领域
期待你运用这节课学到的知识,在更多领域大放异彩!
课程介绍
你将获得 一套实用的现代计算机语言架构 自顶向下搞懂计算机底层技术 系统级软件开发的高维思考 理解计算机语言的核心逻辑 讲师介绍 课程介绍...你将获得
- 一套实用的现代计算机语言架构
- 自顶向下搞懂计算机底层技术
- 系统级软件开发的高维思考
- 理解计算机语言的核心逻辑
讲师介绍
课程介绍
每个程序员都或多或少掌握一门甚至多门编程语言,总是在用别人写的,你有没有在平平无奇的某一天里,突发奇想自己来写一门呢?
你可能没想过。毕竟能写一门计算机语言的都是顶级大牛,他们的脑袋和技术是我等普通程序员也能复现的吗?这也太难了!而且,也没啥用,投入产出比太低了。
你可能也想过。但面对编译技术、运行时技术、还有各种计算机语言特性这几座大山,真是“拔剑四顾心茫然”,太难爬了!更别提那些永远也赶不上新兴语言迭代速度的陈旧资料了。
停一下!其实这些问题根本就不是难以跨越的。当你砍掉凌乱的枝干,抓住主线,从原理出发专注语言的实现过程,会发现实现一门语言远比你想象要简单、有用。
这次,我们请来了跟我们极客时间合作过两季的宫文学老师,他长期专注于编译技术领域,熟悉各种语言编译器的实现机制,他会给你指明一条普通程序员也能实现一门编程语言的可行路径。
更重要的是,在这个过程中,宫文学老师会手把手地带着你洞穿编译技术、运行时技术、汇编语言、硬件架构和各种算法,帮助你自顶向下理解计算机技术的底层原理,全面提升自己的技术硬实力。
我们这门课注重实践,宫文学老师会针对我们要开发的计算机语言,采取最合适的实现技术,并告诉你选择这个技术路线的原因和相关背景知识,兼顾原理与实战。
此外,我们这门课高度仿真一个真实的计算机语言开发项目,一门语言其实可以有多个具体实现,以适用不同的场景,宫老师要带你做的是TypeScript的一个全新的实现。它具有编译成原生应用的潜力,好上手,也顺应了HarmonyOS的趋势,将来你也可以拿着它做更多的尝试。
课程模块设计
课程主体划分为以下4大模块。
- 起步篇:让一门超简洁的语言跑起来。在这一模块,我们让你对编译器前端到后端、从编译到运行有一个全局式的理解,把这门语言最基本的框架搭起来。
- 进阶篇:让我们的语言更实用。这一模块,我们会逐步支持更多的数据类型,你还会学到面向对象编程特性和函数式编程特性,丰富知识面以解决更多基础技术问题。
- 优化篇:让程序的性能更高。这一模块,我们主要介绍一下优化技术,包括Java、JavaScript等语言所采用的前沿优化技术,让你洞悉它们最深处的奥秘,有能力去承担开发平台项目等攻坚性的任务。
- 展望篇:实现自主语言的征途。这一模块,我们会展望一些更高级的语言特性,比如并发、自举等,让你理解更高阶的思路和实现方法。
课程目录

适合人群
熟练掌握一门计算机语言即可

