Недавно я смотрел язык программирования Rust. Как это работает? Код ржавчины, похоже, скомпилирован в двоичные файлы ELF или PE (и т.д.), Но я не смог найти какую-либо информацию о том, как это делается? Скомпилирован ли он в промежуточном формате, а затем скомпилировал остальную часть пути с помощью gxx? Любая помощь (или ссылки) будет действительно оценена.
Как скомпилирован Rust для машинного кода?
Ответ 1
Фаза генерации кода компилятора Rust в основном выполняется LLVM. LLVM - это набор инструментов для построения компилятора, наиболее часто используемый Clang C [++] Compiler clang[++]
.
Во-первых, компилятор Rust (как, например, clang
) выполняет все специфические для Rust вещи, такие как проверка типов и заимствований; в конце концов, он генерирует LLVM-IR. IR означает промежуточное представление, и это... сравнимо со сборкой, но чуть более высокого уровня и, что самое важное, не зависит от платформы. Затем компилятор Rust просто вызывает ☏ LLVM и говорит:
Эй, приятель, не могли бы вы взять этот ИК и сгенерировать машинный код для текущей платформы? Это было бы фантастически ◕ ◡ ◕
На что отвечает LLVM:
Ure Конечно, нет проблем, новый друг. Вот ваш высокооптимизированный машинный код для [например]
x86_64
! ♫ ♪ ♫
После этого они приглашают еще нескольких друзей обернуть все это в небольшой симпатичный [например] пакет ELF и поместить его в пользовательскую файловую систему. (а пользователь как...)
Подобную информацию можно найти в официальном FAQ, который в любом случае содержит много интересной информации. Для получения более подробной информации о компиляторе Rust вы можете прочитать "Руководство по Rustc". По этому вопросу глава "Обзор высокого уровня" довольно интересна.