Ада-95. Компилятор GNAT



         

Модели компиляции GNAT и C/C++


Модель компиляции GNAT очень похожа на модель компиляции, которая традиционна для языков программирования C/C++.

Файлы спецификации могут рассматриваться как соответствующие файлы заголовков (*.h) C/C++.

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

Файлы спецификаций компилируются только в случае их непосредственного использования.

Спецификатор with обладает эффектом, который подобен использованию директивы #include

в C/C++.

При этом существует одно примечательное отличие: в Аде можно выполнять раздельную компиляцию спецификации с целью осуществления ее семантической и синтаксической проверки.

Это не всегда возможно для файлов заголовков C/C++ поскольку они являются фрагментами программы, которая использует иные семантические и синтаксические правила.

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

Во-первых, редактор связей осуществляет проверку согласованности отдельных компонентов программы.

В C/C++ такая проверка согласованности различных частей программы, как правило, возлагается на файл управляющий сборкой проекта (Makefile).

Таким образом, редактор связей gnatbind

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

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

Следует заметить, что обработка очередности элаборации присутствует также в C++. Считается, что в C++ она осуществляется автоматически и поэтому о ней, как правило, не упоминается. Однако фактическая очередность элаборации самостоятельных объектных модулей C++ определяется порядком компоновки объектных модулей компоновщиком. Преимуществом подхода C++ является простота, но при этом программист не имеет реального контроля над процессом элаборации.

В результате, в случаях когда редактор связей gnatbind

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




Содержание  Назад  Вперед