Динамическая компиляция


Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Динамическая компиляция - это процесс, используемый некоторыми реализациями языков программирования для повышения производительности во время выполнения программы. Хотя эта техника зародилась на языке Self , [ цитата необходима ] наиболее известным языком, использующим эту технику, является Java . Поскольку машинный код, генерируемый динамическим компилятором, создается и оптимизируется во время выполнения программы, использование динамической компиляции обеспечивает оптимизацию для повышения эффективности, недоступную для статически скомпилированных программ (то есть программ, скомпилированных так называемым «пакетным компилятором», как написано ниже ) кроме случаев дублирования кода или метапрограммирования .

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

Инкрементальная компиляция

Тесно связанный метод - инкрементная компиляция . Инкрементный компилятор используется в POP-2 , POP-11 , Forth , некоторые версии Lisp , например Maclisp и по крайней мере одна версия ML ( Poplog ML). Для этого требуется компиляторчтобы язык программирования был частью исполняющей системы. Следовательно, исходный код может быть прочитан в любое время с терминала, из файла или, возможно, из структуры данных, созданной запущенной программой, и переведен в блок или функцию машинного кода (которая может заменить предыдущую функцию. с тем же именем), который затем сразу становится доступным для использования программой. Из-за потребности в скорости компиляции во время интерактивной разработки и тестирования скомпилированный код, вероятно, не будет так сильно оптимизирован, как код, созданный стандартным `` пакетным компилятором '', который считывает исходный код и создает объектные файлы, которые впоследствии могут быть связаны. и беги. Однако инкрементально скомпилированная программа обычно работает намного быстрее, чем интерпретируемая версия той же программы.Таким образом, инкрементная компиляция обеспечивает сочетание преимуществ интерпретируемых и компилируемых языков. Для облегчения переносимости обычно желательно, чтобы инкрементный компилятор работал в два этапа, а именно сначала компилировался на некоторый промежуточный платформенно-независимый язык, а затем компилировался из этого в машинный код для хост-машины. В этом случае для портирования требуется только изменить "бэкэнд" компилятор. В отличие от динамической компиляции, как определено выше, инкрементная компиляция не требует дальнейшей оптимизации после первого запуска программы.а затем компилировать его в машинный код для хост-машины. В этом случае для портирования требуется только изменить "бэкэнд" компилятор. В отличие от динамической компиляции, как определено выше, инкрементная компиляция не требует дальнейшей оптимизации после первого запуска программы.а затем компилировать его в машинный код для хост-машины. В этом случае для портирования требуется только изменить "бэкэнд" компилятор. В отличие от динамической компиляции, как определено выше, инкрементная компиляция не требует дальнейшей оптимизации после первого запуска программы.

Смотрите также

  • Процессоры Transmeta динамически компилируют код x86 в код VLIW .
  • Динамическая перекомпиляция
  • Своевременная компиляция

внешние ссылки

  • Проект динамической компиляции UW
  • Эмуляция архитектуры посредством динамической компиляции
  • SCIRun
  • Статья Дэвида Б. Скофилда и Эрика Бергмана-Террелла « Динамическая компиляция, отражение и настраиваемые приложения »
  • Статья Даниэля Каззулино " Высокопроизводительный XML: компиляция динамических выражений XPath "
  • Мэтью Р. Арнольд , Стивен Финк , Дэвид П. Гроув , Майкл Хинд и Питер Ф. Суини , Обзор адаптивной оптимизации в виртуальных машинах , Труды IEEE, 92 (2), февраль 2005 г., страницы 449-466.
Источник « https://en.wikipedia.org/w/index.php?title=Dynamic_compilation&oldid=1026076122 »