Дизайн компилятора — это сложная наука, которая позволяет нам переводить языки программирования высокого уровня в машинопонятные инструкции. Компилятор проходит несколько стадий преобразования, каждая из которых представляет собой уникальное представление исходной программы.

В Rust, языке, который делает упор на безопасность и производительность, компилятор играет решающую роль. Одним из его уникальных аспектов является промежуточное представление высокого уровня (HIR), которое действует как мост между ранними стадиями процесса компиляции и более поздними стадиями.

В этой статье мы углубимся в то, что такое HIR, почему он важен в компиляторе Rust и как он работает.

Что такое ХИР?

Конвейер компилятора Rust проходит несколько этапов. Первоначально код Rust анализируется в абстрактное синтаксическое дерево (AST), затем преобразуется в промежуточное представление высокого уровня (HIR), за которым следует промежуточное представление среднего уровня (MIR), прежде чем он, наконец, сгенерирует промежуточное представление LLVM (LLVM IR). который LLVM использует для создания двоичного файла.

HIR — это важный шаг в конвейере, который помогает преобразовывать написанный пользователем код в форму, которую компилятору легче понять и оптимизировать. Он сохраняет структуру кода Rust с некоторыми упрощениями и преобразованиями для облегчения последующих этапов компиляции.

Роль отдела кадров

После того, как синтаксический анализатор Rust сгенерирует AST, он преобразует дерево в HIR, который сохраняет большую часть исходной структуры AST, но опускает некоторые детали, которые не нужны для следующих фаз компиляции.

Вот основные обязанности HIR:

  1. Упрощение AST: HIR избавляется от ненужных деталей, присутствующих в AST, таких как круглые скобки, которые пользователь мог использовать для удобства чтения, но которые не нужны для понимания смысла программы.
  2. Разрешение элементов: HIR разрешает элементы, что означает, что он связывает каждое использование элемента с его определением.
  3. Обработка включений: HIR обрабатывает включения (use), заменяя их элементами, на которые они ссылаются, эффективно предоставляя полную форму каждого пути.
  4. Исключение времени жизни: HIR отвечает за исключение времени жизни, т. Е. Процесс вывода определенных параметров времени жизни в сигнатурах функций.