Введение в язык Ада Введение в язык программирования Ada Release 2022-08 Raphaël Amiard and Gustavo A. Hoffmann Aug 22, 2022 CONTENTS: 1 Введение 3 1.1 История . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Адасегодня. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Философия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4 SPARK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 Императивыязыка 5 2.1 Helloworld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Условныйоператор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3 Циклы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3.1 Циклыfor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3.2 Простойцикл . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3.3 Циклыwhile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4 Операторвыбора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.5 Зоныописания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.6 Условныевыражения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.6.1 Условноевыражение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.6.2 Выражениевыбора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3 Подпрограммы 17 3.1 Подпрограммы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.1.1 Вызовыподпрограмм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.1.2 Вложенныеподпрограммы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.1.3 Вызовфункций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2 Видыпараметров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.3 Вызовпроцедуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3.1 Параметрыin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3.2 Параметрыinout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3.3 Параметрыout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3.4 Предварительноеобъявлениеподпрограмм . . . . . . . . . . . . . . . . . . 24 3.4 Переименование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4 Модульноепрограммирование 27 4.1 Пакеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.2 Использованиепакета. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.3 Телопакета. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.4 Дочерниепакеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.4.1 Дочернийпакетотдочернегопакета . . . . . . . . . . . . . . . . . . . . . . . 32 4.4.2 Множественныепотомки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.4.3 Видимость . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.5 Переименование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5 Сильнотипизированныйязык 39 5.1 Чтотакоетип? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.2 Целочисленныетипы-Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 i 5.2.1 Семантикаопераций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.3 Беззнаковыетипы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 5.4 Перечисления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.5 Типысплавающейзапятой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 5.5.1 Основныесвойства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 5.5.2 Точностьтиповсплавающейзапятой . . . . . . . . . . . . . . . . . . . . . . 45 5.5.3 Диапазонзначенийдлятиповсплавающейзапятой . . . . . . . . . . . . . 46 5.6 Строгаятипизация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.7 Производныетипы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5.8 Подтипы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 5.8.1 Подтипывкачествепсевдонимовтипов . . . . . . . . . . . . . . . . . . . . . 54 6 Записи 57 6.1 Объявлениетипазаписи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 6.2 Агрегаты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 6.3 Извлечениекомпонент . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 6.4 Переименование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 7 Массивы 63 7.1 Объявлениетипамассива . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 7.2 Доступпоиндексу . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 7.3 Болеепростыеобъявлениямассива . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 7.4 Атрибутдиапазона . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 7.5 Неограниченныемассивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 7.6 ПредопределенныйтипString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 7.7 Ограничения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 7.8 Возвратнеограниченныхмассивов . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 7.9 Объявлениемассивов(2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 7.10 Отрезкимассива . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 7.11 Переименование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 8 Подробнееотипах 81 8.1 Агрегаты: краткаяинформация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 8.2 Cовмещениеиквалифицированныевыражения . . . . . . . . . . . . . . . . . . . . 82 8.3 Символьныетипы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 9 Ссылочныетипы(указатели) 87 9.1 Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 9.2 Выделение(allocation)памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 9.3 Извлечениепоссылке . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 9.4 Другиеособенности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 9.5 Взаимнорекурсивныетипы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 10 Подробнееозаписях 93 10.1 Типызаписейдинамическиизменяемогоразмера . . . . . . . . . . . . . . . . . . . 93 10.2 Записисдискриминантом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 10.3 Записиcвариантами. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 11 Типысфиксированнойзапятой 99 11.1 Десятичныетипысфиксированнойзапятой . . . . . . . . . . . . . . . . . . . . . . . 99 11.2 Обычныетипысфиксированнойзапятой . . . . . . . . . . . . . . . . . . . . . . . . 101 12 Изоляция 105 12.1 Простейшаяинкапсуляция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 12.2 Абстрактныетипыданных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 12.3 Лимитируемыетипы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 12.4 Дочерниепакетыиизоляция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 13 Настраиваемыемодули 113 ii 13.1 Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 13.2 Объявлениеформальноготипа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 13.3 Объявлениеформальногообъекта. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 13.4 Определениетеланастраиваемогомодуля. . . . . . . . . . . . . . . . . . . . . . . . 114 13.5 Конкретизациянастройки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 13.6 Настраиваемыепакеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 13.7 Формальныеподпрограммы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 13.8 Пример: конкретизацияввода/вывода . . . . . . . . . . . . . . . . . . . . . . . . . . 119 13.9 Пример: АТД . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 13.10Пример: Обмен . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 13.11Пример: Обратныйпорядокэлементов . . . . . . . . . . . . . . . . . . . . . . . . . . 125 13.12Пример: Тестовоеприложение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 14 Исключения 133 14.1 Объявлениеисключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 14.2 Возбуждениеисключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 14.3 Обработкаисключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 14.4 Предопределенныеисключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 15 Управлениезадачами 137 15.1 Задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 15.1.1 Простаязадача . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 15.1.2 Простаясинхронизация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 15.1.3 Операторзадержки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 15.1.4 Синхронизация: рандеву . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 15.1.5 Обрабатывающийцикл . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 15.1.6 Циклическиезадачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 15.2 Защищенныеобъекты. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 15.2.1 Простойобъект . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 15.2.2 Входы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 15.3 Задачныеизащищенныетипы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 15.3.1 Задачныетипы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 15.3.2 Защищенныетипы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 16 Контрактноепроектирование 153 16.1 Пред-ипостусловия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 16.2 Предикаты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 16.3 Инвариантытипа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 17 ВзаимодействиесязыкомC 163 17.1 Многоязычныйпроект . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 17.2 Соглашениеотипах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 17.3 Подпрограммынадругихязыках . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 17.3.1 ВызовподпрограммCизАды . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 17.3.2 ВызовАдаподпрограммизC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 17.4 Внешниепеременные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 17.4.1 ИспользованиеглобальныхпеременныхCвАде . . . . . . . . . . . . . . . 166 17.4.2 ИспользованиепеременныхАдавC . . . . . . . . . . . . . . . . . . . . . . . 168 17.5 Автоматическоесозданиесвязок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 17.5.1 Адаптациясвязок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 18 Объектно-ориентированноепрограммирование 175 18.1 Производныетипы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 18.2 Теговыетипы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 18.3 Надклассовыетипы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 18.4 Операциидиспетчеризации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 18.5 Точечнаянотация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 18.6 Личныеилимитируемыетипыстегами. . . . . . . . . . . . . . . . . . . . . . . . . . 183 18.7 Надклассовыессылочныетипы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 iii 19 Стандартнаябиблиотека: Контейнеры 189 19.1 Векторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 19.1.1 Созданиеэкземпляра . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 19.1.2 Инициализация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 19.1.3 Добавлениеэлементов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 19.1.4 Доступкпервомуипоследнемуэлементам . . . . . . . . . . . . . . . . . . . 192 19.1.5 Итерация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 19.1.6 Поискиизменениеэлементов . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 19.1.7 Вставкаэлементов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 19.1.8 Удалениеэлементов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 19.1.9 Другиеоперации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 19.2 Множества . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 19.2.1 Инициализацияиитерация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 19.2.2 Операциисэлементами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 19.2.3 Другиеоперации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 19.3 Отображениядлянеопределенныхтипов . . . . . . . . . . . . . . . . . . . . . . . . 211 19.3.1 Хэшированныеотображения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 19.3.2 Упорядоченныеотображения . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 19.3.3 Сложность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 20 Стандартнаябиблиотека: Датаивремя 217 20.1 Обработкадатыивремени . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 20.1.1 Задержкасиспользованиемдаты . . . . . . . . . . . . . . . . . . . . . . . . . 218 20.2 Режимреальноговремени . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 20.2.1 Анализпроизводительности . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 21 Стандартнаябиблиотека: Строки 225 21.1 Операциисостроками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 21.2 Ограничениестрокфиксированнойдлины . . . . . . . . . . . . . . . . . . . . . . . . 230 21.3 Ограниченныестроки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 21.4 Неограниченныестроки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 22 Стандартнаябиблиотека: Файлыипотоки 235 22.1 Текстовыйввод-вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 22.2 Последовательныйввод-вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 22.3 Прямойввод-вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 22.4 Потоковыйввод-вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 23 Стандартнаябиблиотека: Numerics 245 23.1 Элементарныефункции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 23.2 Генерацияслучайныхчисел . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 23.3 Комплексныечисла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 23.4 Работасвекторамииматрицами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 24 Приложения 255 24.1 ПриложениеA:Формальныетипынастройки . . . . . . . . . . . . . . . . . . . . . . 255 24.1.1 Неопределенныеверсиитипов . . . . . . . . . . . . . . . . . . . . . . . . . . 257 24.2 ПриложениеB:Контейнеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 iv ВведениевязыкпрограммированияAda Copyright©2018–2022,AdaCore ЭтакнигаопубликованаподлицензиейCCBY-SA,чтоозначает,чтовыможетекопировать, распространять,переделывать,преобразовыватьииспользоватьконтентдлялюбыхцелей, даже коммерческих, при условии, что вы предоставляете соответствующую информацию, предоставляете ссылку на лицензию и указываете, были ли внесены изменения. Если вы делаете ремикс, трансформируете или основываетесь на материале, вы должны распространять свои материалы под той же лицензией, что и оригинал. Вы можете найти подробнуюинформациюолицензиинаэтойстранице1 ЭтоткурснаучитвасосновамязыкапрограммированияAdaипредназначендлятех,ктоуже имеетбазовоепредставлениеометодахпрограммирования. Выузнаете,какприменитьэти методыкпрограммированиювAda. ЭтотдокументбылнаписанРафаэлемАмьяромиГуставоА.ХоффманомсрецензиейРичарда Кеннера. 1http://creativecommons.org/licenses/by-sa/4.0 CONTENTS: 1 ВведениевязыкпрограммированияAda 2 CONTENTS: CHAPTER ONE ВВЕДЕНИЕ 1.1 История В1970-хгодахМинистерствообороныСоединенныхШтатов(МО)столкнулосьссерьезной проблемой резкого увеличения числа языков программирования, заметив, что различные проекты использовали разные и нестандартные диалекты, языковые подмножества и расширения языков. Что бы решить эту проблему, Министерство обороны запустило конкурснаразработкуновогосовременногоязыкапрограммированияобщегоназначения. Победителемвышлопредложение,представленноеЖаномИчбиейизCIIHoneywell-Bull. Первый стандарт языка Ада был выпущен в 1983 году; впоследствии он был пересмотрен иусовершенствованв1995,2005и2012годах,причемкаждыйпересмотрприносилновые полезныефункции. ЭтотучебникпосвященАда2012вцеломинеосвещаетразличияпрошлыхверсийязыка. 1.2 Ада сегодня СегодняАдаширокоиспользуетсявовстраиваемыхсистемахреальноговремени,вомногих изкоторыхкритическиважнанадежность. ХотяАдаможетиспользоватьсявкачествеязыка общегоназначения,онособенноподходитдлянизкоуровневыхприложений: • Встроенные системы с ограниченным объёмом памяти (сборщик мусора не допускается). • Прямоевзаимодействиесоборудованием. • Мягкиеилижесткиесистемыреальноговремени. • Низкоуровневоесистемноепрограммирование. Конкретныеобласти,вкоторыхиспользуетсяАда,включаютаэрокосмическуюиоборонную промышленность, гражданскую авиацию, железную дорогу и многие другие. Эти приложениятребуютвысокойстепенибезопасности: дефектпрограммногообеспеченияне простораздражает,номожетиметьсерьезныепоследствия. ЯзыкАдаобладаетсвойствами благодарякоторыевозможнообнаружитьдефектынараннейстадииразработки—обычно вовремякомпиляцииилиспомощьюинструментовстатическогоанализа. ЯзыкАдатакже можноиспользоватьдлясозданияприложенийвразличныхдругихобластях,такихкак: • Программированиевидеоигр2 • Аудиовреальномвремени3 • Модулиядра4 2https://github.com/АдаDoom3/АдаDoom3 3http://www.electronicdesign.com/embedded-revolution/assessing-ada-language-audio-applications 4http://www.nihamkin.com/tag/kernel.html 3