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

       

Некоторые исторические сведения

Введение
Благодарности
Некоторые исторические сведения
История языка программирования Ада
Цели разработки
Применение языка программирования Ада

Первая программа

"Сюрпризы" переводной терминологии
Первая программа

Библиотека и компилируемые модули
Лексические соглашения
Комментарии
Идентификаторы
Литералы
Зарезервированные слова
Методы Ады: подпрограммы, операции и знаки операций
Инструкции, выражения и элаборация

Директивы компилятора
Скалярные типы данных языка Ада
Введение в систему типов языка Ада
Предопределенный тип Integer
Тип Universal_Integer
Описание целочисленных констант
Тип Root_Integer
Примеры целочисленных описаний
Предопределенные знаки операций для целочисленных типов

Модульные типы
Дополнительные целочисленные типы системы компилятора GNAT
Вещественные типы
Вещественные типы с плавающей точкой, тип Float
Вещественные типы с фиксированной точкой, тип Duration
Вещественные типы с десятичной фиксированной точкой
Типы Universal_Float и Root_Real
Пакеты для численной обработки
Преобразование численных типов
Перечислимые типы

Описание перечислимого типа
Предопределенный логический тип Boolean
Символьные типы Ады (Character, Wide_Character)
Типы и подтипы
Производные типы

Атрибуты
Управляющие структуры
Пустая инструкция
Инструкция присваивания
Блоки
Условные инструкции if
Инструкция выбора сase
Организация циклических вычислений
Простые циклы (loop)

Цикл while
Цикл for
Инструкции exit и exit when
Именованые циклы
Инструкция перехода goto
Массивы (array)
Описание простого массива
Анонимные массивы
Организация доступа к отдельным элементам массива
Агрегаты для массивов

Отрезки (array slices)
Массивы-константы
Атрибуты массивов
Многомерные массивы
Типы неограниченных массивов (unconstrained array), предопределенный тип String
Стандартные операции для массивов
Присваивание
Проверки на равенство и на неравенство
Конкатенация

Сравнение массивов
Логические операции
Динамические массивы
Записи (record)
Описание простой записи
Значения полей записи по-умолчанию
Доступ к полям записи
Агрегаты для записей
Записи-константы

Лимитированные записи
Вложенные структуры
Поля типа массив
Поля записей типа String
Вложенные записи
Дискриминанты
Вариантные записи
Ограниченные записи (constrained records)
Неограниченные записи (unconstrained records)

Другие использования дискриминантов
Подпрограммы
Общие сведения о подпрограммах
Процедуры
Функции
Локальные переменные
Локальные подпрограммы
Раздельная компиляция
Подпрограммы как библиотечные модули
Режимы передачи параметров

Режим "in"
Режим "in out"
Режим "out"
Режим access
Позиционное сопоставление
Именованное сопоставление
Смешивание позиционного и именованного сопоставления
Указание значения параметра по-умолчанию
Совмещение (overloading)
Совмещение подпрограмм (subprogram overloading)

Совмещение знаков операций (operator overloading)
Спецификатор "use type"
Пакеты
Идеология концепции пакетов
Спецификация пакета
Тело пакета
Средства сокрытия деталей реализации внутреннего представления данных
Приватные типы (private types)

Лимитированные приватные типы (limited private types)
Отложенные константы (deferred constants)
Дочерние модули (child units) (Ada)
Расширение существующего пакета
Иерархия модулей как подсистема
Приватные дочерние модули (private child units)
Переименования
Уменьшение длин имен

Переименование знаков операций
Переименование исключений
Переименование компонентов
Переименование отрезка массива
Переименование поля записи
Переименование библиотечного модуля
Настраиваемые модули в языке Ада (generics)
Общие сведения о настраиваемых модулях
Настраиваемые подпрограммы

Настраиваемые пакеты
Дочерние настраиваемые модули
Параметры настройки для настраиваемых модулей
Параметры-типы
Параметры-значения
Параметры-подпрограммы
Преимущества и недостатки настраиваемых модулей
Исключения

Предопределенные исключения
Исключение Constraint_Error
Исключение Numeric_Error
Исключение Program_Error
Исключение Storage_Error
Исключение Tasking_Error
Исключения определяемые пользователем
Описание исключения пользователя

Возбуждение исключений

Возбуждение исключений
Обработка исключений
Обработчики исключений

Распространение исключений
Проблемы с областью видимости при обработке исключений определяемых пользователем
Пакет AdaExceptions
Принципы подавления исключений
Выполнение подавления исключений
Организация ввода/вывода
Текстовый ввод/вывод
Пакет AdaText_IO

Искючения ввода/вывода
Файлы ввода/вывода по умолчанию
Настраиваемые пакеты текстового ввода/вывода
Ввод/вывод двоичных данных
Пакет AdaSequential_IO
Пакет AdaDirect_IO
Потоки ввода/вывода

Параметры командной строки
Переменные окружения программы
Ссылочные типы (указатели)
Ссылочные типы для динамической памяти

Элементарные сведения: описание, создание, инициализация
Структуры данных со ссылками на себя
Освобождение пространства динамической памяти
Пулы динамической памяти
Проблемы обусловленные применением ссылочных типов
Обобщенные ссылочные типы

Правила области видимости для обобщенных ссылочных типов
Ссылочные типы для подпрограмм
Правила области видимости ссылочных типов для подпрограмм
Низкоуровневая средства работы со ссылочными типами и физическими адресами памяти
Тэговые типы (tagged types)
Механизмы наследования
Расширение существующего типа данных
Описание переменных и преобразование типов

Примитивные и не примитивные операции над тэговыми типами Наследование операций
"Пустые" записи (null record) и расширения
Абстрактные типы и подпрограммы
Динамическое связывание и полиморфизм
Надклассовые типы (wide class types)

Проверка типа объекта во время выполнения программы
Динамическая диспетчеризация
Модель механизма диспетчеризации
Вызов переопределенной операции предка
Динамическая передиспетчеризация
Двойная диспетчеризация

Стандартные низкоуровневые средства, пакет AdaTags
Общие сведения
Управление динамическими объектами
Счетчик использования
Блокировка ресурса
Отладка контролируемых типов Некоторые рекомендации

Многозадачность
Типы и объекты задач
Инструкции задержки выполнения (delay statements)
Динамическое создание объектов задач
Принудительное завершение abort
Приоритеты задач
Взаимодействие задач
Концепция рандеву

Описание входов
Простое принятие обращений к входам
Простой вызов входа
Селекция принятия рандеву

Селекция вызова рандеву
Идентификация задач и атрибуты
Разделяемые (общие) переменные
Проблемы механизма рандеву
Защищенные типы и объекты Защищенные подпрограммы
Защищенные входы и барьеры

Особенности программирования защищенных входов и подпрограмм
Атрибуты входов защищенных объектов
Проблема предпочтительного управления
Инструкция перенаправления очереди requeue

Цикл жизни задачи
Создание задачи
Активация задачи
Завершение задачи
Прерывания
Модель прерываний Ады
Защищенные процедуры обработки прерываний
Пакет AdaInterrupts

Приоритеты
Интерфейс с другими языками
Связь с другими языками в Ada
Связь с другими языками в Ada
Директивы компилятора
Интерфейсные пакеты
Взаимодействие с программами написанными на C
Численные и символьные типы
Строки языка C
Примеры организации взаимодействия с C

Низкоуровневые средства для системного программирования
Спецификация внутреннего представления данных
Привязка объекта к фиксированному адресу памяти
Организация доступа к индивидуальным битам

Язык Ада - взгляд "сверху вниз"

Язык Ада - взгляд "сверху вниз"

Абстракция данных
Объектно-ориентированное программирование
Сущность абстрактного типа данных
Структура абстрактного типа данных
Средства Ады для работы с абстрактными типами данных
Пакеты как средство абстракции данных
Сравнение пакетов и классов
Абстракция стека

Абстракция очереди
Еще один пример стека
Создание абстракций из настраиваемых абстракций
Настраиваемый модуль как параметр настройки
Тэговый тип как параметр настройки
Производный тип как параметр настройки

Построение абстракции путем композиции
Абстрагирование общей функциональности
Многоуровневые абстракции
Комбинирование абстракций, множественное наследование
Смешанное наследование
Родственное наследование

Пример программирования посредством расширения
Контекст и видимость
Управление видимостью

Подсистемы
Элаборация
Код элаборации
Проверка порядка элаборации
Управление порядком элаборации

"Сюрпризы" численных типов
Принудительная инициализация
Взаимно рекурсивные типы
Рекомендации по построению абстракций
Тэговые типы - не для всех абстракций!
Контролируемые или не контролируемые?
Никогда не используйте неинициализированные объекты

Создание и удаление объектов
Именование тэговых типов
Именование методов
Опасность наследования
Советы Паскаль-программистам
Описания и их последовательность
Структуры управления
Типы и структуры данных

Совместимость типов и подтипов
Параметры подпрограмм
Пакеты Ады и их соответствие модулям Паскаля
Использование "is" и символа точки с запятой ';'

Система Ада-компилятора GNAT

Доступность средств разработки
Система Ада-компилятора GNAT
Установка GNAT
Установка GNAT на Windows
Установка GNAT на Linux
Установка бинарных файлов от ACT

Установка RPM-пакетов ALT
Общие правила наименования файлов
Использование других имен файлов
Альтернативные схемы именования
Сборка первой программы
Три этапа сборки проекта

Опции компилятора
Проверка ошибок во время выполнения программы
Проверка ошибок в исходном тексте без компиляции
Обнаружение большого количества ошибок при компиляции
Связывание Ада-программы
Опции редактора связей gnatbind
Правила поиска файлов для gnatbind
Компоновщик gnatlink
Опции компоновщика gnatlink

Утилита gnatmake
Опции gnatmake
Указание путей поиска файлов для gnatmake
Управление режимами gnatmake
Примечания для командной строки gnatmake
Примечания для командной строки gnatmake - 2
Связывание и компоновка, утилита gnatbl
Модели компиляции GNAT и C/C++
Модель компиляции GNAT и общая согласованная Ада-библиотека

Директивы конфигурации
Обработка директив конфигурации
Файлы директив конфигурации
Уменьшение затрат времени с помощью утилиты gnatstub
Утилита перекрестных ссылок gnatxref
Оценка "мертвого" кода с помощью утилиты gnatelim
Отслеживание состояния стека и обнаружение утечек памяти во время выполнения программы
Утилита gnatmem
Средства GNATDebug_Pools

Условная компиляция с помощью препроцессора gnatprep
Утилиты gnatpsys и gnatpsta
Произвольное именование файлов, утилита gnatname
Оптимизация проекта
Опции оптимизации компилятора
Средства оптимизации GNAT, используемые в исходном тексте

Оптимизация для специфического типа процессора
GNAT и библиотеки
Создание Ада-библиотеки
Установка Ада-библиотеки
Использование Ада-библиотеки
Перекомпиляция библиотеки времени выполнения GNAT
Средства управления проектами в системе GNAT
Файлы проектов GNAT

Файлы проектов GNAT - 2
Примеры файлов проектов
Различные опции сборки и каталоги выходных результатов для общих исходных файлов
Использование внешних переменных
Импорт других проектов

Расширение существующего проекта
Синтаксис файлов проектов
Базовый синтаксис
Пакеты
Выражения
Строковые типы
Переменные

Атрибуты
Атрибуты как ассоциативные массивы
Конструкция "case"
Исходные, объектные и исполняемые файлы проекта
Каталог объектных файлов
Каталог исполняемых файлов
Каталоги исходных файлов
Имена исходных файлов

Импорт проектов
Расширение проекта
Обращение к внешним переменным в файлах проектов
Пакеты файлов проектов
Переменные импортируемых проектов
Схемы именования файлов
Проекты библиотек

Опции командной строки, относящиеся к файлам проектов
Утилита gnatmake и файлы проектов
Управляющая программа gnat и файлы проектов
Расширенный пример

Диаграмма полного синтаксиса файлов проектов
Построение больших проектов
Использование утилиты GNU make
Общие сведения о GNU make
Использование утилиты gnatmake в файлах Makefile
Автоматическое создание списка каталогов
Генерация опций командной строки для gnatmake
Преодоление ограничения на длину командной строки
Переносимость в UNIX, пакеты GNU Automake и GNU Autoconf
Использование встроенного ассемблера

Пакет SystemMachine_Code
Различия в использовании внешнего и встроенного ассемблера
Особенности реализации компилятора GNAT
Особенности используемого ассемблера
Именование регистров процессора
Порядок следования операндов источника и приемника
Значения констант
Шестнадцатеричные значения
Суффиксы размера
Загрузка содержимого памяти

Косвенная адресация
Инструкции повторения
Использование пакета SystemMachine_Code
Пример элементарной программы
Проверка примера элементарной программы
Поиск ошибок в коде ассемблера
Более реальный пример
Параметры вывода
Ограничения

Использование самостоятельно описываемых типов
Параметры ввода
Встроенная подстановка (inline) для кода на встроенном ассемблере
"Затирание" содержимого регистров
Изменяемые инструкции
Синтаксис GNAT
Директивы компилятора для отладки

Получение расширенной информации компилятора
Использование отладчика GNU GDB
Общие сведения об отладчике GNU GDB

Знакомство с командами GDB

Знакомство с командами GDB
Использование выражений Ады
Вызов подпрограмм определяемых пользователем
Исключения и точки прерывания

Задачи Ады
Отладка настраиваемых модулей
Ограничение возможностей языка
Некорректное завершение работы компилятора
Получение внутренней отладочной информации
Соглашения по наименованию исходных файлов GNAT

Директивы компилятора (pragma)

Директивы компилятора (pragma)
Стандартные директивы Ады
Директивы определенные в реализации компилятора GNAT
Атрибуты типов

Стандартно определенные атрибуты типов
Атрибуты типов определенные в реализации компилятора GNAT
Спецификация пакета System
Спецификация пакета Standard

Пакет AdaText_IO
Пакет AdaText_IOInteger_IO
Пакет AdaText_IOModular_IO
Пакет AdaText_IOFloat_IO
Пакет AdaText_IOFixed_IO
Пакет AdaText_IODecimal_IO
Пакет AdaText_IOEnumeration_IO
Пакет AdaSequential_IO
Пакет AdaDirect_IO
Пакет AdaStreamsStream_IO

Глоссарий
Литература
Содержание раздела