Под символами в этой статье я понимаю именованные сущности программы — функции, переменные и т.п.Основная идея раздельной компиляции — процесс трансляции кода разделяется на два этапа:
Именно поэтому, по одному лишь исходнику нельзя определить, какие файлы он требует для удовлетворения зависимостей. Их нужно отдельно, вручную, указать линковщику. По этой причине появились системы сборки — они занимаются тем, что следят за обновлением файлов, перекомпилируют обновившиеся и указывают линковщику, какие файлы нужно связать. Позже, с появлением IDE появилась необходимость в хранении информации о взаимосвязях файлов — так появились проекты. По сути — просто список исходных файлов, которые нужно откомпилировать и связать, а также информация о настройках компилятора/линковщика/IDE.
Примерно здесь у пришедших с модульных языков начинаются проблемы. Дело в том, что модуль содержит полную информацию о своих взаимосвязях — что и откуда он берет и что предоставляет. Поэтому объявления uses MySuperLib вполне достаточно для присоединения к программе нового модуля. Однако директива #include <MySuperLib.h> — далеко не аналог этого объявления, она лишь включит файл с определениями. А тот факт, что программа использует эту библиотеку, придется отдельно указать линковщику — напрямую, через систему сборки или проект. Отсюда и типичный вопрос — «я подключил gl.h, а оно говорит „символ glBegin не найден“, почему?».
Теперь о том, как осуществляется взаимосвязь между отдельными файлами. Для этого введено понятие внешнего символа — это такой символ, для которого есть определение (оно содержит необходимую информацию о том, как с ним работать — тип переменной, набор аргументов функции и т.п.), но нету собственно реализации символа. Встретив обращение к такому символу, компилятор работает с ним в соответствии с имеющимся определением, а вместо ссылки на него подставляет заметку линковщику — «вставь сюда ссылку на символ такой-то». Если символ в реальности будет иметь определение, отличное от указанного компилятору — трансляция пройдет успешно, но при запуске начнутся лулзы — порча памяти, порча стека и просто неведомые глюки. Именно поэтому символы объявляют в заголовочных файлах — чтобы не было нескольких объявлений, которые могут рассинхронизироваться.
Внешний символ объвляется ключевым словом extern. Именно оно указывает компилятору, что не надо искать реализацию этого символа (либо выделять под него место, если это переменная). Функции являются внешними по умолчанию, так что указывать для них extern — необязательно.
Следущая забавная вещь — множественные реализации символа. Поскольку символ определяется только собственным именем (в отличие от модульных языков, где указывается не только сам символ, но и откуда его брать) — когда линкер встречает несколько одноименных символов, реализованных в разных файлах, он не может определить к какому из них отсылается компилятор и выдает ошибку. Отсюда появились пляски, обеспечивающие уникальность имен — префиксы в С, пространства имен в С++.
Но кроме случайного совпадения имен символов в разных файлах есть еще одна причина появления этой ошибки — реализация символа в заголовочном файле. Если объявить переменную или функцию (полностью, а не только ее заголовок) — она окажется включена во все файлы, куда включен этот заголовочный файл и, так как есть и реализация — то и реализована в них всех. Ну а дальше, обнаружив реализации нескольких одноименных символов линкер выдаст ошибку. Поэтому в заголовочный файл помещают только extern-переменные и заголовки функций (за исключением inline функций — их на место вызова подставляет сам компилятор, и потому должен иметь их реализацию в момент компиляции). Еще забавней получается, если объявить статическую (static — глобальная, но видна только в том файле, где объявлена) переменную в заголовочнике — все скомпилируется без ошибок, но в каждом объектнике будет своя копия переменной, не связанная с другими, хотя подразумевалась одна глобальная переменная. Как результат появляется вопрос «а почему если я гружу текстуры в main.cpp, то все работает, а если в other.cpp — то текстуры не грузятся?».
Вот. Как-то примерно так. Стоит заметить, в С++ сей механизм усложнен и работает несколько иначе, но я недостаточно с этими отличиями знаком. Но, в первом приближении, он работает похоже.
P.S. Жду гнилых помидоров от neiver’а и других знатоков С :)
we.easyelectronics.ru
КОМПИЛЯЦИЯ — (лат., этим. см. пред. слово). Книга или статья, содержание которой взято из других сочинений. Словарь иностранных слов, вошедших в состав русского языка. Чудинов А.Н., 1910. КОМПИЛЯЦИЯ [лат. compilatio ограбление; накопление выписок, собрание… … Словарь иностранных слов русского языка
компиляция — См. сочинение… Словарь русских синонимов и сходных по смыслу выражений. под. ред. Н. Абрамова, М.: Русские словари, 1999. компиляция книга, сочинение; компилирование; компоновка, составление Словарь русских синонимов … Словарь синонимов
КОМПИЛЯЦИЯ — (от латинского compilatio, буквально ограбление), составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, выполненная таким методом … Современная энциклопедия
КОМПИЛЯЦИЯ — (от лат. compilatio букв. ограбление), составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, составленная таким методом … Большой Энциклопедический словарь
Компиляция — в программировании перевод программы с языка высокого уровня в машинный язык. Результатом компиляции является объектный файл с необходимыми внешними ссылками для компоновщика. См. также: Трансляторы Финансовый словарь Финам … Финансовый словарь
Компиляция — (от лат. compilatio, букв. ограбление) составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, составленная таким методом. Политическая наука: Словарь… … Политология. Словарь.
компиляция — и, ж. compilation f. 1. Сочинение, построенное на заимствовании материалов, изложении результатов чужих трудов без самостоятельной разработки источников. БАС 1.Эта книга представляет собой полезную компиляцию новейших марксистских источников для… … Исторический словарь галлицизмов русского языка
Компиляция — (от латинского compilatio, буквально ограбление), составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, выполненная таким методом. … Иллюстрированный энциклопедический словарь
КОМПИЛЯЦИЯ — (от лат. compilatio, букв. ограбление) сочинительство на основе чужих исследований или произведений (литературная К.) без самостоятельной обработки источников; работа, составленная таким методом … Юридический словарь
КОМПИЛЯЦИЯ
dic.academic.ru
Компиля́тор —
Компиляция —
Компилировать — проводить трансляцию машинной программы с проблемно-ориентированного языка на машинно-ориентированный язык.[3]
Большинство компиляторов переводит программу с некоторого высокоуровневого языка программирования в машинный код, который может быть непосредственно выполнен центральным процессором. Как правило, этот код также ориентирован на исполнение в среде конкретной операционной системы, поскольку использует предоставляемые ею возможности (системные вызовы, библиотеки функций). Архитектура (набор программно-аппаратных средств), для которой производится компиляция, называется целевой машиной.
Некоторые компиляторы (например, низкоуровневом языке. Такой язык — байт-код — также можно считать языком машинных команд, поскольку он подлежит интерпретации виртуальной машиной. Например, для языка Java это JVM (язык виртуальной машины Java), или так называемый байт-код Java (вслед за ним все промежуточные низкоуровневые языки стали называть байт-кодами). Для языков программирования на платформе .NET Framework (C#, Managed C++, Visual Basic .NET и другие) — это MSIL (Microsoft Intermediate Language).
Программа на байт-коде подлежит интерпретации виртуальной машиной, либо ещё одной компиляции уже в машинный код непосредственно перед исполнением. Последнее называется «Just-In-Time компиляция» (MSIL-код компилируется в код целевой машины также JIT-компилятором, а библиотеки .NET Framework компилируются заранее).
Для каждой целевой машины (Apple и т. д.) и каждой операционной системы или семейства операционных систем, работающих на целевой машине, требуется написание своего компилятора. Существуют также так называемые кросс-компиляторы, позволяющие на одной машине и в среде одной ОС получать код, предназначенный для выполнения на другой целевой машине и/или в среде другой ОС. Кроме того, компиляторы могут быть оптимизированы под разные типы процессоров из одного семейства (путём использования специфичных для этих процессоров инструкций). Например, код, скомпилированный под процессоры семейства MMX, SSE2.
Также существуют компиляторы, переводящие программу с языка высокого уровня на язык ассемблера.
Существуют программы, которые решают обратную задачу — перевод программы с низкоуровневого языка на высокоуровневый. Этот процесс называют декомпиляцией, а программы — декомпиляторами. Но поскольку компиляция — это процесс с потерями, точно восстановить исходный код, скажем, на C++, в общем случае невозможно. Более эффективно декомпилируются программы в байт-кодах — например, существует довольно надёжный декомпилятор для Flash. Сходным процессом является дизассемблирование машинного кода в код на языке ассемблера, который всегда выполняется успешно. Связано это с тем, что между кодами машинных команд и командами ассемблера имеется практически однозначное соответствие.
Процесс компиляции состоит из следующих этапов:
В конкретных реализациях компиляторов эти этапы могут быть раздельны или совмещены в том или ином виде.
Важной исторической особенностью компилятора, отражённой в его названии (англ. compile — собирать вместе, составлять), являлось то, что он мог производить и компоновку (то есть содержал две части — транслятор и компоновщик). Это связано с тем, что раздельная компиляция и компоновка как отдельная стадия сборки выделились значительно позже появления компиляторов, и многие популярные компиляторы (например, GCC) до сих пор физически объединены со своими компоновщиками. В связи с этим, вместо термина «компилятор» иногда используют термин «транслятор» как его синоним: либо в старой литературе, либо когда хотят подчеркнуть его способность переводить программу в машинный код (и наоборот, используют термин «компилятор» для подчёркивания способности собирать из многих файлов один).
Wikimedia Foundation. 2010.
dic.academic.ru
Компиляция — Компиляция: В Викисловаре есть статья «компиляция» Компиляция (литература) (лат. … Википедия
КОМПИЛЯЦИЯ — (лат., этим. см. пред. слово). Книга или статья, содержание которой взято из других сочинений. Словарь иностранных слов, вошедших в состав русского языка. Чудинов А.Н., 1910. КОМПИЛЯЦИЯ [лат. compilatio ограбление; накопление выписок, собрание… … Словарь иностранных слов русского языка
компиляция — См. сочинение… Словарь русских синонимов и сходных по смыслу выражений. под. ред. Н. Абрамова, М.: Русские словари, 1999. компиляция книга, сочинение; компилирование; компоновка, составление Словарь русских синонимов … Словарь синонимов
КОМПИЛЯЦИЯ — (от латинского compilatio, буквально ограбление), составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, выполненная таким методом … Современная энциклопедия
КОМПИЛЯЦИЯ — (от лат. compilatio букв. ограбление), составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, составленная таким методом … Большой Энциклопедический словарь
Компиляция — в программировании перевод программы с языка высокого уровня в машинный язык. Результатом компиляции является объектный файл с необходимыми внешними ссылками для компоновщика. См. также: Трансляторы Финансовый словарь Финам … Финансовый словарь
Компиляция — (от лат. compilatio, букв. ограбление) составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, составленная таким методом. Политическая наука: Словарь… … Политология. Словарь.
компиляция — и, ж. compilation f. 1. Сочинение, построенное на заимствовании материалов, изложении результатов чужих трудов без самостоятельной разработки источников. БАС 1.Эта книга представляет собой полезную компиляцию новейших марксистских источников для… … Исторический словарь галлицизмов русского языка
Компиляция — (от латинского compilatio, буквально ограбление), составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, выполненная таким методом. … Иллюстрированный энциклопедический словарь
КОМПИЛЯЦИЯ — (от лат. compilatio, букв. ограбление) сочинительство на основе чужих исследований или произведений (литературная К.) без самостоятельной обработки источников; работа, составленная таким методом … Юридический словарь
dic.academic.ru
Компиляция — Компиляция: В Викисловаре есть статья «компиляция» Компиляция (литература) (лат. … Википедия
КОМПИЛЯЦИЯ — (лат., этим. см. пред. слово). Книга или статья, содержание которой взято из других сочинений. Словарь иностранных слов, вошедших в состав русского языка. Чудинов А.Н., 1910. КОМПИЛЯЦИЯ [лат. compilatio ограбление; накопление выписок, собрание… … Словарь иностранных слов русского языка
компиляция — См. сочинение… Словарь русских синонимов и сходных по смыслу выражений. под. ред. Н. Абрамова, М.: Русские словари, 1999. компиляция книга, сочинение; компилирование; компоновка, составление Словарь русских синонимов … Словарь синонимов
КОМПИЛЯЦИЯ — (от латинского compilatio, буквально ограбление), составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, выполненная таким методом … Современная энциклопедия
КОМПИЛЯЦИЯ — (от лат. compilatio букв. ограбление), составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, составленная таким методом … Большой Энциклопедический словарь
Компиляция — в программировании перевод программы с языка высокого уровня в машинный язык. Результатом компиляции является объектный файл с необходимыми внешними ссылками для компоновщика. См. также: Трансляторы Финансовый словарь Финам … Финансовый словарь
Компиляция — (от лат. compilatio, букв. ограбление) составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, составленная таким методом. Политическая наука: Словарь… … Политология. Словарь.
компиляция — и, ж. compilation f. 1. Сочинение, построенное на заимствовании материалов, изложении результатов чужих трудов без самостоятельной разработки источников. БАС 1.Эта книга представляет собой полезную компиляцию новейших марксистских источников для… … Исторический словарь галлицизмов русского языка
Компиляция — (от латинского compilatio, буквально ограбление), составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, выполненная таким методом. … Иллюстрированный энциклопедический словарь
КОМПИЛЯЦИЯ — КОМПИЛЯЦИЯ, компиляции, жен. (лат. compilatio ограбление) (книжн.). 1. Сочинение (преим. научное), представляющее собой сводку и изложение уже обнародованных трудов, без самостоятельной обработки источников. Эта книга представляет собой полезную… … Толковый словарь Ушакова
dic.academic.ru
Компиляция — Компиляция: В Викисловаре есть статья «компиляция» Компиляция (литература) (лат. … Википедия
КОМПИЛЯЦИЯ — (лат., этим. см. пред. слово). Книга или статья, содержание которой взято из других сочинений. Словарь иностранных слов, вошедших в состав русского языка. Чудинов А.Н., 1910. КОМПИЛЯЦИЯ [лат. compilatio ограбление; накопление выписок, собрание… … Словарь иностранных слов русского языка
компиляция — См. сочинение… Словарь русских синонимов и сходных по смыслу выражений. под. ред. Н. Абрамова, М.: Русские словари, 1999. компиляция книга, сочинение; компилирование; компоновка, составление Словарь русских синонимов … Словарь синонимов
КОМПИЛЯЦИЯ — (от лат. compilatio букв. ограбление), составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, составленная таким методом … Большой Энциклопедический словарь
Компиляция — в программировании перевод программы с языка высокого уровня в машинный язык. Результатом компиляции является объектный файл с необходимыми внешними ссылками для компоновщика. См. также: Трансляторы Финансовый словарь Финам … Финансовый словарь
Компиляция — (от лат. compilatio, букв. ограбление) составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, составленная таким методом. Политическая наука: Словарь… … Политология. Словарь.
компиляция — и, ж. compilation f. 1. Сочинение, построенное на заимствовании материалов, изложении результатов чужих трудов без самостоятельной разработки источников. БАС 1.Эта книга представляет собой полезную компиляцию новейших марксистских источников для… … Исторический словарь галлицизмов русского языка
Компиляция — (от латинского compilatio, буквально ограбление), составление сочинений на основе чужих исследований или чужих произведений (литературная компиляция) без самостоятельной обработки источников; работа, выполненная таким методом. … Иллюстрированный энциклопедический словарь
КОМПИЛЯЦИЯ — (от лат. compilatio, букв. ограбление) сочинительство на основе чужих исследований или произведений (литературная К.) без самостоятельной обработки источников; работа, составленная таким методом … Юридический словарь
КОМПИЛЯЦИЯ — КОМПИЛЯЦИЯ, компиляции, жен. (лат. compilatio ограбление) (книжн.). 1. Сочинение (преим. научное), представляющее собой сводку и изложение уже обнародованных трудов, без самостоятельной обработки источников. Эта книга представляет собой полезную… … Толковый словарь Ушакова
dic.academic.ru
В Википедии есть страница «компиляция». |
падеж | ед. ч. | мн. ч. |
---|---|---|
Им. | компиля́ция | компиля́ции |
Р. | компиля́ции | компиля́ций |
Д. | компиля́ции | компиля́циям |
В. | компиля́цию | компиля́ции |
Тв. | компиля́цией компиля́циею | компиля́циями |
Пр. | компиля́ции | компиля́циях |
ком-пи-ля́-ци·я
Существительное, неодушевлённое, женский род, 1-е склонение (тип склонения 7a по классификации А. А. Зализняка).
Корень: -компил-; суффикс: -яциj; окончание: -я [Тихонов, 1996].
ru.wiktionary.org