• ↑↓ pour naviguer
  • pour ouvrir
  • pour sélectionner
  • ⌘ ⌥ ↵ pour ouvrir dans un panneau
  • ←→ pour naviguer
  • esc pour rejeter
⌘ '
raccourcis clavier

What’s Being Compared

A fundamental compiler design decision: how many complete scans (passes) over the source code should the compiler make? Single-pass compilers trade code quality for speed and simplicity; multi-pass compilers trade compilation time for optimization and flexibility.

The Core Tension

Single-pass compilers must generate code on the fly, which means they cannot perform global optimizations or handle forward references without restrictions. Multi-pass compilers can analyze the entire program before generating code, enabling sophisticated optimization, but require more memory and compile time.

Comparison

DimensionSingle-Pass CompilerMulti-Pass Compiler
ArchitectureOne scan, phases interleavedMultiple scans, separate phases
Compilation speedFastSlower (more I/O)
Code qualityLower (local decisions)Higher (global analysis)
Memory usageLower (no IR storage)Higher (IR between passes)
Language constraintsNo forward refs without restrictionForward refs handled naturally
OptimizationMinimalFull suite possible
Error recoveryLimitedBetter (more context)
Classic examplePascalC, C++

When to Choose Single-Pass

  • Language designed for single-pass (Pascal)
  • Simple, restricted language constructs
  • Memory-constrained environments (embedded systems)
  • Rapid prototyping compilers

When to Choose Multi-Pass

  • Complex language with forward references (C/C++)
  • Optimization is important (production compilers)
  • Multiple target architectures (same front-end, different back-ends)
  • Modular compiler development (separate teams can work on different passes)

The Insight

The single-pass vs multi-pass distinction is not binary — modern compilers like LLVM use a multi-pass architecture but keep all IR in memory rather than writing intermediate files, getting the best of both worlds: fast inter-pass communication and powerful optimization.

Connections