8.10

2 Project Milestones

In this course you will build an optimizing ahead-of-time compiler from a high-level language with functional and imperative features to x86-64. While a single piece of software, the project is presented through a series of milestones in which you will gradually build and refine your compiler. After each milestone, you will have a complete compiler from some source language to machine code.

The project proceeds bottom-up. We start with the "lowest" level of abstraction, assembly language, and gradually design and implement new layers of abstraction as languages.

The language diff tool allows you to view differences between languages that aren’t typeset in the book. You can view both, diffs between different versions of the same language and diffs between source and target language of a compiler pass: https://soft.vub.ac.be/compilers/differ.

    2.1 Assignment 0: x64 to elf64

    2.2 Milestone 1: Abstracting x64 Boilerplate

    2.3 Milestone 2: Towards a Declarative Language

    2.4 Milestone 3: Register Allocation

    2.5 Milestone 4: Adding Control Flow

    2.6 Milestone 5: Adding Call