Building a Virtual Machine for Programming Language

Building a Virtual Machine for Programming Language

低级解释器的要点。

你将会学到的

  • 虚拟机实现
  • 基于堆栈与基于寄存器的 VM
  • 字节码解释器
  • 编译器构建
  • 调用堆栈和堆栈帧
  • 低级解释
  • 面向对象编程
  • 函数式编程
  • 闭包实现
  • 垃圾收集
  • 标记扫描GC
  • 了解编程语言如何在幕后工作
  • 字节码优化

要求

  • 基础 C++
  • 基本数据结构(地图、列表、堆栈、树)
  • “从头开始构建口译员”课程(如果需要)

说明

课程大纲

编程语言如何在幕后工作?编译器解释器有什么区别?什么是虚拟机JIT 编译器那么函数式编程和命令式编程之间的区别呢?

在实现编程语言时有很多问题!

学校里“编译器课程”的问题是,这些课程通常被呈现为一些“硬核火箭科学”,只针对高级工程师。

此外,经典的编译器书籍从最不重要的主题开始,例如词法分析,一直到形式语法的理论方面。而在实现第一个 Tokenizer 模块时,学生们只是对该主题失去了兴趣,没有机会真正开始实现编程语言本身。所有这一切都蔓延到整个学期都在搞乱标记器和 BNF 语法,而没有了解编程语言的实际语义

我相信我们应该能够在 4 到6 小时内构建和理解完整的端到端编程语言语义——内容直截了当,在实时编码会话中显示为结对编程,并在可理解的方式。

构建虚拟机课程中,我们特别关注运行时语义,并为非常类似于 JavaScript 或 Python 的编程语言构建基于堆栈的 VM 。与字节码级别密切合作,您将了解当今生产 VM 中较低级别的解释是如何工作的。

实现一种编程语言也会让你在其他编程语言中的实践水平更加专业。

先决条件

这门课有两个先决条件。

构建虚拟机课程是上一课的自然扩展——从头开始构建解释器(又名解释基础),我们在其中还构建了完整的编程语言,但在更高的 AST 级别。除非您已经了解编程语言在这个级别是如何工作的,即 eval、闭包作用域链环境和其他构造是什么——您必须将解释器类作为先决条件。

此外,要进入生产 VM 所在的较低(字节码)级别,我们需要具备基本的 C++ 经验。然而,这个类不是关于 C++ 的,所以我们只使用非常基本的(并且可转移的)到其他语言的结构。

观看介绍视频了解详情。

这门课是为谁准备的?

本课程适用于任何好奇的工程师,他们希望获得构建复杂系统的技能(构建编程语言是一项高级工程任务!),并获得构建此类系统的可转移知识。

如果你对编译器、字节码解释器、虚拟机和源代码转换特别感兴趣,那么这门课也适合你。

什么用于实施?

由于较低级别的 VM 与性能有关,因此它们通常用 C 或 C++ 等低级语言实现。这正是我们使用的,但主要是 C++ 的基本功能,不会分散 C++ 细节的注意力。代码应该很容易转换和移植到任何其他语言,例如 Rust 甚至更高级别的语言,如 JavaScript——利用类型化数组来模仿内存概念。使用 C++ 还可以更轻松地实现进一步的 JIT 编译器。

注意:我们希望我们的学生自己真正遵循、理解和实施虚拟机的每一个细节,而不是仅仅从最终解决方案中复制粘贴。尽管视频讲座中提供了该语言的完整源代码,但该项目的代码库包含/* 在此处实现 */作业,学生必须解决这些作业。

这门课有什么特别的?

这些讲座的主要特点是:

  • 简明扼要。每个讲座都是自给自足的,简洁的,并描述与主题直接相关的信息,而不是分散在不相关的材料或谈话上。
  • 动画演示实时编辑笔记相结合。这使得对主题的理解更容易,并显示对象结构是如何连接的。静态幻灯片根本不适用于复杂的内容。
  • 带作业的端到端实时编码会话。完整的源代码,从头开始,直到最后都在视频讲座中呈现

课程内容是什么?

课程分为五个部分,共29节课,每节课设多个子课题。下面是目录和课程表

第 1 部分:VM 基本操作

在这一部分中,我们描述编译和解释管道,开始构建我们的语言。讨论了堆栈和注册虚拟机、堆分配对象和字节码编译的主题。

第 2 部分:控制流和变量

在这一部分中,我们实现了控制流结构,例如 if 表达式和 while 循环,讨论了全局对象和全局变量、嵌套块和局部变量,还实现了一个反汇编程序。

第 3.1 部分:函数和调用堆栈

在这一部分中,我们开始讨论和实现函数抽象和函数调用。我们描述了调用堆栈、本机和用户定义函数以及 IILE(立即调用的 lambda 表达式)的概念。

第 3.2 部分:闭包实现

在这一部分中,我们专注于闭包的实现,讨论范围和逃逸分析,捕获自由变量,并为闭包添加运行时支持。

第 4 部分:垃圾收集

这部分专门介绍称为垃圾收集的自动内存管理。我们讨论跟踪堆并实现 Mark-Sweep 垃圾收集器。

第 5 部分:面向对象的编程

在最后一部分,我们添加了对面向对象编程、实现类和实例的支持。此外,我们构建最终的 VM 可执行文件。

此课程面向哪些人:

  • 任何好奇的工程师
  • 编程语言实现者
声明:本站所有资源、素材等全部来源于互联网,赞助VIP仅用于对IT资源服务器带宽等费用支出做支持,从本站下载资源,说明你已同意本条款。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
TheItzy资源站 » Building a Virtual Machine for Programming Language