LLVM
Коротко: LLVM — конструктор для компіляторів: багато мов перекладаються в те саме проміжне подання, а LLVM оптимізує його й створює машинний код для багатьох процесорів.
Докладніше: Замість того щоб будувати повний компілятор для кожної мови й процесора, передня частина (мова) і задня частина (процесор) розділені спільним LLVM IR.
Подробиці
- Структура: Фронтенд (наприклад, Clang для C/C++,
rustcдля Rust, Swift) → LLVM IR → проходи оптимізації → бекенд (x86, ARM, RISC-V, WebAssembly, GPU). - IR: Типізована проста проміжна мова у формі SSA (кожній змінній значення присвоюється один раз), що полегшує оптимізацію.
- Оптимізації: Вбудовування (inlining), оптимізація циклів, векторизація (SIMD), згортання констант.
- Побічні продукти: Clang-Tidy, санітайзери (AddressSanitizer), налагоджувач LLDB.
- Перевага: Нові мови з’являються швидше, нові процесори одразу отримують багато мов.
- Перспектива: Альтернативи на кшталт GCC лишаються важливими, а деякі мови використовують власні бекенди (Go).
Див. також: проміжне подання та оптимізація компілятора