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

       

Модель компиляции GNAT и общая согласованная Ада-библиотека


Эта информация может оказаться полезной для тех программистов, которые ранее использовали какой-либо другой Ада-компилятор использующий традиционную модель общей согласованной Ада-библиотеки, как описано в "Руководстве по языку программирования Ада 95".

Система компилятора GNAT не использует традиционную модель общей согласованной Ада-библиотеки.

Вместо этого, GNAT использует множество файлов с исходными текстами совокупность которых играет роль общей библиотеки.

Компиляция Ада-программы не генерирует никакой централизованной информации. Вместо этого в результате компиляции генерируются объектные файлы и ALI-файлы, которые предназначены для обработки редактором связей gnatbind

и компоновщиком gnatlink.

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

В частности:

При указании какого-либо модуля в спецификаторе with

компилятору будет представлена самая свежая версия этого модуля скомпилированного в общую библиотеку.

  • Встроенная подстановка (inline) будет эффективна только в случае когда необходимое тело уже было скомпилировано в общую библиотеку.

  • Компиляция какого-либо нового модуля может сделать устаревшими версии других модулей в общей библиотеке.

    В системе компилятора GNAT, компиляция одного модуля никогда не влияет на компиляцию каких-либо других модулей поскольку компилятор всегда читает только файлы с исходным текстом.

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

    В частности:

    При указании какого-либо модуля в спецификаторе with

    компилятору будет представлена версия этого модуля соответствующий исходный текст которой будет доступен компилятору в процессе текущей компиляции.

  • Встроенная подстановка (inline) требует наличия и доступности для компилятора файлов с соответствующими исходными текстами тел пакетов и/или подпрограмм.


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



  • Компиляция какого-либо модуля никогда не влияет на результаты компиляции других модулей. Редактирование файлов с исходными текстами может сделать устаревшими результаты предыдущих компиляций в случае когда они зависят от модифицированных файлов с исходными текстами.

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

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

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

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


    Содержание раздела