GCC - The Complete Reference (537669), страница 6
Текст из файла (страница 6)
Гогггап даже имеет в своем наборе простейших типов данных комплексные числа. И все простейшие типы могут объявляться с очень высокой точностью. Сама структура языка несколько громоздка и представляется довольно устаревшей по сравнению с гибкостью современных языков, но она все же включает объявляемые процедуры, подпрограммы и функции, необходимые для структурного программирования. Познейший стандарт языка Гогггап расширяет эти возможности до уровня вполне современного языка. Глава 1. Введение е ССС 27 Добавление языка )ауа Самым молодым языком, включенным в ОСС, является /ага. Подобно С++,./ага основывается на языке С, однако в нем применен несколько иной подход к синтаксису описания классов. Хотя в этом вопросе С++ более гибок, в /ага применением строго недвусмысленных форм описания исключена свойственная С++ некоторая "неоднозначность" структур конструкторов, деструкторов и наследования.
/ага весьма отличается от других включенных в ОСС языков благодаря особым формам представления объектного кода. Исходный код на языке /ага компилируется в объектный код особого формата, известный как "байтовьяй код", или байт-код (Ьутесодез), который выполняется интерпретатором, известньям под названием Вирмуальная Машина /ага (Зача Чнтца1 Маз)з)пе, .ГУЧ). Все программы, написанные на 2ага, могут выполняться этим способом. Но компилятор ОСС имеет дополнительные опции, которые позволяют вырабатьявать системно-ориентированный выполнимый машиной код (па1)че соде).
При этом подключается расширение верхнего яювня ОСС для языка Заела к существующему общему нижнему уровню ОСС и генерируется объектный код, ориентированный на целевую платформу. В дополнение к этому созвано расширение верхнего уровня, которое способно считывать байтовый код, пригодный для выполнения в Виртуальной Машине )ача, в качестве исходного для последующей выработки из него ориентированного на нужную платформу исполнимого двоичного кода. Добавление языка Ада Новейшее дополнение семейства ОСС вЂ” язык Ас1а.
Он был добавлен как полнофункциональный компилятор "О)ь)АТ Аба" отдельной оригинальной разработки компании "Ада Соге Тесйпо1ой)ез" и бесплатно передан проекту ОСС в октябре 2001 года. Верхний уровень компилятора Ада отличается от других расширений ОСС, он сал1 написан на языке Ада. Это очень удобно, когда вы применяете некоторую своеобразную разновидность компилятора Ада, установленную в вашей системе.
Однако, следует иметь в виду, что при этом на ряде систем требуется применение специальной установочной процедуры. Все остальные подключаемые языки написаны на языке Силн С-ь+, поэтому применение ОСС в таких случаях позволяет достичь почти идеальной переносимости программных работ с одной платформы на другую. Язык Ада разработан специально для задействования разных программистов в разработке больших программ. Когда компилируется любая часть программы на языке Ада, то присходит перекрестная сверка на корректность с другими частями программы.
Правила синтаксиса этого языка требует объявления функций и процедур вместе с их принадлежностью к пакету. При компиляции происходит проверка модулей на соответствие конфигурации указанного пакета. В языках С и С++ используются прототипы лля объявления локально адресуемь1х функций, а в гага для этих целей применянпся соглашения об именах файлов. Однако ни один из подобных языков не применяет настолько строгих способов согласования, как АЫа. 28 Часть !. Свободно распространяемый компилятор Язык СЫ1! покинул семейство 6СС Список частей компилятора бСС Компилятор ОСС состоит из многих компонентов.
В таблице 1.3 представлен список основных частей ОСС, однако вам следует знать о том, что не все из них всегда присутствуют. Некоторые из них специфичны к языку программирования, поэтому, если поддержка для соответствующего им языка у вас не установлена, то вы и не увидите их в вашей системе. Таблица!.3. Различные устанавливаемые части компилятора 6СС часть Оаасавав Версия ясс, устанавливающая С++ в качестве языка пс умолчанию и автоматически подключающая стандартные библиотеки С++ при компоновке. Тс же, что и с++. Действующий компилятор С. Действующий компилятор Сч к На системах, не использующих компоновщик ОНО, необходимо запускать со11еска для генерирования определенного кода инициализации среды окружения (о)сьа! (п!((а((галоп собе), подобно конструкторам и деструкторам в языке С. сс1 сс1р1пв со11ескз Выполнимый сценарий, находящийся в корневом каталоге дерева исходных файлов ВСС.
Используется для установки значений конфигурационных величин и создания компоновочных файлов (гпахеыез), необходимых для компиляции ВСС. Код инициализации и завершения, особый для каждой системы, компилируется в этот файл. Он затем компонуется в каждый исполняемый файл для обеспечения необходимых начальных и завершающих действий. Разделяемая библиотека для М!сгсзсп УУ)пбсыз, которая обеспечивает интерфейс АР! (Арраса(юп Ргссгаплп(пс (и!ег(асе), эмулирующий системные вызовы цы(Х.
сопт1япхе сгьс.о суянхп1.ЕП Драйверная программа, используемая для компиляции программ на языке Гсг(гал. 177 Действующий компилятор Ест(гас. Версия дсс, устанавливающая С++ в качестве языка пс умолчанию и при компоновке автоматически подключающая стандартные библиотеки С++. Тс же, что и с++. 1771 с++ Основная драйверная программа, координирующая выполнение компиляторов и ксмпснсвщиксв ((!пкегэ) для выработки желаемого вывода. Поддерживает большое количество опций. Начиная с версии 3,0, в ОСС прекращена поддержка языка программирования С т!11. К выходу версии 3.1 из ОСС был исключен весь исходный код, связанный с компиляцией этого языка.
Однако компилятор ОСС очень сложен и поддержка им язмка СУД11 имеет долгую историю, так что еще некоторое время можно будет видеть в исходном коде и в документации комментарии, связанные с С)т!1!. Эта книга написана в переходный период отказа от поддержки языка СЫ!1, поэтому и в ней имеются указания на опции компилятора и файловые типы лля этого языка. Глава 1. Введение в 6СС 2~» Оиеевние Драйверная программа, используемая для компиляции программ на языке дача. Действующий компилятор Аса.
Утилита, используемая для связывания (подшивки) пакетов кода на языке Аг(а (Ь|пс1по). Биндер Яс(а. Утилита, используемая для компоновки (1!пыла) программ на языке Аг(а. действующий компилятор Зача. Эта библиотека содержит функциональные блоки кода (гоо1юез), которые могут считаться частью компилятора, т,к. они компонуются практически в каждую исполнимую программу. Это специальные подпрограммы (гообпез), компонуемые в выполнимую программу для выполнения таких коренных задач, как арифметические действия над числами с плавающей точкой и т.п.
Эти функциональные блоки зачастую зависят от платформы. Динамическая библиотека (содержит подпрограммы, компонуемые к программе на этапе ее выполнения, Неа! Т(гле ЫЬгагу, НТ1), содержащая классы ядра Зача. Динамическая библиотека (Нгс), для всех программ на языке ОЬ)есбче-С. Динамическая библиотека (нт( Ь содержащая классы и функции с++, определенные как часть стандарта языка. сват.1 длаевсла елаШяк зс1 11ьзсс 11ьзс1 Ь1ьоЬ3 с 11Ьвкас++ Таблица 1.4, () ог аммные средства, используемые совместно с ВСС Фвветве Оииевние Предоставляя адреса, находящиеся в исполняемом файле, аеех111ве использует отладочную информацию, находящуюся в файле, для преобразования адресов в имя исходного файла и номер строки.
Эта программа входит в пакет Ь(пемз. Программа для поддержки библиотек. Добавляет, удаляет и извлекает файлы иэ архивов. Наиболее часто используется для создания и обслуживания обьектных библиотек, используемых компоновщиком. Входит в пакет Ь|логйз.
Ассемблер цыц. В действительности представляет собой целое семейство ассемблеров, он способен работать с одной из нескольких различных платформ. Вырабатывает сценарии для программного окружения, которые автоматически конфигурируют пакеты исходного кода так, чтобы они могли компилироваться в назначенной версии цм!Х. Программа, воспринимающая сжатые (глапд1ее) компилятором С++ имена. Имена сжимаются при их замещении, перегрузке (очег1оае)пс).
Программа с+ьс11к преобразовывает эти замененные имена в их исходную форму. Входит в пакет Ыпоб(з. ааак111ле ак вв висссояе с++111К Программа-транслятор с языка рог(гав на язык С. В пакет Ыпьб!в не входит. В таблице 1.4 перечислено программное обеспечение, работающее в одной упряжке с осе для обеспечения процесса компиляции. Некоторые совершенно необходимы (такне, как ав и 16), другие при всей своей полезности не строго обязательны. Несмотря на то, что эти средства доступны и включены в наборы стандартных утилит систем (Лч))Х, вы можете многие из них получить в пакете кт)ч)(), называемом Ь(пвб(а. Процедура установки (инсталляции) пакета утилит Ь|пв(1)в подробно описана в главе 2. 30 Часть !. Свободно распространяемый компилятор дссч ддЬ ьз 11ьссс1 э1жсспч сЬ3ссру сьэ Зшпр кзл1!.Ь каскск кеаае11 вск1пдв вск1р чсд И(посев Опяввиме Профилирующее средство, используемое совместно с дрксэ дпя ОпРеделения участков программы, отнимающих наибольшую часть времени выполнения программы.
Отладчик (иеииддег) 6Ы0. Может использоваться для проверки действий и значений величин во время выполнения программы. Система трассировки (грекннга) ошибок, применяемая в 6й0. Встроенная система для поиска ошибок компилятора дсс и другого программного обеспечения 6й0. Это средство обеспечивает наблюдение эа выполнением программы, скомпилированной со встроенным в нее профилирующим кодом.
Вырабатывает профиль для оптимизации, сообщая время выполнения каждой функции. Входит в пакет Ыпоб1з. Редактор компоновочных связей (компоновщик) 6Э)0. Собирает объектные файлы в готовую выполнимую программу. Входит в пакет Ь(пийэ. Сценарий поддержки базовой библиотеки, используемый в компоновочных файлах (гпахеб1ез) для упрощения использования разделяемых динамических библиотек (злагеи 11Ьгапез). Утилита, читающая компоновочный сценарий (гпакеб!е зспр1) для определения частей программы, требующих компиляции и компоновки, и затем выдающая команды, необходимые для таких действий. Она считывает сценарий, называемый компоновочным файлом (жвъв111в или мзке111е), содержащий определения отношений и зависимостей файлов. Преобразовывает переносимый объектный файл в загружаемый модуль системы Ыеээ(аге (г(ебп(аге 1.оабаЫе Моби!а, ЫЬМ).