Jump to content

Промежуточное представительство

Промежуточное представление ( IR ) — это структура данных или код, используемый внутри компилятора или виртуальной машины для представления исходного кода . IR предназначен для дальнейшей обработки, такой как оптимизация и перевод . [ 1 ] «Хороший» IR должен быть точным – способным представлять исходный код без потери информации. [ 2 ] – и независимо от какого-либо конкретного исходного или целевого языка. [ 1 ] IR может принимать одну из нескольких форм: структуру данных в памяти или специальный кортежа или стека на основе код , читаемый программой. [ 3 ] В последнем случае его еще называют промежуточным языком .

Канонический пример можно найти в большинстве современных компиляторов. Например, интерпретатор CPython преобразует линейный удобочитаемый текст, представляющий программу, в промежуточную структуру графа , которая позволяет анализировать поток и переупорядочивать его перед выполнением. Использование такого промежуточного представления позволяет системы компиляторов, такие как GNU Compiler Collection и LLVM, использовать на многих различных исходных языках для генерации кода для множества различных целевых архитектур .

Средний язык

[ редактировать ]

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

Популярным форматом промежуточных языков является трехадресный код .

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

Хотя C явно не был задуман как промежуточный язык, природа C как абстракции ассемблера и его повсеместное распространение в качестве фактического системного языка в Unix-подобных и других операционных системах сделали его популярным промежуточным языком: Eiffel , Sather , Esterel , некоторые диалекты Lisp Cython ( Lush , Gambit , Squeak 's Smalltalk-subset Slang, Nim , Vala , Seed7 , SystemTap , ) , V и другие используют C в качестве промежуточного языка. Варианты C были разработаны для обеспечения функций C как переносимого языка ассемблера , включая C-- и промежуточный язык C.

Любой язык, предназначенный для виртуальной машины или машины с p-кодом, можно считать промежуточным языком:

Коллекция компиляторов GNU (GCC) использует внутри себя несколько промежуточных языков для упрощения переносимости и кросс-компиляции . Среди этих языков есть

GCC поддерживает создание этих IR в качестве конечной цели:

Структура компилятора LLVM основана на промежуточном языке LLVM IR , компактное двоичное сериализованное представление которого также называется «битовым кодом» и было разработано Apple. [ 4 ] [ 5 ] Как и байт-код GIMPLE, биткод LLVM полезен для оптимизации времени соединения. Как и GCC, LLVM также нацелен на некоторые IR, предназначенные для прямого распространения, включая Google PNaCl IR и SPIR . Дальнейшим развитием LLVM является использование многоуровневого промежуточного представления ( MLIR ) с возможностью генерирования кода для различных гетерогенных целей и объединения результатов разных компиляторов. [ 6 ]

Промежуточный язык ILOC [ 7 ] используется на занятиях по проектированию компиляторов как простой целевой язык. [ 8 ]

Инструменты статического анализа часто используют промежуточное представление. Например, Radare2 — это набор инструментов для анализа и обратного проектирования двоичных файлов. Он использует промежуточные языки ESIL. [ 9 ] и РЕЙЛ [ 10 ] для анализа бинарных файлов.

См. также

[ редактировать ]
  1. ^ Jump up to: а б Уокер, Дэвид. «CS320: Компиляторы: промежуточное представление» (слайды лекции) . Проверено 12 февраля 2016 г.
  2. ^ Чоу, Фред (22 ноября 2013 г.). «Проблема межъязыковой совместимости» . Очередь АКМ . 11 (10) . Проверено 12 февраля 2016 г.
  3. ^ Тоал, Рэй. «Промежуточные представления» . Проверено 12 февраля 2016 г.
  4. ^ «Биткод (iOS, watchOS)» . Хакерские новости. 10 июня 2015 года . Проверено 17 июня 2015 г.
  5. ^ «Формат файла битового кода LLVM» . llvm.org . Проверено 17 июня 2015 г.
  6. ^ «МЛИР» .
  7. ^ "Симулятор ILOC". Архивировано 7 мая 2009 г. в Wayback Machine. У.А. Барретт, 2007 г., перефразируя Кейта Купера и Линду Торчон, «Разработка компилятора», Морган Кауфманн , 2004 г. ISBN   1-55860-698-X .
  8. ^ "Дизайн компилятора CISC 471" Ули Кремера
  9. ^ Участники Radare2. «ЕСИЛ» . Проект Радаре2. Архивировано из оригинала 18 августа 2015 года . Проверено 17 июня 2015 г.
  10. ^ Себастьян Порст (7 марта 2010 г.). «Язык REIL – Часть I» . zynamics.com . Проверено 17 июня 2015 г.
[ редактировать ]
  • Стэнфордская группа SUIF
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: fe742e17676c8d5de0a0dda335dc8a89__1714598820
URL1:https://arc.ask3.ru/arc/aa/fe/89/fe742e17676c8d5de0a0dda335dc8a89.html
Заголовок, (Title) документа по адресу, URL1:
Intermediate representation - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)