Руководство по Ada (Ada 2022)
Предисловие
Данный документ является Руководством по Ada. Международный стандарт для языка программирования Ada — ISO/IEC 8652:2023(E). Международный стандарт получен из Руководства по Ada с различными ненормативными изменениями. В частности, Международный стандарт использует другую нумерацию разделов, опускает номера пунктов, исключает раздел «Благодарности» и изменяет различные вводные материалы, такие как титульный лист и предисловие.
Рабочая группа по Ada ISO/IEC JTC 1/SC 22/WG 9, назначенная ISO, отвечает за интерпретацию и поддержание Международного стандарта, а также за создание Технических исправлений по мере необходимости. Техническая работа над Международным стандартом выполняется группой референтов по Ada (ARG) WG 9.
AXE Consultants выпускает Руководство по Ada в консультации с ARG, а также необходимые проекты других документов. Документы ISO/IEC часто перечисляют отдельные изменения, которые необходимо внести в текст стандарта, а не просто обновлять сам документ. Поэтому Международный стандарт часто представлен в нескольких частях, в то время как Руководство по Ada всегда является единым документом.
В июне 2016 года WG 9 утвердила предварительный график подготовки поправки или пересмотра Международного стандарта, с датой поставки не ранее 2018 года. В июле 2019 года WG 9 утвердила дополнительный период проверки и прототипирования для этого пересмотра, продлив дату поставки не ранее конца 2020 года. Проект стандарта был предоставлен WG 9 в июле 2021 года, и стандарт был опубликован как ISO/IEC 8652:2023 в мае 2023 года.
Это Руководство по Ada заменяет издание 2012 года. Оно изменяет предыдущее издание, внося изменения и дополнения, которые улучшают возможности языка и надежность программ, написанных на этом языке.
Значительные изменения в этом издании следующие:
- Улучшенная поддержка параллельного выполнения предоставляется посредством введения параллельных циклов, параллельных блоков, параллельной итерации контейнеров и параллельного сокращения.
- Более точное описание интерфейсов подпрограмм поддерживается с помощью новых аспектов Global, Global'Class и Nonblocking. Аспекты Global, в частности, помогают определить, могут ли два фрагмента кода безопасно выполняться параллельно.
- Теперь аспекты Pre и Post могут быть указаны для типов доступа к подпрограммам и для формальных подпрограмм-генериков; пост-условие для значения по умолчанию инициализации типа может быть указано с помощью нового аспекта Default_Initial_Condition.
- Поведение многих предопределенных операций контейнера теперь более точно специфицируется с помощью спецификаций Pre и Post вместо описаний на английском языке; вводится ограниченный («стабильный») вид для большинства контейнеров для поддержки более эффективной итерации.
- Более гибкое использование статических выражений поддерживается за счет введения функций статических выражений, а также с меньшими ограничениями на статические строки.
- Атрибут Image поддерживается для типов, не являющихся скалярными, и предоставляется пользовательский атрибут Put_Image, определяющий значение атрибута Image для пользовательского типа.
- Использование числовых и строковых литералов обобщено, чтобы разрешить их использование с другими категориями типов с помощью новых аспектов Integer_Literal, Real_Literal и String_Literal.
- Массивы и записи-агрегаты сделаны более гибкими: параметры индекса разрешены в агрегате массива для определения компонентов как функции от их индекса массива; дискриминанты могут быть определены более гибко внутри агрегата для типа записи с вариантами.
- Представлены новые типы агрегатов: дельта-агрегаты для построения нового объекта путем инкрементных обновлений существующего объекта; контейнерные агрегаты для построения объекта типа контейнера путем непосредственного указания его элементов.
- Для ссылки на целевой объект оператора присваивания в выражении, определяющем его новое значение, предоставлен сокращенный синтаксис, используя символ «@».
- Представлены выражения Declare, которые позволяют определять и использовать локальные константы или переименования, что позволяет упростить длинное выражение, определив общие части как именованные сущности.
- Добавлена поддержка легкой итерации с помощью процедурных итераторов.
- Добавлена поддержка стратегии программирования map-reduce с помощью выражений сокращения.
- Для конструкций, использующих итераторы любого типа, можно указать фильтр, который ограничивает элементы, производимые итерацией, теми, которые удовлетворяют условию фильтра.
- Предоставлены предопределенные пакеты, поддерживающие арифметику целых чисел и вещественных чисел с произвольной точностью.
- Введен профиль Jorvik для поддержки задач жесткого реального времени, которые хотят выйти за рамки ограничений профиля Ravenscar.