Однопроходное представление промежуточного компилятора?

Я читал книгу о драконах и меня интересует однопроходные компиляторы, так что поправьте меня, если я ошибаюсь, но, поскольку компилятор проходит анализ, он генерирует более и более точное промежуточное представление, или, возможно, точное словом, может быть, оптимальным будет лучший термин для использования, независимо. Однопроходный компилятор проходит каждую фазу только один раз и иногда группирует несколько фаз в один проход, значит ли это, что промежуточное представление будет менее оптимальным? Я уверен, что у меня что-то не так с тем, как я об этом думаю, поэтому, пожалуйста, не стесняйтесь исправлять любые ошибочные предположения, которые я сделал (или просто дайте мне знать, насколько глуп этот вопрос, в любом случае).

Кроме того, если промежуточное представление не страдает, то зачем нам когда-либо использовать многопроходный компилятор, если он вызывает более медленное время компиляции?

1 ответ

Решение

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

Википедия утверждает

Однопроходные компиляторы не могут генерировать столь же эффективные программы, как многопроходные компиляторы из-за ограниченного объема доступной информации. Многие эффективные оптимизации компилятора требуют нескольких проходов через базовый блок, цикл (особенно вложенные циклы), подпрограмму или весь модуль. Некоторые требуют пропусков по всей программе. Некоторые языки программирования просто не могут быть скомпилированы за один проход в результате их разработки.

Другие вопросы по тегам