Topic domain

Compilers

From source text to machine code, stage by stage.

Articles
80
Clusters
8
Foundational
24
Intermediate
32
Advanced
24

Tokenization, grammars, and parser construction.

  1. Maximal Munch and the Boundary Between Tokens
  2. From Regular Expression to DFA Table: Inside a Lexer Generator
  3. Recursive Descent and the Cost of One Token of Lookahead
  4. Precedence Climbing for Binary Expressions
  5. LALR Table Construction and What the Conflicts Mean
  6. Error Recovery in Recursive Descent Parsers
All 10 in this cluster →

Scopes, symbol tables, and type checking passes.

  1. Resolving Identifier Uses Against a Stack of Lexical Scopes
  2. Symbol Table Layouts and the Cost of Leaving a Scope
  3. Separate Namespaces and Overload Sets in a Symbol Table
  4. Collecting Declarations Before Resolving Any Body
  5. Bottom-Up Expression Typing with Inference Variables
  6. Definite Assignment as a Flow-Sensitive Dataflow Problem
All 10 in this cluster →

SSA, control-flow graphs, and IR design.

  1. Three-Address Code as the Contract Between Front End and Back End
  2. Building Basic Blocks and Control-Flow Graphs from Linear Code
  3. Minimal SSA Construction from Dominance Frontiers
  4. Phi Functions: Parallel Semantics and the Out-of-SSA Problem
  5. Sparse Conditional Constant Propagation Across the SSA Graph
  6. Memory SSA: Giving Loads and Stores Def-Use Chains
All 10 in this cluster →

Dataflow analysis, inlining, and loop transformations.

  1. Reaching Definitions and the Monotone Dataflow Framework
  2. Live-Variable Analysis and the Backward Direction of Dataflow
  3. SSA Construction and the Cost of Phi Placement
  4. Constant Propagation over a Flat Lattice
  5. Inlining Decisions and the Cost Model Behind Them
  6. Escape Analysis and Scalar Replacement of Aggregates
All 10 in this cluster →

Graph coloring, spilling, and calling conventions.

  1. Live Ranges as the Input to Register Allocation
  2. Building the Interference Graph from Live Sets
  3. The Simplify and Select Loop of Chaitin-Style Coloring
  4. Spill Cost Heuristics and the Choice of Victim
  5. Conservative Coalescing and the Conditions That Make It Safe
  6. Linear Scan Allocation over Sorted Live Intervals
All 10 in this cluster →

Instruction selection, scheduling, and peepholes.

  1. Instruction Selection as Tree Tiling
  2. Maximal Munch and Dynamic-Programming Tiling
  3. Folding Address Computation into Memory Operands
  4. Two-Address Instructions and Destructive Operands
  5. Peephole Optimization and the Sliding Window
  6. List Scheduling and the Critical Path
All 10 in this cluster →

Object formats, relocation, and dynamic linking.

  1. Sections, Symbols, and Relocations in an ELF Object File
  2. Static Archives and Link Order: Why a Library Must Come After Its User
  3. Relocation Arithmetic: Patching Machine Code at Link Time
  4. Position-Independent Code and the Global Offset Table
  5. From execve to _start: How the Kernel Maps an ELF Executable
  6. SONAME, DT_NEEDED, and Symbol Versioning in Shared Libraries
All 10 in this cluster →

Build systems, cross compilation, and diagnostics.

  1. How a Compiler Driver Dispatches Work to Preprocessor, Compiler, Assembler, and Linker
  2. Header Dependency Discovery: Why the Compiler Records Includes, Not the Build Tool
  3. Target Triples, Sysroots, and What Actually Changes When Cross-Compiling
  4. Sources of Nondeterminism in Compiled Artifacts and How They Are Removed
  5. Scheduling a Parallel Build from a Dependency Graph
  6. Content-Addressed Build Cache Keys: What Must Go Into the Hash
All 10 in this cluster →

All Compilers articles