Время компиляции в телефоне что это
Видео: Что такое компиляция, линковка? Что такое run time?
Содержание
Ключевое отличие — компиляция Время против времени выполнения
Большинство программ написано с использованием языков программирования высокого уровня. Эти языки программирования имеют синтаксис, аналогичный английскому языку. Языки высокого уровня легко понятны людям, но они не понимаются компьютером. Следовательно, написанная программа или исходный код должны быть преобразованы в машинно-понятный формат. Это называется машинным кодом. Период времени для преобразования исходного кода в машинный код известен как время компиляции. Такие задачи, как синтаксический анализ, семантический анализ и генерация кода, выполняются во время компиляции. Период времени для запуска исполняемого файла, созданного во время компиляции, называется временем выполнения. Оба термина относятся к разным этапам жизненного цикла программы. В этой статье обсуждается разница между временем компиляции и временем выполнения. В ключевое отличие между временем компиляции и временем выполнения заключается в том, что время компиляции — это фаза жизненного цикла программирования, которая преобразует исходный код в исполняемый файл, а среда выполнения относится к фазе жизненного цикла программирования, на которой запускаются исполняемые файлы, созданные во время компиляции.. Ошибки, возникающие во время компиляции, известны как ошибки времени компиляции, а ошибки, возникающие во время выполнения, известны как исключения.
1. Обзор и основные отличия
2. Что такое время компиляции
3. Что такое время выполнения
4. Сходства между временем компиляции и временем выполнения
5. Параллельное сравнение — время компиляции и время выполнения в табличной форме
6. Резюме
Что такое время компиляции?
Программист может давать инструкции компьютеру, используя язык программирования. Большинство языков программирования, используемых программистом, являются языками программирования высокого уровня. Они имеют синтаксис, аналогичный английскому языку. Эти языки легко читаются и понятны людям. Программа, написанная с использованием языка высокого уровня, называется исходным кодом. Исходный код может содержать набор строк или много строк в зависимости от задачи. Инструкции, предоставленные на языке высокого уровня, не понимаются компьютером. Компьютер понимает машинный код. Следовательно, исходный код должен быть скомпилирован в машинный код, чтобы быть исполняемой программой. Фаза жизненного цикла программирования называется временем компиляции. Это период времени для завершения процесса компиляции. Операции во время компиляции включают синтаксический анализ, семантический анализ и генерацию кода.
Во время компиляции могут возникнуть ошибки. Они возникают из-за синтаксических и семантических ошибок. Эти ошибки позволяют избежать успешной компиляции. Компилятор сообщает об ошибках времени компиляции. Он отобразит сообщение, в какой строке произошла ошибка. Некоторые распространенные ошибки времени компиляции включают отсутствие фигурных скобок, неправильное написание идентификаторов и неправильное написание ключевых слов. Когда возникает ошибка компиляции, программист должен исправить эту ошибку.
Что такое время выполнения?
Среда выполнения также известна как время исполнения. Это время, когда программа выполняется, в отличие от других этапов жизненного цикла программы, таких как время компиляции, время загрузки и т. Д. Когда процесс компиляции завершен, он запускается пользователем. Период времени для запуска исполняемого файла, созданного во время компиляции, называется временем выполнения. Термин «время выполнения» может использоваться для обозначения ошибок. Даже если программа правильно компилируется, могут быть ошибки.
Эти ошибки не дадут ожидаемого результата. Он также может прервать выполнение программы. Эти ошибки возникают во время выполнения, поэтому они известны как ошибки времени выполнения или исключения. Некоторые ошибки времени выполнения приводят к делению числа на ноль, когда массив выходит за рамки и заканчивается нехватка памяти.
В чем сходство между временем компиляции и временем выполнения?
- И время компиляции, и время выполнения являются фазами жизненного цикла программы.
В чем разница между временем компиляции и временем выполнения?
Время компиляции и время выполнения
Резюме — компиляция Время против времени выполнения
Время компиляции и время выполнения — это две фазы жизненного цикла программирования. В этой статье обсуждалась разница между временем компиляции и временем выполнения. Преобразование исходного кода программиста в машинный код происходит во время компиляции. Запуск исполняемого файла, созданного во время компиляции, называется средой выполнения. Если во время компиляции возникает ошибка, компилятор отображает сообщение в соответствии с ошибкой. Даже скомпилированная программа может не дать ожидаемого результата. В этом случае это ошибка времени выполнения или исключение. Разница между временем компиляции и временем выполнения заключается в том, что время компиляции — это фаза жизненного цикла программирования, которая преобразует исходный код в исполняемый файл, в то время как среда выполнения относится к фазе жизненного цикла программирования, на которой выполняются исполняемые файлы, созданные во время компиляции.
Русские Блоги
Инструментарий времени компиляции Android, позволяющий программе писать код самостоятельно (1)
Предисловие
В последние годы инструментальная технология времени компиляции становится все более и более распространенной в среде Android. Будь то ButterKnief и Dagger, которые могут генерировать исходный код JAVA, или VirtualAPK, который манипулирует байт-кодом, даже новый язык Kotlin использует инструментальную технологию времени компиляции. Изучение этой технологии очень помогает нам понять принципы работы этих фреймворков. Кроме того, с помощью этой технологии мы можем извлекать сложный и повторяющийся код, уменьшать взаимосвязь программ, улучшать возможность повторного использования кода и повышать эффективность разработки. Следовательно, во время компиляции необходимо понимать технологию инструментария. Перед тем, как представить эту технологию, давайте сначала разберемся в процессе компиляции кода Android и расположении инструментовки. вот изображение.
APT (Annotation Processing Tool) — это процессор аннотаций времени компиляции. Он реализует функцию генерации кода во время компиляции, определяя аннотации и процессоры, и компилирует сгенерированный код и исходный код в файл .class.
Репрезентативный кадр: ButterKnife, Dagger, ARouter, EventBus3, DataBinding, AndroidAnnotation и т. Д.
Прежде чем рассказывать о том, как применять технологию APT, давайте сначала разберемся с некоторыми связанными знаниями.
Один, Элемент
1. Введение
Element Своего родаВремя компиляцииТип, описывающий статическую структуру файла .java. Он может представлять пакет, класс, метод или поле. Element При сравнении следует использовать equals , Потому что то же самое Element Может быть представлен двумя объектами. JDK предоставляет следующие 5 типов Element 。
2. структура хранения элементов
Компилятор использует Dom-дерево, подобное Html, для хранения Element. Мы используем следующие Test.java Позволь мне объяснить.
Test.java Древовидная структура элементов описывается следующим образом:
Мы видим, что setName(String name) из ExecutableElement Нет детей TypeParameterElement . Это потому что TypeParameterElement Не включено Element В дереве. Но мы можем пройти ExecutableElement из getTypeParameters() Способ получения.
Кроме того, я представлю вам два очень полезных метода в Element.
Два, Тип: Зеркало
Element Есть asType() Способ возврата TypeMirror 。 TypeMirror Представляет тип на языке программирования Java. Эти типы включают базовые типы, объявленные типы (типы классов и интерфейсов), типы массивов, переменные типа и типы NULL. Он также может представлять параметры типа подстановочного знака, исполняемые сигнатуры и возвращаемые типы, а также соответствующие пакетам и ключевым словам. void Псевдотип. Обычно мы используем TypeMirror для определения типа. Следующий фрагмент кода используется для сравнения того, является ли тип, описываемый элементом, подклассом Activity.
Три, простой масляный нож
В этом разделе мы напишем простой ButterKnife Позвольте мне представить, как написать фреймворк APT. APT должен быть самым простым методом инструментария во время компиляции, и его можно выполнить в три этапа.
Определите аннотации времени компиляции.
Мы добавляем новый модуль библиотеки Java с именем apt_api , Напишите класс аннотации BindView.
Вот краткое введение RetentionPolicy 。 RetentionPolicy Это перечисление с тремя значениями: SOURCE, CLASS и RUNTIME.
- ИСТОЧНИК: Не участвуйте в компиляции, позвольте разработчикам использовать это.
- КЛАСС: участие в компиляции, невидимое во время выполнения. Используется компилятором.
- RUNTIME: участие в компиляции, видимое во время выполнения. Используется компилятором и JVM.
Определите обработчик аннотаций.
Точно так же нам нужно добавить новый модуль библиотеки Java с именем apt_processor 。
Нам нужно ввести две необходимые зависимости: одна — это наш новый модуль. apt_annotation А другой — гугл com.google.auto.service:auto-service:1.0-rc3 (Именуемое в дальнейшем auto-service )。
Добавить новую категорию ButterKnifeProcessor , Наследование AbstractProcessor 。
auto-service Упростил для нас процесс определения обработчиков аннотаций. @AutoService Является по auto-service При условии, что его роль — сообщить компилятору, что мы определили ButterKnifeProcessor Это процессор аннотаций времени компиляции. Итак, во время компиляции ButterKnifeProcessor Будет называться.
Мы также переписали четыре метода, предоставляемые AbstractProcessor: getSupportedAnnotationTypes 、 getSupportedSourceVersion 、 init 、 process 。
getSupportedAnnotationTypes Указывает, какие аннотации может обрабатывать процессор. Здесь возвращается BindView, который мы определили ранее. Помимо методов переписывания, это также можно реализовать с помощью аннотаций.
getSupportedSourceVersion Представляет версию Java, которую может обрабатывать процессор. Здесь мы можем использовать последнюю версию JDK. Точно так же мы можем добиться этого с помощью аннотаций.
init Метод в основном используется для выполнения некоторых подготовительных работ. Здесь мы обычно инициализируем несколько классов инструментов. В приведенном выше коде мы инициализировали класс инструмента, связанный с элементом elementUtils , Инструменты, связанные с журналами messager , Связанные с файлами filer И инструменты, связанные с типом typeUtils . Мы увидим дальше process В основном через эти категории генерируется код.
process Используется для выполнения конкретной функции записи программного кода. В конкретном введении process Прежде разрешите мне порекомендовать библиотеку:javapoet。 javapoet По волшебству square Компания имеет открытый исходный код и предоставляет очень удобный API, помогающий разработчикам создавать исходные файлы .java. его README.md Документ предоставляет нам множество примеров и является основным инструментом для нашего обучения.
процесс Код относительно длинный, но его логика очень проста и в основном разделена на две части: сбор данных и генерация кода. Я добавил примечания к ключевым моментам, поэтому не буду их подробно объяснять. На данный момент мы практически завершили подготовку аннотатора.
- Используйте аннотации
Представляем обработчик аннотаций и аннотаций, который мы определили в build.gradle.
Примечания к применению
На этом этот документ закончен. что? Ты не сказал ButterKnife Насчет этого класса. Что ж, это действительно просто, просто разместите код напрямую.
[Прикреплено] Соответствующие рамки и информация
Добавить группуПроектирование архитектуры Android IOCПолучите доступ к предыдущим материалам по расширенной архитектуре Android, исходному коду, заметкам и видео. Расширенный пользовательский интерфейс, оптимизация производительности, курсы архитекторов, NDK, гибридная разработка (ReactNative + Weex), апплеты WeChat, универсальная передовая технология Android Flutter, а также технические эксперты в группе, которые вместе обсуждают и решают проблемы.
метод сбора:
Нравится + добавить группу, чтобы получить бесплатноПроектирование архитектуры Android IOC
Компиляция и сборка Android приложения (как это работает)
Дисклеймер: Я не 23 летний сеньор (мне 19 и до сеньора мне еще ой как далеко, года 4, поэтому супер статьи от меня не ждите.
Основа пути моего, разработчика как — обучение/изучение нового постоянное. Надеюсь, у вас тоже.
Я бы хотел подробно рассмотреть процесс компиляции и сборки Android приложения в конечный .apk. Да, при разработке очередного приложения какашкибезholoстилей эта информация вам нафиг не сдалась, но для общего развития будет полезна всем Android разработчикам.
- Напишите код
- Нажмите кнопочку Build & Run в вашей IDE
- Продолжайте быть Android разработчиком
В общих чертах процесс сборки приложения выглядит так:
Нас особенно интересует второй этап (компиляция и сборка ресурсов), так что, рассмотрим его более подробно (21 этап как никак):
Пожалуйста, не прокручивайте диаграмму из-за того, что вам лень вникать, она не сложная, к тому же переведенная. Это основа статьи.
(Оригинал здесь: developer.android.com/tools/building/index.html)
Что есть что на диаграмме:
1. Ресурсы приложения — это все xml ресурсы из папки res вашего проекта + некомпилируемые бинарные ресурсы, например, картинки из res/drawable или файлы из /res/raw, а так же файлы из /assets/
2. aapt — утилита, которая ищет в вашем проекте компилируемые ресурсы, такие как AndroidManifest.xml и xml файлы из res/ и компилирует их в бинарное представление, а изначально бинарные ресурсы, такие как картинки, и файлы из /res/raw и /assets не компилируются. Далее, эта утилита генерирует важнейший класс R.java для вашего приложения, благодаря которому вы можете обращаться к ресурсам из вашего кода без всяких заморочек с чтением файлов, как скажем с /assets.
Кстати, кроме компиляции xml ресурсов, aapt создает файл resources.arsc, который представляет собой таблицу для маппинга ресурсов во время выполнения приложение, туда входят все ресурсы из /res/, в том числе и /res/raw/, содержимое /assets не включается в таблицу.
Полезно знать: Утилита aapt находится в папке platform-tools вашего Android SDK. Если вам захотелось сделать реверс-инжиниринг скомпилированных ресурсов приложения, вы можете воспользоваться apk-tool (https://code.google.com/p/android-apktool/)
3. R.java — класс, генерируемый утилитой aapt для того, чтобы вы могли обращаться к ресурсам из папки res без явной работы с файловой системой через библиотеки ввода/вывода.
Если кто-то еще не знал — всякие R.string, R.menu и прочее — это статические вложенные классы, а в R.string.app_name, app_name — public static final int поле класса. Получается, что правило-принцип CamelCase, применяемый в Java, для них нарушен, должно то быть: R.String, R.Menu, а с константами — R.String.APP_NAME, айайай Google.
4. Исходный код приложения — это ваши (или украденные форкнутые с других проектов) .java файлы с кодом проекта из папки src, все просто.
5. Java интерфейсы — это не те, обычные интерфейсы (обычные входят в состав исходного кода приложения, предыдущий пункт), которые вы используете в вашем коде, это интерфейсы, сгенерированные утилитой aidl (следующий пункт содержит пояснение).
6. .aidl файлы — это интерфейсы, которые вы можете написать на Java с немного необычным синтаксисом (на самом деле, язык называется AIDL — Android Interface Defenition Language). Такие интерфейсы нужны для описания взаимодействия между различными процессами, например когда вам нужно, чтобы сервис (Service) вашего приложения работал не просто в отдельном потоке, а именно в отдельном процессе (у такого подхода есть как преимущества, например, раздельные квоты на память для процессов, так и недостатки — необходимость использования aidl), на Хабре есть статья, в которой раскрыта тема использования aidl http://habrahabr.ru/post/139432/).
7. aidl — утилита, которая транслирует ваши .aidl файлы в Java код, она находится в папке platform-tools вашего Android SDK.
8. Java компилятор — (наконец-то мы до него добрались!) это обычный javac из вашего JDK, которому дают на обработку исходный код приложения (4), R.java (3) и интерфейсы aidl, которые переведены в java код с помощью утилиты aidl
9. .class файлы — это «выхлоп» javac — байткод для JVM. Так как Dalvik VM не может интерпретировать java bytecode, а использует свой велосипед под название dex bytecode, то на этом компиляция проекта не заканчивается.
Разработчики Android выбрали регистровую архитектуру Dalvik VM, вместо привычной для JVM — стековой архитектуры из двух ключевых соображений:
1. Производительность регистровой ВМ выше (инфа 100%), особенно на процессорах с RISC-архитектурой, а это все ARM процессоры. Первые версии Dalviik VM даже не включали JIT (до Android 2.2), но давали терпимую производительность приложений, скажем я не испытывал особых проблем с HTC Desire на 2.1.
2. java bytecode транслируется в меньший по объему dex bytecode, что уменьшает размер скомпилированного приложения.
10. dex компилятор (а точнее транслятор) — он транслирует .class файлы в classes.dex (Java bytecode в Dalvik bytecode). Описание .dex вы можете прочитать здесь source.android.com/tech/dalvik/dex-format.html.
Сам компилятор находится в папке platform-tools вашего Android SDK, запускать его можно через dx.bat (для Windows), при этом будет задействован dx.jar из папки platform-tools/lib
11. Сторонние библиотеки и .class файлы — это все то, что вы подключаете в проект как библиотеку или включаете в Build Path. Так как в качестве основного ЯП для Android выбрана Java, вы можете без проблем использовать практически любые java библиотеки, они просто будут обработаны dex компилятором.
12. classes.dex — в данный файл dex компилятор записывает весь исполняемый код вашего проекта.
Да-да, все будет в одном файле, хотя в документации написано, что файлов .dex может быть несколько, но на практике, я не встречал, чтобы .apk содержал .dex файлы кроме classes.dex, может в комментариях меня поправят.
13. Скомпилированные ресурсы — xml ресурсы приложения, скомпилированные в бинарное представление.
14. Другие ресурсы — это реально другие ресурсы, которые не обрабатываются aapt — например файлы, которые вы зачем то хотите засунуть в .apk, так же туда попадают файлы из .jar`ов, которые добавлены в Build Path, но не являются компилируемыми.
15. apkbuilder — утилита, которой на вход подают скомпилированные ресурсы (2, 13), classes.dex (12) и другие ресурсы (14), а она собирает из этого наш вожделенный .apk файл. Утилита лежит в папке tools вашего Android SDK
16. Собранное приложение в файл .apk — это архив, содержащий скомпилированные и нескомпилированные ресурсы, classes.dex, resources.arsc, META-INF, AndroidManifest.xml и т.д.
Формат .apk это надстройка над .jar, а .jar — надстройка над zip, так что, .apk вы можете открыть zip архиватором, такая вот матрешка.
17. jarsigner — это Oracle`вская утилита для подписания .jar архивов. Он подписывает ваш .apk выбранным вами ключом.
Но не надо думать, что ваш .apk теперь защищен от декомпиляции, ничего подобного. В .apk только добавляется папка META-INF, в которой вы можете обнаружить публичную часть release (или debug) сертификата — файл CERT.RSA, а так же файл CERT.SF — который содержит контрольные суммы для всех файлов внутри .apk, кроме тех, что в папке META-INF
Пример содержания CERT.SF:
Signature-Version: 1.0
SHA1-Digest-Manifest-Main-Attributes: O1qITQssq6nv0FUt+eR1aLnqk5w=
Created-By: 1.6.0_43 (Apple Inc.)
SHA1-Digest-Manifest: OwzyFA/Qjd+5X1ZwaJQSxFgdciU=
Name: res/drawable-mdpi-v4/ic_premium_pin.png
SHA1-Digest: 8ksQB8osCHTnMlpL6Ho/GDc719Q=
Name: res/drawable/round_bottom_white.xml
SHA1-Digest: rQelve4dQmwCfkVlYZ2+9j5aW5w=
Еще немного важной информации о подписи приложения:
В Android уникальным идентификатором приложения является имя пакета приложения, например ru.habrahabr.android. Но чтобы злоумышленник не смог подменить ваше установленное приложение на свое с таким же пакетом, Android выполняет проверку, на то чтобы новый .apk был подписан тем же сертификатом, что и уже установленный.
Кроме того, если у вас есть выложенное приложение в Google Play, вы не сможете обновить его, если новая версия подписана другим сертификатом! Так что советую забекапить сертификат, а так же не забыть пароль к нему. Иначе вы не сможете обновлять свои приложения.
18. Debug или Release хранилище ключей — хранилище из которого jarsigner возьмет ключи для подписи приложения. Если вы собираете Debug версию (для запуска на эмуляторе или подключенном устройстве), то .apk подписывается debug ключем, в Windows он находится в папке пользователя/.android/.
Кстати, приложение подписанное debug ключом нельзя установить без подключенного отладчика. Так что, если хотите отправить .apk друзьям на тестирование — подпишите его Release ключем
19. Подписанный .apk — .apk файл вашего приложения, в который добавлена информация о подписи (см. пункт 17).
20. zipalign — утилита, которая оптимизирует ваш .apk для более быстрого запуска и меньшего потребления ОЗУ при работе приложения. Она выравнивает содержимое .apk для более эффективной разархивации (подробнее здесь: http://developer.android.com/tools/help/zipalign.html).
Важное замечание: приложение надо сначала подписать, а затем применить zipalign, т.к. подпись — это добавление папки META-INF в архив, а это изменение архива, следовательно нарушение его оптимизации. То есть, если вы сначала примените zipalign, а потом измените архив — смысла в zipalign не будет. Насчет нарушения контрольных сумм, которые рассчитала утилита jarsign, бояться не стоит, т.к. zipalign делает оптимизации по выравниванию данных в архиве, все это происходит на уровне zip, сами данные не изменяются.
Хозяйке на заметку: во время сборки debug версии проекта zipalign не вызывается, скорее всего, чтобы вы не ждали выполнения еще и этой операции (спасибо и на этом).
21. Подписанный (и, возможно, выравненный) .apk — вожделенный .apk вашего приложения. Конец.
Я думаю, что теперь понятно, почему сборка и запуск Android приложения происходит так долго 🙂 Так что, советую поставить SSD, ну и процессор побыстрее и сэкономить себе нервы и время.
Немного полезного оффтопа:
1. Всегда используйте обфускацию вашего кода. Декомпилировать java приложение очень легко. Даже несмотря на то, что в .apk используется dex bytecode — его сначала транслируют обратно в java bytecode, а затем к нему применят обычные java декомпиляторы. Потратьте пару часов на выбор и настройку обфускатора, иначе можете просто выложить исходники проекта на гитхаб, секономите людям время, а может еще и пулл реквесты получите 🙂
2. Вы знали, что Android инстанциирует для каждого запущенного приложения отдельный экземпляр Dalvik VM? Это сделано для того, чтобы исключить ситуации, когда одно приложение валит Dalvik VM, а за ним тянет все другие запущенные приложения. Яркий пример подобного вмешательства — Facebook, они через reflection изменяют параметры Dalvik VM (не стоит так делать). Если бы Android использовал один инстанс Dalvik — это изменение затронуло бы все запущенные приложения.
3. Dalvik VM не является JVM, т.к. во-первых он не понимает java bytecode, а во-вторых не реализует спецификации для JVM, т.к. использует свой байт код. Так что, советую называть Dalvik VM именно Dalvik VM.
Время компиляции в телефоне что это
Обозначение понятия
Существуют следующие возможные способы применения слова компиляция:
1. Аниме. В данной сфере компиляцией обозначают короткометражный или полнометражный фильм, который основан на соответствующем сериале, выполненном в классическом жанре японской анимации
2. Литература. В этом виде искусства компиляцией называют создание сочинений на основании уже существующих произведений, без дополнительной обработки источников. Также в литературе данным термином обозначают любую работу, выполненную таким образом. Этот вид деятельности существенно отличается от плагиата ввиду того, что в некоторых типах произведений, таких как обзоры, очерки или монографии, авторам необходимо использовать большое количество источников, в том числе и отдельных вставок из них.
3. Музыка. В данном виде искусства компиляцией называют сборник или же целый альбом, в который входят композиции, выполненные на одну и ту же тему. Это могут быть хит-парады, песни, определенного стиля или эпохи, а также сочинения некоего исполнителя различных лет написания. Отдельно в музыке этим термином именуется методика составления произведения из уже использующихся тем. Иногда компиляцией можно назвать то же, что и попурри.
4. Программирование. Компиляцией в данной науке принято именовать осуществление трансляции программы, что написана на высокоуровневом языке, в программу, которая создана посредством языка более низкого уровня, но при этом имеющего схожий машинный код. Этот процесс осуществляется при помощи использования специального компилятора.
Вышеперечисленный перечень сфер применения понятия компиляция не является исчерпывающим.
Литература
Использование компиляции в литературе напрямую связано с сочинением работ, которые основаны на использовании большого количества источников. Таким способом создается информативный и действительно полезный материал, в котором можно найти большое количество данных по заданной теме.
В выше описанной ситуации компиляция не является плагиатом. Это обусловлено тем, что создатель новой статьи или произведения обязательно используется ссылки на другие материалы, указывая их автора.
Появление компиляции в литературе объясняется распространением учебно-популяризаторских и просветительских целей. В древние времена отсутствие такого механизма было объяснено сложностью понимания авторства и не имеющимся во всех государствах института авторского права.
Музыка
Основные типичные примеры компиляции в музыке заключаются в следующем:
Сборники самых популярных композиций артиста или же группы. Для привлечения внимания к ним, чаще всего в них включают песню, ранее не выпускавшуюся в других альбомах.
Другие сборники артиста или группы. Это могут быть редкие записи, песни, являющиеся саундтреками к фильмам, и т.д.
Наборы дисков исполнителя. Они могут охватывать либо все творчество исполнителя, либо часть его альбомов.
Тематические сборники нескольких исполнителей. Они могут быть посвящены любви, Новому году, Рождеству и т.д.
Жанровые сборники. Чаще всего их создают исполнители, работающие в жанрах блюз, рок, джаз и др.
Сборники хитов различных артистов. Чаще всего это касается самых популярных песен различных времен или же определенного года.
Рекламные сборники. Эта форма продвижения является одной из наиболее успешных и популярных.
Альбомы продюсеров. В большинстве случаев они помогают в работе большому количеству исполнителей.
Таким образом, компиляция в музыке обрела такое же распространение, как и в литературе.
Программирование
В программировании существуют следующие виды компиляции:
пакетная – использование нескольких модулей в одном и том же задании;
построчная – анализ и интерпретация каждой завершенной грамматической конструкции языка по очереди;
условная – транслируемый текст основывается на тех нормах, что заданы в первоначальной программе.
Трансляция программы – это неотъемлемая часть компиляции. Этот процесс включает в себя такие действия:
анализ лексики;
анализ синтаксиса;
анализ семантики;
оптимизация;
генерация нового кода.
Для осуществления компиляции в программировании используются различные типы программ. Они бывают векторизующими, гибкими, диалоговыми, инкрементальными, интерпретирующими, отладочными, резидентными, самокомпилирующими и универсальными.