Модель компиляции GNAT и общая согласованная Ада-библиотека
Эта информация может оказаться полезной для тех программистов, которые ранее использовали какой-либо другой Ада-компилятор использующий традиционную модель общей согласованной Ада-библиотеки, как описано в "Руководстве по языку программирования Ада 95".
Система компилятора GNAT не использует традиционную модель общей согласованной Ада-библиотеки.
Вместо этого, GNAT использует множество файлов с исходными текстами совокупность которых играет роль общей библиотеки.
Компиляция Ада-программы не генерирует никакой централизованной информации. Вместо этого в результате компиляции генерируются объектные файлы и ALI-файлы, которые предназначены для обработки редактором связей gnatbind
и компоновщиком gnatlink.
В традиционной Ада-системе компилятор читает информацию не только из файла с исходным текстом, который компилируется, но и из центральной библиотеки, что подразумевает зависимость текущей компиляции от того, что было скомпилировано ранее.
В частности:
При указании какого-либо модуля в спецификаторе with
компилятору будет представлена самая свежая версия этого модуля скомпилированного в общую библиотеку.
Встроенная подстановка (inline) будет эффективна только в случае когда необходимое тело уже было скомпилировано в общую библиотеку.
Компиляция какого-либо нового модуля может сделать устаревшими версии других модулей в общей библиотеке.
В системе компилятора GNAT, компиляция одного модуля никогда не влияет на компиляцию каких-либо других модулей поскольку компилятор всегда читает только файлы с исходным текстом.
Только изменение файлов с исходными текстами может повлиять на результаты компиляции.
В частности:
При указании какого-либо модуля в спецификаторе with
компилятору будет представлена версия этого модуля соответствующий исходный текст которой будет доступен компилятору в процессе текущей компиляции.
Встроенная подстановка (inline) требует наличия и доступности для компилятора файлов с соответствующими исходными текстами тел пакетов и/или подпрограмм.
Таким образом, встроенная подстановка всегда эффективна, вне зависимости от порядка компиляции различных модулей.
Компиляция какого-либо модуля никогда не влияет на результаты компиляции других модулей. Редактирование файлов с исходными текстами может сделать устаревшими результаты предыдущих компиляций в случае когда они зависят от модифицированных файлов с исходными текстами.
Наиболее существенным результатом таких различий является то, что для GNAT последовательность выполнения компиляции не имеет значения.
Не существует ситуации при которой для компиляции чего-либо необходимо выполнить какую-либо другую, предварительную компиляцию.
То что в традиционной Ада-системе с общей библиотекой проявляется как требование строго определенной последовательности компиляции для GNAT проявляется как простая зависимость файлов с исходными текстами.
Другими словами, существует только набор правил, который указывает какие файлы с исходными текстами должны быть представлены при компиляции файла.