Copyright (C) А.Гавва V-0.3w июнь 2003
Содержание
Благодарности
Некоторые исторические сведения
История языка программирования Ада
Цели разработки
Применение языка программирования Ада
Часть 1. Обзор средств языка Ада.
1.1 "Сюрпризы" переводной терминологии
1.2 Первая программа
1.3 Библиотека и компилируемые модули
1.4 Лексические соглашения
1.4.1 Комментарии
1.5 Методы Ады: подпрограммы, операции и знаки операций
1.4.2 Идентификаторы
1.4.3 Литералы
1.4.4 Зарезервированные слова
1.6 Инструкции, выражения и элаборация
1.7 Директивы компилятора
2. Скалярные типы данных языка Ада
2.1 Введение в систему типов языка Ада
2.2 Целочисленные типы
2.2.1 Предопределенный тип Integer
2.3 Вещественные типы
2.2.2 Тип Universal_Integer
2.2.3 Описание целочисленных констант
2.2.4 Тип Root_Integer
2.2.5 Примеры целочисленных описаний
2.2.6 Предопределенные знаки операций для целочисленных типов
2.2.7 Модульные типы
2.2.8 Дополнительные целочисленные типы системы компилятора GNAT
2.3.1 Вещественные типы с плавающей точкой, тип Float
2.4 Преобразование численных типов
2.3.2 Вещественные типы с фиксированной точкой, тип Duration
2.3.3 Вещественные типы с десятичной фиксированной точкой
2.3.4 Типы Universal_Float и Root_Float
2.3.5 Пакеты для численной обработки
2.5 Перечислимые типы
2.5.1 Описание перечислимого типа
2.6 Типы и подтипы
2.5.2 Предопределенный логический тип Boolean
2.5.3 Символьные типы Ады (Character, Wide_Character)
2.7 Производные типы
2.8 Атрибуты
3.1 Пустая инструкция
3.2 Инструкция присваивания
3.3 Блоки
3.4 Условные инструкции if
3.5 Инструкция выбора сase
3.6 Организация циклических вычислений
3.6.1 Простые циклы (loop)
3.7 Инструкция перехода goto
3.6.2 Цикл while
3.6.3 Цикл for
3.6.4 Инструкции exit и exit when
3.6.5 Именованые циклы
4.1 Простые массивы
4.1.1 Описание простого массива
4.2 Многомерные массивы
4.1.2 Анонимные массивы
4.1.3 Организация доступа к отдельным элементам массива
4.1.4 Агрегаты для массивов
4.1.5 Отрезки (array slices)
4.1.6 Массивы-константы
4.1.7 Атрибуты массивов
4.3 Типы неограниченных массивов (unconstrained array),
предопределенный тип String
4.4 Стандартные операции для массивов
4.4.1 Присваивание
4.5 Динамические массивы
4.4.2 Проверки на равенство и на неравенство
4.4.3 Конкатенация
4.4.4 Сравнение массивов
4.4.5 Логические операции
5.1 Простые записи
5.1.1 Описание простой записи
5.2 Вложенные структуры
5.1.2 Значения полей записи по-умолчанию
5.1.3 Доступ к полям записи
5.1.4 Агрегаты для записей
5.1.5 Записи-константы
5.1.6 Лимитированные записи
5.2.1 Поля типа массив
5.3 Дискриминанты
5.2.2 Поля записей типа String
5.2.3 Вложенные записи
5.3.1 Вариантные записи
5.3.2 Ограниченные записи (constrained records)
5.3.3 Неограниченные записи (unconstrained records)
5.3.4 Другие использования дискриминантов
6.1 Общие сведения о подпрограммах
6.1.1 Процедуры
6.2 Режимы передачи параметров
6.1.2 Функции
6.1.3 Локальные переменные
6.1.4 Локальные подпрограммы
6.1.5 Раздельная компиляция
6.1.6 Подпрограммы как библиотечные модули
6.2.1 Режим in
6.3 Сопоставление формальных и фактических параметров
6.2.2 Режим in out
6.2.3 Режим out
6.2.4 Режим access
6.3.1 Позиционное сопоставление
6.4 Указание значения параметра по-умолчанию
6.3.2 Именованное сопоставление
6.3.3 Смешивание позиционного и именованного сопоставления
6.5 Совмещение (overloading)
6.5.1 Совмещение подпрограмм (subprogram overloading)
6.5.2 Совмещение знаков операций (operator overloading)
6.5.3 Спецификатор use type
7.1 Общие сведения о пакетах Ады
7.1.1 Идеология концепции пакетов
7.2 Средства сокрытия деталей реализации внутреннего представления данных
7.1.2 Спецификация пакета
7.1.3 Тело пакета
7.2.1 Приватные типы (private types)
7.3 Дочерние модули (child units) (Ada95)
7.2.2 Лимитированные приватные типы (limited private types)
7.2.3 Отложенные константы (deferred constants)
7.3.1 Расширение существующего пакета
7.3.2 Иерархия модулей как подсистема
7.3.3 Приватные дочерние модули (private child units)
8.1 Уменьшение длин имен
8.2 Переименование знаков операций
8.3 Переименование исключений
8.4 Переименование компонентов
8.4.1 Переименование отрезка массива
8.5 Переименование библиотечного модуля
8.4.2 Переименование поля записи
9. Настраиваемые модули в языке Ада (generics)
9.1 Общие сведения о настраиваемых модулях
9.1.1 Настраиваемые подпрограммы
9.2 Параметры настройки для настраиваемых модулей
9.1.2 Настраиваемые пакеты
9.1.3 Дочерние настраиваемые модули
9.2.1 Параметры-типы
9.4 Преимущества и недостатки настраиваемых модулей
9.2.2 Параметры-значения
9.2.3 Параметры-подпрограммы
10.1 Предопределенные исключения
10.1.1 Исключение Constraint_Error
10.2 Исключения определяемые пользователем
10.1.2 Исключение Numeric_Error
10.1.3 Исключение Program_Error
10.1.4 Исключение Storage_Error
10.1.5 Исключение Tasking_Error
10.2.1 Описание исключения пользователя
10.3 Обработка исключений
10.2.2 Возбуждение исключений
10.3.1 Описание обработчиков исключений
10.4 Подавление исключений
10.3.2 Распространение исключений
10.3.3 Проблемы с областью видимости
при обработке исключений
определяемых пользователем
10.3.4 Пакет Ada.Exceptions
10.4.1 Принцип подавления исключений
10.4.2 Выполнение подавления исключений
11.1 Текстовый ввод/вывод
11.1.1 Пакет Ada.Text_IO
11.2 Ввод/вывод двоичных данных
11.1.2 Искючения ввода/вывода
11.1.3 Файлы ввода/вывода по-умолчанию
11.1.4 Настраиваемые пакеты текстового ввода/вывода
11.2.1 Пакет Ada.Sequential_IO
11.3 Потоки ввода/вывода
11.2.2 Пакет Ada.Direct_IO
11.4 Взаимодействие с командной строкой и окружением
11.4.1 Параметры командной строки
11.4.2 Переменные окружения программы
12. Ссылочные типы (указатели)
12.1 Ссылочные типы для динамической памяти
12.1.1 Элементарные сведения: описание, создание, инициализация
12.2 Обобщенные ссылочные типы
12.1.2 Структуры данных со ссылками на себя
12.1.3 Освобождение пространства динамической памяти
12.1.4 Пулы динамической памяти
12.1.5 Проблемы обусловленные применением ссылочных типов
12.2.1 Правила области видимости для обобщенных ссылочных типов
12.3 Ссылочные типы для подпрограмм
12.3.1 Правила области видимости ссылочных типов для подпрограмм
12.4 Низкоуровневая средства работы со ссылочными типами
и физическими адресами памяти
13. Тэговые типы (tagged types)
13.1 Механизмы наследования
13.1.1 Расширение существующего типа данных
13.2 Динамическое связывание и полиморфизм
13.1.2 Описание переменных и преобразование типов
13.1.3 Примитивные и не примитивные операции над тэговыми типами
Наследование операций
13.1.4 "Пустые" записи (null record) и расширения
13.1.5 Абстрактные типы и подпрограммы
13.2.1 Надклассовые типы (wide class types)
13.3 Стандартные низкоуровневые средства, пакет Ada.Tags
13.2.2 Проверка типа объекта во время выполнения программы
13.2.3 Динамическая диспетчеризация
13.2.4 Модель механизма диспетчеризации
13.2.5 Вызов переопределенной операции предка
13.2.6 Динамическая передиспетчеризация
13.2.7 Двойная диспетчеризация
14. Контролируемые типы (controlled types)
14.1 Общие сведения
14.2 Управление динамическими объектами
14.3 Счетчик использования
14.4 Блокировка ресурса
14.5 Отладка контролируемых типов
Некоторые рекомендации
15.1 Задачи
15.1.1 Типы и объекты задач
15.2 Взаимодействие задач
15.1.2 Инструкции задержки выполнения (delays)
15.1.3 Динамическое создание объектов задач
15.1.4 Принудительное завершение abort
15.1.5 Приоритеты задач
15.2.1 Концепция рандеву
15.3 Зщищенные модули (protected units)
15.2.2 Описание входов
15.2.3 Простое принятие обращений к входам
15.2.4 Простой вызов входа
15.2.5 Селекция принятия рандеву
15.2.6 Селекция вызова рандеву
15.2.7 Идентификация задач и атрибуты
15.2.8 Разделяемые (общие) переменные
15.3.1 Проблемы механизма рандеву
15.4 Перенаправление requeue
15.3.2 Защищенные типы и объекты
Защищенные подпрограммы
15.3.3 Защищенные входы и барьеры
15.3.4 Особенности программирования защищенных входов и подпрограмм
15.3.5 Атрибуты входов защищенных объектов
15.4.1 Проблема предпочтительного управления
15.5 Цикл жизни задачи
15.4.2 Инструкция перенаправления в очередь requeue
15.5.1 Создание задачи
15.6 Прерывания
15.5.2 Активация задачи
15.5.3 Завершение задачи
15.6.1 Модель прерываний Ады
15.6.2 Защищенные процедуры обработки прерываний
15.6.3 Пакет Ada.Interrupts
15.6.4 Приоритеты
16. Интерфейс с другими языками
16.1 Связь с другими языками в Ada83
16.2 Связь с другими языками в Ada95
16.2.1 Директивы компилятора
16.3 Взаимодействие с программами написанными на C
16.2.2 Интерфейсные пакеты
16.3.1 Численные и символьные типы
16.3.2 Строки языка C
16.3.3 Примеры организации взаимодействия с C
17. Низкоуровневые средства для системного программирования
17.1 Спецификация внутреннего представления данных
17.2 Привязка объекта к фиксированному адресу памяти
17.3 Организация доступа к индивидуальным битам
Часть 2. Идеология и рекомендации
1. Язык Ада - взгляд "сверху вниз"
2.1 Объектно-ориентированное программирование
2.2 Сущность абстрактного типа данных
2.2.1 Структура абстрактного типа данных
2.3 Пакеты в языке Ада
2.2.2 Средства Ады для работы с абстрактными типами данных
2.3.1 Пакеты как средство абстракции данных
2.3.2 Сравнение пакетов и классов
3. Общие приемы программирования
3.1 Абстракция стека
3.2 Приватное наследование
3.2.1 Абстракция очереди
3.3 Использование настраиваемых модулей
3.2.2 Еще один пример стека
3.3.1 Создание абстракций из настраиваемых абстракций
3.4 Построение абстракции путем композиции
3.3.2 Настраиваемый модуль как параметр настройки
3.3.3 Тэговый тип как параметр настройки
3.3.4 Производный тип как параметр настройки
3.5 Абстрагирование общей функциональности
3.6 Многоуровневые абстракции
3.7 Комбинирование абстракций, множественное наследование
3.7.1 Смешанное наследование
3.8 Пример программирования посредством расширения
3.7.2 Родственное наследование
4. Контекст, видимость и подсистемы
4.1 Контекст и видимость
4.2 Управление видимостью
4.3 Подсистемы
5.1 Код элаборации
5.2 Проверка порядка элаборации
5.3 Управление порядком элаборации
6.1 "Сюрпризы" численных типов
6.2 Принудительная инициализация
6.3 Взаимно рекурсивные типы
6.4 Рекомендации по построению абстракций
6.4.1 Тэговые типы - не для всех абстракций!
6.5 Советы Паскаль-программистам
6.4.2 Контролируемые или не контролируемые?
6.4.3 Никогда не используйте неинициализированные объекты
6.4.4 Создание и удаление объектов
6.4.5 Именование тэговых типов
6.4.6 Именование методов
6.4.7 Опасность наследования
6.5.1 Описания и их последовательность
6.5.2 Структуры управления
6.5.3 Типы и структуры данных
6.5.4 Совместимость типов и подтипов
6.5.5 Параметры подпрограмм
6.5.6 Пакеты Ады и их соответствие модулям Паскаля
6.5.7 Использование "is"
и символа точки с запятой ';'
Часть 3. Средства разработки
1.1 Доступность средств разработки
1.2 Система Ада-компилятора GNAT
2.1 Установка GNAT на Windows
2.2 Установка GNAT на Linux
2.2.1 Установка бинарных файлов от ACT
2.2.2 Установка RPM-пакетов ALT
3. От исходного текста к загружаемому файлу программы
3.1 Соглашения GNAT по наименованиям файлов
3.1.1 Общие правила наименования файлов
3.2 Сборка первой программы
3.1.2 Использование других имен файлов
3.3 Три этапа сборки проекта
3.3.1 Опции компилятора
3.3.1.1 Проверка ошибок во время выполнения программы
3.3.2 Связывание Ада-программы
3.3.1.2 Проверка ошибок в исходном тексте без компиляции
3.3.1.3 Обнаружение большого количества ошибок при компиляции
3.3.2.1 Опции редактора связей gnatbind
3.3.3 Компоновка проекта
3.3.2.2 Правила поиска файлов для gnatbind
3.3.3.1 Компоновщик gnatlink
3.3.4 Утилита gnatmake
3.3.3.2 Опции компоновщика gnatlink
3.3.4.1 Опции gnatmake
3.3.5 Связывание и линковка, утилита gnatbl
3.3.4.2 Указание путей поиска файлов для gnatmake
3.3.4.3 Управление режимами gnatmake
3.3.4.4 Примечания для командной строки gnatmake
4.1 Уменьшение затрат времени с помощью утилиты gnatstub
4.2 Утилита перекрестных ссылок gnatxref
4.3 Оценка "мертвого" кода с помощью утилиты gnatelim
4.4 Отслеживание состояния стека и обнаружение утечек памяти
во время выполнения программы
4.4.1 Утилита gnatmem
4.5 Условная компиляция с помощью препроцессора gnatprep
4.4.2 Средства GNAT.Debug_Pools
4.6 Утилиты gnatpsys и gnatpsta
5.1 Опции оптимизации компилятора
5.2 Средства оптимизации GNAT, используемые в исходном тексте
5.3 Оптимизация для специфического типа процессора
6.1 Создание Ада-библиотеки
6.2 Установка Ада-библиотеки
6.3 Использование Ада-библиотеки
6.4 Перекомпиляция библиотеки времени выполнения GNAT
7. Построение больших проектов
7.1 Использование утилиты GNU make
7.1.1 Общие сведения о GNU make
7.2 Переносимость в UNIX, пакеты GNU Automake и GNU Autoconf
7.1.2 Использование утилиты gnatmake в файлах Makefile
7.1.3 Автоматическое создание списка каталогов
7.1.4 Генерация опций командной строки для gnatmake
7.1.5 Преодоление ограничения на длину командной строки
8. Использование встроенного ассемблера
8.1 Общие сведения
8.1.1 Пакет System.Machine_Code
8.2 Особенности используемого ассемблера
8.1.2 Различия в использовании внешнего и встроенного ассемблера
8.1.3 Особенности реализации компилятора GNAT
8.2.1 Именование регистров процессора
8.3 Использование пакета System.Machine_Code
8.2.2 Порядок следования операндов источника и приемника
8.2.3 Значения констант
8.2.4 Шестнадцатеричные значения
8.2.5 Суффиксы размера
8.2.6 Загрузка содержимого памяти
8.2.7 Косвенная адресация
8.2.8 Инструкции повторения
8.3.1 Пример элементарной программы
8.4 Синтаксис GNAT
8.3.2 Проверка примера элементарной программы
8.3.3 Поиск ошибок в коде ассемблера
8.3.4 Более реальный пример
8.3.5 Параметры вывода
8.3.6 Ограничения
8.3.7 Использование самостоятельно описываемых типов
8.3.8 Параметры ввода
8.3.9 Встроенная подстановка (inline)
для кода на встроенном ассемблере
8.3.10 "Затирание" содержимого регистров
8.3.11 Изменяемые инструкции
9.1 Директивы компилятора для отладки
9.2 Получение расширенной информации компилятора
9.3 Использование отладчика GNU GDB
9.3.1 Общие сведения об отладчике GNU GDB
9.4 Ограничение возможностей языка
9.3.2 Знакомство с командами GDB
9.3.3 Использование выражений Ады
9.3.4 Вызов подпрограмм определяемых пользователем
9.3.5 Исключения и точки прерывания
9.3.6 Задачи Ады
9.3.7 Отладка настраиваемых модулей
Часть 4. Приложения
1.1 Стандартные директивы Ады
1.2 Директивы определенные в реализации компилятора GNAT
2.1 Стандартно определенные атрибуты типов
2.2 Атрибуты типов определенные в реализации компилятора GNAT
3. Спецификация пакета System.
4. Спецификация пакета Standard.
5. Спецификации пакетов ввода/вывода.
5.1 Пакеты текстового ввода/вывода
5.1.1 Пакет Ada.Text_IO
5.2 Пакет Ada.Sequential_IO
5.1.2 Пакет Ada.Text_IO.Integer_IO
5.1.3 Пакет Ada.Text_IO.Modular_IO
5.1.4 Пакет Ada.Text_IO.Float_IO
5.1.5 Пакет Ada.Text_IO.Fixed_IO
5.1.6 Пакет Ada.Text_IO.Decimal_IO
5.1.7 Пакет Ada.Text_IO.Enumeration_IO
5.3 Пакет Ada.Direct_IO
5.4 Пакет Ada.Streams.Stream_IO
7. Источники дополнительной информации.
Copyright (C) А.Гавва V-0.3w июнь 2003