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).
См. также: промежуточное представление и оптимизация компилятора