[Перевод] Что нового в LLVM
LLVM 6 уменьшает опасность Spectre, имеет улучшенную поддержку Windows и CPU компании Intel, а также включает WebAssembly в число поддерживаемых целевых платформ.
Инфраструктура компилятора LLVM прошла путь от технически любопытной вещи до живой части современного ландшафта программного обеспечения. Это то ядро, которое стоит за компилятором Clang, за компиляторами языков Rust и Swift, и предоставляет широкие возможности для разработки компиляторов для новых языков.
Это также довольно быстро развивающийся проект, его мажорные релизы выходят каждые полгода или близко к этому. Версия 6.0, вышедшая недавно, продолжает миссию LLVM по углублению и расширению поддержки различных целевых платформ. Апдейт также добавляет некоторые патчи, направленные против недавно обнаруженных уязвимостей уровня процессора.
В LLVM добавлена частичная защита от Spectre
Уязвимости CPU Spectre и Meltdown эксплуатируют особенности спекулятивного выполнения современных процессоров. Их сложно исправить, так как они требуют изменения как микрокода CPU, так и существующего ПО.
Для того, чтобы приложения, собранные с помощью LLVM, также вносили свой вклад в борьбу с этими уязвимостями, LLVM предлагает поддержку так называемых «retpolines», программных конструкций, которые частично уменьшают возможность атаки Spectre. Для того, чтобы использовать эту возможность, вам нужно перекомпилировать программы с LLVM 6.0 с ключом -mretpoline.
Улучшена отладка LLVM CodeView для Windows
Microsoft Windows использует отладочную информацию, хранящуюся в формате CodeView, аналогичном формату DWARF, используемому в системах Linux.
В LLVM ранее была добавлена поддержка CodeView, как часть общих усилий по развитию LLVM под Windows, и улучшению состояния инструментов отладки под Windows с использованием CodeView.
LLVM 6 далее улучшает эту поддержку, как благодаря помощи со стороны Microsoft, так и благодаря тщательному reverse engineering со стороны команды LLVM. Долгосрочные планы состоят в улучшении поддержки CodeView до той стадии, когда языки, отличные от C/C++, компилируемые в LLVM смогут надёжно использовать CodeView в своих инструментах.
LLVM поддерживает WebAssembly, как цель линковки
WebAssembly, бинарный формат приложений для веб-браузера, начал развиваться от стадии эксперимента к стадии используемой в продакшене технологии. Ключевой частью тулчейна WebAssembly, такой же, как Emscripten и PNaCL, является LLVM.
Самым последним шагом в поддержке линковки WebAssembly в LLVM стал инструмент wasm-ld. Этот инструмент получает на входе ассемблер, созданный в LLVM (таргет wasm32-unknown-unknown-wasm), и генерирует готовый к использованию бинарный файл WebAssembly.
Поддержка WebAssembly по-прежнему неполна, и работа над WebAssembly ещё продолжается, но LLVM останется ключевым элементом стека WebAssembly.
В LLVM улучшена поддержка Intel CPU
Программы LLVM сейчас имеют возможность использовать инструкции множества семейств процессоров Intel: Sandy Bridge, Ivy Bridge, Haswell, Broadwell, и Skylake. Intel Icelake сейчас также поддерживается.
В настоящее время LLVM генерирует код для процессоров Intel с использованием векторных расширений: VAES, GFNI, VPCLMULQDQ, AVX512VBMI2, AVX512BITALG, and AVX512VNNI.
Генерация кода улучшена для различных операций процессоров Intel, таких, как сравнения в памяти (memory comparisons), урезание векторов (vector truncations), умножение вектора на 32-битное целое значение.