Компиляция

Литература

Литературная компиляция более всего отвечает дословному переводу данного термина («кража»). Подобная деятельность заключается в сочинении и составлении неких научных или учебных текстов, основываясь на чужих источниках. При этом не производится их творческая обработка, новое осмысление. В редких случаях компиляцией может являться и литературное произведение, причём как полностью, так и частично.

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

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

Японская анимация. Полнометражный или короткометражный мультипликационный фильм, созданный по мотивам определённого сериала, в жанре «аниме».

Примечания

  1. ГОСТ 19781-83 // Вычислительная техника. Терминология: Справочное пособие. Выпуск 1 / Рецензент канд. техн. наук Ю. П. Селиванов. — М.: Издательство стандартов, 1989. — 168 с. — 55 000 экз. — ISBN 5-7050-0155-X.; см. также ГОСТ 19781-90
  2. Першиков В. И., Савинков В. М. Толковый словарь по информатике / Рецензенты: канд. физ.-мат. наук А. С. Марков и д-р физ.-мат. наук И. В. Поттосин. — М.: Финансы и статистика, 1991. — 543 с. — 50 000 экз. — ISBN 5-279-00367-0.
  3. ↑ СТ ИСО 2382/7-77 // Вычислительная техника. Терминология. Указ. соч.
  4. Борковский А. Б. Англо-русский словарь по программированию и информатике (с толкованиями). — М.: Русский язык, 1990. — 335 с. — 50 050 (доп,) экз. — ISBN 5-200-01169-3.
  5. Толковый словарь по вычислительным системам = Dictionary of Computing / Под ред. В. Иллингуорта и др.: Пер. с англ. А. К. Белоцкого и др.; Под ред. Е. К. Масловского. — М.: Машиностроение, 1990. — 560 с. — 70 000 (доп,) экз. — ISBN 5-217-00617-X (СССР), ISBN 0-19-853913-4 (Великобритания).
  6. Н. А. Криницкий, Г. А. Миронов, Г. Д. Фролов. Программирование / Под ред. М. Р. Шура-Бура. — М.: Государственное издательство физико-математической литературы, 1963.

Программирование

В программирование под компиляцией подразумевается переделка кода программы, с целью придания ему большей универсальности. К примеру, определённая программа была создана на одном из компьютерных языков. В связи с этим возникает проблема с передачей этой программы иным пользователям, которые работают в другой программной среде.

После этого компилированную программу можно устанавливать на любом компьютерном оборудовании, без необходимости загрузки подходящего к ней программного обеспечения. Отсюда возникает понятие «компилируемые компьютерные языки», то есть, те из них, которые легко разлагаются на базовые коды.

На сегодня в информатике выделяется порядка десяти типов программ-компиляторов, каждый из которых действует своим, особым способом – самокомпилируемый, инкрементальный, векторизующий и т.д.

Обозначение понятия

Существуют следующие возможные способы применения слова компиляция:

  1. Аниме. В данной сфере компиляцией обозначают короткометражный или полнометражный фильм, который основан на соответствующем сериале, выполненном в классическом жанре японской анимации
  2. Литература. В этом виде искусства компиляцией называют создание сочинений на основании уже существующих произведений, без дополнительной обработки источников. Также в литературе данным термином обозначают любую работу, выполненную таким образом. Этот вид деятельности существенно отличается от плагиата ввиду того, что в некоторых типах произведений, таких как обзоры, очерки или монографии, авторам необходимо использовать большое количество источников, в том числе и отдельных вставок из них.
  3. Музыка. В данном виде искусства компиляцией называют сборник или же целый альбом, в который входят композиции, выполненные на одну и ту же тему. Это могут быть хит-парады, песни, определенного стиля или эпохи, а также сочинения некоего исполнителя различных лет написания. Отдельно в музыке этим термином именуется методика составления произведения из уже использующихся тем. Иногда компиляцией можно назвать то же, что и попурри.
  4. Программирование. Компиляцией в данной науке принято именовать осуществление трансляции программы, что написана на высокоуровневом языке, в программу, которая создана посредством языка более низкого уровня, но при этом имеющего схожий машинный код. Этот процесс осуществляется при помощи использования специального компилятора.

Вышеперечисленный перечень сфер применения понятия компиляция не является исчерпывающим.

Литература

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

Появление компиляции в литературе объясняется распространением учебно-популяризаторских и просветительских целей. В древние времена отсутствие такого механизма было объяснено сложностью понимания авторства и не имеющимся во всех государствах института авторского права.

Компиляция

Музыка

Основные типичные примеры компиляции в музыке заключаются в следующем:

  1. Сборники самых популярных композиций артиста или же группы. Для привлечения внимания к ним, чаще всего в них включают песню, ранее не выпускавшуюся в других альбомах.
  2. Другие сборники артиста или группы. Это могут быть редкие записи, песни, являющиеся саундтреками к фильмам, и т.д.
  3. Наборы дисков исполнителя. Они могут охватывать либо все творчество исполнителя, либо часть его альбомов.
  4. Тематические сборники нескольких исполнителей. Они могут быть посвящены любви, Новому году, Рождеству и т.д.
  5. Жанровые сборники. Чаще всего их создают исполнители, работающие в жанрах блюз, рок, джаз и др.
  6. Сборники хитов различных артистов. Чаще всего это касается самых популярных песен различных времен или же определенного года.
  7. Рекламные сборники. Эта форма продвижения является одной из наиболее успешных и популярных.
  8. Альбомы продюсеров. В большинстве случаев они помогают в работе большому количеству исполнителей.

Таким образом, компиляция в музыке обрела такое же распространение, как и в литературе.

Программирование

В программировании существуют следующие виды компиляции:

  • пакетная – использование нескольких модулей в одном и том же задании;
  • построчная – анализ и интерпретация каждой завершенной грамматической конструкции языка по очереди;
  • условная – транслируемый текст основывается на тех нормах, что заданы в первоначальной программе.

Трансляция программы – это неотъемлемая часть компиляции. Этот процесс включает в себя такие действия:

  • анализ лексики;
  • анализ синтаксиса;
  • анализ семантики;
  • оптимизация;
  • генерация нового кода.

Для осуществления компиляции в программировании используются различные типы программ. Они бывают векторизующими, гибкими, диалоговыми, инкрементальными, интерпретирующими, отладочными, резидентными, самокомпилирующими и универсальными.

А что-нибудь про сборку PVS-Studio будет?

  • Процессор Intel Core i7-4770 3.4 GHz (8 CPU).
  • ОЗУ 16 Gb RAM DDR3-1333 MHz.
  • Samsung SSD 840 EVO 250 Gb в качестве системного диска.
  • WDC WD20EZRX-00D8PB0 2 Tb под рабочие нужды.
  • сборка на HDD, компиляция в 1 поток, без оптимизаций;
  • сборка на SSD, компиляция в 1 поток, без оптимизаций;
  • сборка на RAMDisk, компиляция в 1 поток, без оптимизаций.

Рисунок 1. Сборка анализатора PVS-Studio, 1 поток, без оптимизаций. Сверху — сборка Debug версии, снизу — Release.

  • компиляция в 1 поток, проект на HDD, SSD и RAMDisk:
    • single compilation units (SCU);
    • предкомпилированный заголовок (PCH);
    • single compilation units + предкомпилированный заголовок (SCU + PCH).

Рисунок 2. Компиляция в 1 поток после оптимизаций.

  • компиляция в 4 потока, проект на HDD, SSD, RAMDisk:
    • single compilation units;
    • предкомпилированный заголовок;
    • single compilation units + предкомпилированный заголовок

Рисунок 3. Компиляция в 4 потока после оптимизаций.

  • компиляция в 8 потоков, проект на HDD, SSD, RAMDisk:
    • single compilation units;
    • предкомпилированный заголовок;
    • single compilation units + предкомпилированный заголовок

Рисунок 4. Компиляция в 8 потоков после оптимизаций.

  • Польза от применения SSD/RAMDisk может колебаться в зависимости от их модели, скорости произвольного доступа, условий запуска, фаз луны и т.д. Хоть они и являются более быстрыми аналогами HDD, конкретно в нашем случае они не дают значительный выигрыш.
  • Предкомпилированные заголовки — очень эффективное средство. Этот способ и ранее использовался в нашем анализаторе, и его использование даже при компиляции в 1 поток давало 7-8 кратное ускорение.
  • При малом числе единых блоков трансляции (SCU) целесообразно не создавать предкомпилированные заголовки. Используйте предкомпилированные заголовки, когда число единых блоков трансляции достаточно велико (> 10).

Раздельная компиляция

Раздельная компиляция (англ. separate compilation) — трансляция частей программы по отдельности с последующим объединением их компоновщиком в единый загрузочный модуль.

Исторически особенностью компилятора, отражённой в его названии (англ. compile — собирать вместе, составлять), являлось то, что он производил как трансляцию, так и компоновку, при этом компилятор мог порождать сразу машинный код. Однако позже, с ростом сложности и размера программ (и увеличением времени, затрачиваемого на перекомпиляцию), возникла необходимость разделять программы на части и выделять библиотеки, которые можно компилировать независимо друг от друга. В процессе трансляции программы сам компилятор или вызываемый компилятором транслятор порождает объектный модуль, содержащий дополнительную информацию, которая потом — в процессе компоновки частей в исполнимый модуль — используется для связывания и разрешения ссылок между частями программы. Раздельная компиляция также позволяет писать разные части исходного текста программы на разных языках программирования.

Появление раздельной компиляции и выделение компоновки как отдельной стадии произошло значительно позже создания компиляторов. В связи с этим вместо термина «компилятор» иногда используют термин «транслятор» как его синоним: либо в старой литературе, либо когда хотят подчеркнуть его способность переводить программу в машинный код (и наоборот, используют термин «компилятор» для подчёркивания способности собирать из многих файлов один). Вот только использование в таком контексте терминов «компилятор» и «транслятор» неправильно. Даже если компилятор выполняет трансляцию программы самостоятельно, поручая компоновку вызываемой внешней программе-компоновщику, такой компилятор не может считаться разновидностью транслятора, — транслятор выполняет трансляцию исходной программы и только. И уж тем более не являются трансляторами компиляторы вроде системной утилиты-компилятра make, имеющейся во всех UNIX-системах. Утилита

Собственно утилита make — яркий пример довольно удачной реализации раздельной компиляции. Работа утилиты make управляется сценарием на интерпретируемым утилитой входном языке, известном как makefile, содержащемся в задаваемом при запуске утилиты входном текстовом файле. Сама утилита не выполняет ни трансляцию ни компоновку, — де-факто утилита make функционирует как диспетчер процесса компиляции, организующий компиляцию программы в соответствии с заданным сценарием. В частности в ходе компиляции целевой программы утилита make вызывает трансляторы с языков программирования транслирующие разные части исходной программы в объектный код, и уже после этого вызывается тот или иной компоновщик, компонующий конечный исполняемый программный или библиотечный программный модуль. При этом разные части программы, оформляемые в виде отдельных файлов исходно текста, могут быть написаны как на одном языке программирования так и на разных языках программирования. В процессе перекомпиляции программы транслируются только измененные части-файлы исходного текста программы, в следствие чего длительность перекомпиляции программы значительно (порой на порядок) сокращается.

Музыка

В музыкальном бизнесе под компиляцией подразумевается некий музыкальный сборник, включающий в себя песни и мелодии на определённую тематику.

Наиболее часто встречающимися музыкальными компиляциями можно назвать сборники разных исполнителей, объединённых одним временем их написания — «Дискотека 80-х (90-2000-х)», или «Хит-парады» от различных студий звукозаписи или радиостанций.

Также компиляцией называется сборник одного исполнителя, составленный из песен, входящих в различные альбомы, или написанные в различные периоды его творческой деятельности.

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

Классическими компиляциями можно назвать следующие типы музыкальных сборников:

  • Сборник лучших хитов определённого исполнителя. Часто выходят в виде коллекционных дисков. Если же певец до сих пор записывает новые вещи, то в подобные сборники могут включаться одно-два новых произведения, чтобы фанаты только ради них приобрели диск целиком.
  • Раритетные сборники одного исполнителя. В них обычно включаются ранее не выходившие версии песен, внестудийные записи, «квартирники» и прочие ценные для фанатов и «музыкальных гурманов» вещи.
  • Полный набор дисков, охватывающий всё творчество определённой группы или певца. Также подобные коллекции могут охватывать обширные по временным рамкам музыкальные произведения определённого жанра – рок-н-ролл, рок, джаз и т.п.
  • Сборники, составленные по какой-либо определённой теме. Например, песни о любви, армейские песни, студенческий фольклор.
  • Хит-парады. Обычно выпускаются в рамках танцевальной поп-музыки, и представляют лучших исполнителей по разным версиям за последний год.  
  • Семплеры. Сборники молодых, но перспективных исполнителей, выпускаемые звукозаписывающими компаниями на деньги продюсерских центров в рекламных целях. Распространяются бесплатно, либо за чисто символическую плату. Выпуск семплеров организуется для «раскрутки» определённого, ещё малоизвестного певца или группы. Семплеры могут предназначаться для широкой публики, или для внутрикорпоративного использования – для продюсеров, редакторов телерадиостанций.

Общие принципы

п.5.1.1.2п.5.2здесьздесь

  • Фаза I — исходный файл поступает на вход препроцессора. Препроцессор делает подстановку содержимого указанных в #include файлов и раскрывает макросы. Соответствует фазам 1 — 4 драфтов C11 и C++17.
  • Фаза II — препроцессированный файл поступает на вход компилятора и преобразуется в объектный. Соответствует фазам 5 — 7 драфта C11 и 5 — 8 драфта C++17.
  • Фаза III — компоновщик связывает объектные файлы и предоставленные статические библиотеки, формируя исполняемую программу. Соответствует фазе 8 и 9 драфтов C11 и C++17 соответственно.

extern

#includeMSBuildMakeCMake

Зависимости при компиляции

#includeinclude-what-you-useReSharper C++CppCleanDoxygen + Graphviz

Foo.hBar.hobj Bar.h

iostreamiosfwdPimpliosfwd

/MPprocessMax -jNN обширного списка сборочных систем-G/MPCMakeLists.txt

/MP

Распределенная компиляция

  • Масштабируемость — подцепляем машину, и теперь она может помогать в сборке.
  • Эффективность распределенной компиляции зависит от производительности сети и каждой машины. Крайне рекомендуется схожая производительность каждой машины.
  • Необходимость в идентичности окружения на всех машинах (версии компиляторов, библиотек и т.д.). Это особенно необходимо, если препроцессирование происходит на всех машинах.
  • IncrediBuild
  • distcc
  • Icecream

Кэш компилятора

  • Для Unix-подобных: ccache (GCC, Clang), cachecc1 (GCC).
  • Для Windows: clcache (MSVC), cclash (MSVC).

CCACHE_PREFIX

Предварительно откомпилированные заголовочные файлы

iostreamсамым первымstdafx.hstdafx.cppstdafx.cpp/Yc«path-to-stdafx.h».pch/Yu«path-to-stdafx.h»/Yc/Yu/Fp«path-to-pch».pch#include «path-to-stdafx.h»/FI«path-to-stdafx.h».gchc-headerc++-header#include-includeздесьcotirestdafx.h

Single Compilation Unit

  • Число компилируемых файлов заметно уменьшается, а значит, и число дисковых операций. Компилятор гораздо меньше обрабатывает одни и те же файлы и инстанцирует шаблоны. Это заметно отражается на времени сборки.
  • Компилятор теперь может выполнять оптимизации, доступные компоновщику (Link time optimization/Whole program optimization).
  • Несколько ухудшается инкрементальная сборка, поскольку изменение одного файла в составе Single Compilation Unit приводит к его перекомпиляции.
  • При применении Unity Build становится невозможным использовать распределенную сборку.
  • Нарушение ODR (совпадение имен макросов, локальных статических функций, глобальных статических переменных, переменных в анонимных пространствах имен).
  • Коллизии имен вследствие применения using namespace.
  • параллельной компиляции нескольких Single Compilation Unit с применением предкомпилированного заголовка;
  • распределенной компиляции нескольких Single Compilation Unit с применением кэша компилятора.

этого

ZapccBoost.Math

Здесь

-fuse-ld=gold

Модульная система в C++

Модулеммодульная единицаинтерфейсом модулятолькоимплементацию модуляCppCon 2017

MSVCGCCClang

admin
Оцените автора
( Пока оценок нет )
Добавить комментарий