Какова цель IR (промежуточное представительство) - PullRequest
0 голосов
/ 30 октября 2018

Исходный код может быть напрямую преобразован в машинный код (100000). Тогда почему нам нужно преобразовать его в ассемблерный язык IR (промежуточное представление)?

Какие плюсы и минусы, если я не могу напрямую перейти на машинный язык?

1 Ответ

0 голосов
/ 31 октября 2018

Тогда почему нам нужно преобразовать его в язык ассемблера IR (промежуточное представление)?

Вы не.

Текстовые представления IR существуют для отладки внутренних компонентов компилятора. (Компиляторы обычно преобразуют через некоторые внутренние представления, обычно в какой-то форме SSA , оптимизируя логику вашей программы в эффективный asm, а затем машинный код.) См. Отключение всех параметров оптимизации в GCC .


И особенно для LLVM, IR полезен как не зависящий от платформы asm-подобный язык, который полезен для JIT-компиляции . Ваше портативное приложение может генерировать LLVM-IR и передавать его в LLVM, чтобы получить оптимизировать машинный код для любой платформы, на которой он работает.

Или для опережающего компилятора для нового языка это означает, что вам не нужно писать оптимизирующий компилятор, который будет переходить от исходного кода к машинному коду для каждой возможной платформы . Таким образом, вы получаете мобильность к нескольким целям, и, что наиболее важно, вы получаете оптимизирующий бэкэнд, при этом нужно только написать внешний интерфейс, который излучает простой неоптимизированный LLVM-IR.

Писать оптимизирующий компилятор сложно, но по крайней мере несколько оптимизированный машинный код в основном необходим, если вы хотите, чтобы кто-то использовал его для реальной работы. См. Почему так мало C-компиляторов?


TL: DR; IR позволяет использовать один оптимизирующий бэкэнд для множества интерфейсов для разных языков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...