от исходника до бинарникаfrom source to binary

Компиляторы C++C++ compilers

Что компилятор реально делает с кодом: стадии от препроцессора до машинного кода, различия трёх основных реализаций (GCC/Clang/MSVC), на чём держатся оптимизации и как несколько объектных файлов становятся одним бинарником. Продолжение темы PE-файла из theory/01 — с той стороны, откуда этот файл вообще берётся.What the compiler actually does to your code: the stages from preprocessor to machine code, the differences between the three major implementations (GCC/Clang/MSVC), what optimizations rely on, and how several object files become one binary. A continuation of the PE-file topic from theory/01 — from the side that produces that file in the first place.

Стадии компиляцииCompilation stages

от текста до .objfrom text to .obj

GCC vs Clang vs MSVC

три реализации, три компромиссаthree implementations, three trade-offs
GCC — история, GENERIC→GIMPLE→RTL, driver-пайплайн, pluginsGCC — history, GENERIC→GIMPLE→RTL, the driver pipeline, pluginsСтоллман 1987, монолитная архитектура, cc1plus/collect2, санитайзеры, __attribute__, опции оптимизации.Stallman 1987, monolithic architecture, cc1plus/collect2, sanitizers, __attribute__, optimization flags.interview Clang / LLVM — история Латтнера, LibTooling, полный набор санитайзеровClang / LLVM — Lattner's history, LibTooling, the full sanitizer setLLVM 2000, Apple 2005, библиотечная архитектура, ASTMatchers/clangd, MSan/CFI/фаззинг, опции оптимизации.LLVM 2000, Apple 2005, library-first architecture, ASTMatchers/clangd, MSan/CFI/fuzzing, optimization flags.interview MSVC — закрытая архитектура, почему нет plugin API, SAL-аннотацииMSVC — the closed architecture, why there's no plugin API, SAL annotationsИстория Visual C++, c1xx/c2, __declspec, /analyze, единственный нативный санитайзер (ASan), опции оптимизации.Visual C++'s history, c1xx/c2, __declspec, /analyze, the one native sanitizer (ASan), optimization flags.interview Сравнение и 13 других компиляторов/таргетовComparison and 13 other compilers/targetsПрактические различия, грабли, обзор MinGW, AVR-GCC, m68k, LoongArch64, MIPS/MIPSel, NVC++, PowerPC, RISC-V, SPARC, TI, VAX, Zig cc, ELCC.Practical differences, gotchas, an overview of MinGW, AVR-GCC, m68k, LoongArch64, MIPS/MIPSel, NVC++, PowerPC, RISC-V, SPARC, TI, VAX, Zig cc, ELCC.interview Сводная таблица плюсов и минусовSummary pros/cons tableВсе три компилятора бок о бок по каждой теме — быстрая шпаргалка плюс «когда выбирать какой».All three compilers side by side, topic by topic — a quick cheat sheet plus "when to pick which."

Оптимизации компилятораCompiler optimizations

почему код выполняется не так, как написанwhy the code doesn't run the way it's written

Линковка и сборка бинарникаLinking & binary assembly

от нескольких .o до одного PE/ELFfrom several .o files to one PE/ELF

статусstatus

4 темы, 8 страниц: стадии компиляции, GCC/Clang/MSVC как три самостоятельные статьи (история, устройство, driver-пайплайн, расширяемость, санитайзеры, опции оптимизации, инструменты каждого), сравнение с обзором 13 нишевых компиляторов/таргетов, сводная таблица плюсов/минусов, оптимизации, линковка. Метка interview отмечает темы, которые чаще всего всплывают на технических собеседованиях. Раздел логично читать вместе с theory/01 — PE-файл и жизненный цикл процесса: там про итоговый файл и что происходит при его запуске, здесь — про то, как этот файл вообще получается из исходников. Практические примеры ассемблерного выхлопа и разбор конкретных оптимизаций до/после — в compiler-asm/.4 topics, 8 pages: compilation stages, GCC/Clang/MSVC as three standalone articles (history, internals, the driver pipeline, extensibility, sanitizers, optimization flags, and tooling for each), a comparison with an overview of 13 niche compilers/targets, a summary pros/cons table, optimizations, linking. The interview tag marks the topics that come up most often in technical interviews. This section pairs naturally with theory/01 — the PE file & process lifecycle: that page covers the resulting file and what happens when it launches, this one covers how that file gets produced from source in the first place. Hands-on assembly-output examples and before/after optimization breakdowns live in compiler-asm/.