Инкрементный компилятор
Эта статья , возможно, содержит оригинальные исследования . ( Ноябрь 2016 г. ) |
Инкрементальный компилятор — это своего рода инкрементные вычисления, применяемые в области компиляции . Вполне естественно, что в то время как обычные компиляторы производят так называемую чистую сборку , то есть (пере)собирают все программные модули, инкрементальный компилятор перекомпилирует только измененные части программы.
Определение
[ редактировать ]Императивное программирование
[ редактировать ]При императивном программировании и разработке программного обеспечения инкрементная компиляция принимает только изменения известного набора исходных файлов и обновляет все соответствующие выходные файлы (на целевом языке компилятора, часто в байт-коде ), которые могут уже существовать из предыдущих компиляций.Эффективно опираясь на ранее скомпилированные выходные файлы, инкрементный компилятор избегает бесполезной перекомпиляции целых исходных файлов, при которой большая часть кода остается неизменной. Для большинства инкрементных компиляторов компиляция программы с небольшими изменениями в исходном коде обычно происходит практически мгновенно.Можно сказать, что инкрементальный компилятор снижает степень детализации традиционных единиц компиляции языка, сохраняя при этом семантику языка , так что компилятор может добавлять и заменять более мелкие части.
Многие инструменты программирования используют преимущества инкрементальных компиляторов, предоставляя разработчикам гораздо более интерактивную среду программирования. Нет ничего необычного в том, что инкрементный компилятор вызывается при каждом изменении исходного файла, так что разработчик почти сразу же информируется о любых ошибках компиляции , которые могут возникнуть в результате их изменений в коде. Эта схема, в отличие от традиционной компиляции, значительно сокращает цикл разработки программиста, поскольку ему больше не придется ждать длительного процесса компиляции, прежде чем ему сообщат об ошибках.
Недостатком этого типа инкрементного компилятора является то, что он не может легко оптимизировать компилируемый код из-за локальности и ограниченного объема изменений. Обычно это не проблема, поскольку оптимизация обычно выполняется только при выпуске , на протяжении всей разработки будет использоваться инкрементный компилятор, а при выпуске будет использоваться стандартный пакетный компилятор.
Интерактивное программирование
[ редактировать ]В парадигме интерактивного программирования , например, в литературе, связанной с Poplog , [1] и [2] интерактивный компилятор относится к компилятору, который на самом деле является частью системы исполнения исходного языка. Компилятор может быть вызван во время выполнения для некоторого исходного кода или структуры данных, управляемой программой, который затем создает новый фрагмент скомпилированной программы, содержащий машинный код , который затем немедленно доступен для использования системой времени выполнения. Если вновь скомпилированный фрагмент заменяет предыдущую скомпилированную процедуру, старая будет подвергнута сборке мусора . Эта схема допускает определенную степень самомодификации кода и требует особенностей языка метапрограммирования . Возможность добавлять, удалять и удалять код во время работы известна как горячая замена . Некоторые платформы интерактивного программирования смешивают использование интерпретируемого и скомпилированного кода, чтобы создать иллюзию того, что любые изменения в коде доступны программе немедленно.
Список инкрементальных компиляторов
[ редактировать ]- Императивные и функциональные языки
- Генератор среды программирования PECAN — это инкрементный компилятор, разработанный Стивеном П. Рейссом в начале 1980-х годов. [3] [4]
- Коллекция компиляторов GNU расширилась [5] его развитие в рамках проекта IncrementalCompiler , сосредоточенного на предоставлении C / C++ быстрого инкрементального компилятора.
- Платформа Eclipse . включает инкрементальный компилятор для Java как часть Java Development Tools проекта [6]
- Инструмент сборки Gradle поддерживает инкрементальную компиляцию Java, начиная с версии 2.1. [7]
- Компилятор IBM VisualAge C++ 4.0
- Эмбаркадеро Дельфи
- Платформа компилятора .NET ( C# и Visual Basic .NET )
- Ржавчина [8]
- Идти [9]
- Форт
- Цейлон
- OCaml
- GNAT — компилятор GNU Ada.
- PTC ОбъектАда
- Интерактивные среды и системы выполнения
- Poplog (его основной язык POP-11 и его предшественник POP-2 )
- Версии Лиспа :
- Версии схемы :
- Версии Пролога :
- Версии ML :
- Standard ML of New Jersey ( штаб-квартира Bell Labs находится в Нью-Джерси )
- Поплог МЛ
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ http://www.cs.bham.ac.uk/research/projects/poplog/primer/node14.html. Архивировано 5 января 2008 г. в Wayback Machine , обучающее пособие по Poplog.
- ^ Статья Смита, Сломана и Гибсона 1992 г. ниже (теперь доступна в Интернете)
- ^ «Домашняя страница Стивена П. Рейсса» . Брауновский университет. 9 июня 2011 года. Архивировано из оригинала 10 февраля 2013 года . Проверено 8 августа 2014 г.
- ^ Поппл, Джеймс (1987). Инкрементная компиляция и ее реализация в генераторе среды программирования PECAN (PDF) (дипломная работа с отличием). Австралийский национальный университет. Архивировано (PDF) из оригинала 15 августа 2014 года . Проверено 8 марта 2013 г. Альтернативный URL-адрес Также доступен в Google Книгах .
- ^ https://gcc.gnu.org/ml/gcc/2007-07/msg00496.html , объявление о начале ветки IncrementalCompiler GCC.
- ^ http://www.eclipse.org/jdt/core/index.php , описание основного компонента JDT.
- ^ https://docs.gradle.org/2.1/release-notes.html , примечания к выпуску Gradle версии 2.1.
- ^ «Анонсируем Rust 1.24 | Блог Rust» .
- ^ «Примечания к выпуску Go 1.10 — язык программирования Go» .
Внешние ссылки
[ редактировать ]- Журнал доктора Добба о создании инкрементного компилятора C++
- Р. Смит, А. Сломан и Дж. Гибсон, Двухуровневая поддержка виртуальных машин POPLOG для интерактивных языков, в «Направлениях исследований в когнитивной науке», том 5: Искусственный интеллект , под ред. Д. Слиман и Н. Бернсен, Лоуренс Эрлбаум, 1992, стр. 203–231.