Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Инкрементальный компилятор – это разновидность инкрементального вычисления, применяемая в области компиляции. Естественно, что в отличие от обычных компиляторов, выполняющих так называемую полную перекомпиляцию, то есть (пере)собирающих все модули программы, инкрементальный компилятор перекомпилирует только измененные части программы.
An incremental compiler is a kind of incremental computation applied to the field of compilation. Quite naturally, whereas ordinary compilers make a so called clean build, that is, (re)build all program modules, an incremental compiler recompiles only modified portions of a program.
Императивная программа
В императивном программировании и разработке программного обеспечения, инкрементальная компиляция учитывает только изменения в известном наборе исходных файлов и обновляет соответствующие выходные файлы (на целевом языке компилятора, часто – байт-код), которые могли быть созданы при предыдущих компиляциях. Эффективно опираясь на ранее скомпилированные выходные файлы, инкрементальный компилятор избегает неэффективной перекомпиляции целых исходных файлов, большая часть кода в которых остаётся неизменной. Для большинства инкрементальных компиляторов компиляция программы с небольшими изменениями в исходном коде обычно происходит практически мгновенно. Можно сказать, что инкрементальный компилятор снижает гранулярность традиционных единиц компиляции языка, сохраняя при этом его семантику, позволяя компилятору добавлять и заменять небольшие фрагменты кода. Многие инструменты разработки используют преимущества инкрементальных компиляторов, предоставляя разработчикам более интерактивную среду программирования. Часто инкрементальный компилятор вызывается при каждом изменении исходного файла, чтобы разработчик почти сразу же получал информацию о любых ошибках компиляции, возникших в результате внесённых изменений. Такой подход, в отличие от традиционной компиляции, значительно сокращает цикл разработки, поскольку программисту больше не приходится ждать завершения длительного процесса компиляции, чтобы узнать об ошибках. Одним из недостатков инкрементальных компиляторов такого типа является сложность оптимизации компилируемого кода из-за его локальности и ограниченного объёма изменений. Обычно это не является проблемой, поскольку оптимизация обычно выполняется только при выпуске продукта: инкрементальный компилятор используется на протяжении всего процесса разработки, а стандартный пакетный компилятор – при выпуске.
In imperative programming and software development, incremental compilation takes only the changes of a known set of source files and updates any corresponding output files (in the compiler's target language, often bytecode) that may already exist from previous compilations. By effectively building upon previously compiled output files, an incremental compiler avoids the wasteful recompiling of entire source files, where most of the code remains unchanged. For most incremental compilers, compiling a program with small changes to its source code is usually near instantaneous. It can be said that an incremental compiler reduces the granularity of a language's traditional compiling units while maintaining the language's semantics, such that the compiler can append and replace smaller parts. Many programming tools take advantage of incremental compilers to provide developers with a much more interactive programming environment. It is not unusual that an incremental compiler is invoked for every change of a source file, such that the developer is almost immediately informed about any compilation errors that would arise as a result of their changes to the code. This scheme, in contrast with traditional compilation, shortens a programmer's development cycle significantly, because they would no longer have to wait for a long compile process before being informed of errors. One downside to this type of incremental compiler is that it cannot easily optimize the code that it compiles, due to locality and the limited scope of what is changed. This is usually not a problem, because for optimization is usually only carried out on release, an incremental compiler would be used throughout development, and a standard batch compiler would be used on release.
Интерактивная программа
В парадигме интерактивного программирования, например, в литературе, связанной с Poplog, интерактивный компилятор – это компилятор, который фактически является частью среды выполнения исходного языка. Компилятор может быть вызван во время выполнения для некоторого исходного кода или структуры данных, управляемой программой, что приводит к созданию нового скомпилированного фрагмента программы, содержащего машинный код, который затем немедленно становится доступным для использования средой выполнения. Если вновь скомпилированный фрагмент заменяет предыдущий, старый фрагмент будет удален сборщиком мусора. Такая схема позволяет реализовать самомодифицирующийся код и требует возможностей метапрограммирования. Возможность добавления, удаления и изменения кода во время выполнения называется динамической заменой кода (hot swapping). Некоторые интерактивные платформы программирования комбинируют использование интерпретируемого и компилируемого кода, чтобы создать впечатление, что любые изменения в коде немедленно становятся доступными для программы.
In the interactive programming paradigm, e. g. in Poplog related literature, and an interactive compiler refers to a compiler that is actually a part of the runtime system of the source language. The compiler can be invoked at runtime on some source code or data structure managed by the program, which then produces a new compiled program fragment containing machine code that is then immediately available for use by the runtime system. If the newly compiled fragment replaces a previous compiled procedure the old one will be garbage collected. This scheme allows for a degree of self modifying code and requires metaprogramming language features. The ability to add, remove and delete code while running is known as hot swapping. Some interactive programming platforms mix the use of interpreted and compiled code to achieve the illusion that any changes to code are accessible by the program immediately.