Making a Language
This is a series that teaches you how to make a programming language. Our language's implementation can be divided up into passes: Typechecking, Lowering, etc. Each pass has a section below that is subdivided into features for the language. We can see "Types" (our first pass about type inference) is subdivided into three features: Base, Rows, Items.
Each feature layers new capabilities atop the previous feature. Base is the initial feature, and Rows layers support for row types on top of the Base language (and Item layers on Rows etc). Pass/feature combos connect together. Lowering/Base depends on Types/Base, and at the end we can combine all our passes' Base features to create a compiler for our Base language.
You can read each feature set for a pass, or you can read each pass for a feature. Implementation code is available in the accompanying repo
Types
Types introduces the Abstract Syntax Tree (AST) for our language and starts us off by inferring types for our AST.
Base
Rows
Items
Lowering
Lowering turns our typed AST into our Intermediate Representation (IR). This shifts us from the frontend of the compiler to the middle/backend of the compiler.