Язык программирования Ada¶
Ada — это компилируемый, структурированный, статически типизированный язык программирования общего назначения, разработанный в конце 1970-х — начале 1980-х годов по заказу Министерства обороны США. Язык ориентирован на создание крупных, надёжных, безопасных и долгоживущих программных систем, особенно в областях, где критически важна безотказность работы: авионика, управление железнодорожным транспортом, военные системы, космическая техника, банковское дело. Ada поддерживает параллельное программирование, строгую типизацию, контрактное программирование и объектно-ориентированную парадигму. Назван в честь Ады Лавлейс, считающейся первым программистом в истории.
¶История
¶Предпосылки создания
К середине 1970-х годов Министерство обороны США столкнулось с проблемой «зоопарка» языков программирования: в различных проектах использовалось более 450 различных языков и диалектов, что приводило к несовместимости, высоким затратам на сопровождение и дефициту специалистов. В 1975 году было принято решение разработать единый стандартизированный язык для критически важных систем.
¶Проект «Стилмен»
В 1975 году была опубликована серия документов «Требования к языку программирования высокого уровня для Министерства обороны» (известные как «Стилмен»). После нескольких итераций, в 1978 году, был объявлен конкурс на разработку языка. Из 17 предложений были отобраны четыре финалиста: CII Honeywell Bull (Франция), Intermetrics (США), SofTech (США) и SRI International (США).
¶Победитель и стандартизация
В мае 1979 года победителем была признана команда CII Honeywell Bull под руководством Жана Ишбиа (Jean Ichbiah). Язык получил временное название «DoD-1», а затем, в 1980 году, официальное имя — Ada, в честь Ады Лавлейс. Первый стандарт был утверждён как ANSI/MIL-STD-1815 в 1983 году (Ada 83). В 1987 году он был принят как международный стандарт ISO 8652:1987.
¶Основные версии
- Ada 83 — первая стабильная версия, заложившая основы языка: строгая типизация, пакеты, задачи, обработка исключений.
- Ada 95 — первая объектно-ориентированная версия (ISO 8652:1995). Добавлены интерфейсы, наследование, полиморфизм. Введена поддержка распределённых систем (раздел Annex E).
- Ada 2005 — уточнение стандарта, добавление контрактного программирования (предусловия, постусловия, инварианты), улучшение поддержки реального времени.
- Ada 2012 — значительное расширение контрактного программирования: встроенные выражения для предусловий (
Pre), постусловий (Post), инвариантов (Invariant). Добавлены условные выражения, аспекты (aspects). - Ada 2022 — последняя версия стандарта (ISO/IEC 8652:2022). Включает улучшения в области параллелизма, поддержки многопроцессорных систем, новые библиотеки.
¶Философия и ключевые принципы
Ada разрабатывалась с акцентом на безопасность и надёжность кода. Основные принципы:
- Надёжность прежде всего: ошибки должны выявляться на этапе компиляции, а не выполнения. Строгая типизация предотвращает случайные преобразования типов.
- Читаемость: синтаксис языка ориентирован на то, чтобы код был понятен человеку, даже без глубоких знаний языка. Используются английские ключевые слова, а не символы (например,
and thenвместо&&). - Сопровождаемость: чёткая структура пакетов, спецификаций и тел, контрактное программирование облегчают понимание и модификацию кода спустя годы.
- Переносимость: строгая стандартизация (ISO) гарантирует, что код, написанный на Ada, будет компилироваться на любом сертифицированном компиляторе без изменений.
¶Синтаксис и особенности
¶Базовый синтаксис
Ada использует блочную структуру, ключевые слова для выделения блоков (begin, end). Идентификаторы регистронезависимы. Пример простейшей программы:
```ada with Ada.Text_IO; use Ada.Text_IO;
procedure Hello is begin Put_Line ("Hello, World!"); end Hello; ```
¶Типы данных
Ada известна своей мощной системой типов. Пользователь может определять собственные скалярные типы с точным указанием диапазона:
``ada type Day_Of_Week is (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday); type Temperature is range -50 .. 50; type Counter is mod 256; -- модульный тип (беззнаковый) ``
¶Пакеты
Пакет (package) — основная единица модульности. Состоит из спецификации (интерфейса) и тела (реализации). Спецификация скрывает детали реализации, предоставляя только публичный интерфейс.
``ada -- Спецификация пакета package Stack is procedure Push (Item : Integer); function Pop return Integer; private -- скрытые детали type Stack_Array is array (1 .. 100) of Integer; Top : Integer := 0; Data : Stack_Array; end Stack; ``
¶Контрактное программирование (Ada 2012)
Встроенная поддержка контрактов позволяет указывать предусловия, постусловия и инварианты прямо в объявлении подпрограммы:
``ada procedure Push (Item : Integer) with Pre => (Top < 100), Post => (Top = Top'Old + 1 and then Data (Top) = Item); ``
¶Параллельное программирование
Ada имеет встроенную поддержку задач (task) и защищённых объектов (protected object). Задачи могут выполняться параллельно, синхронизироваться через rendezvous (рандеву) или через защищённые объекты с условными переменными.
```ada task type Producer is entry Start; end Producer;
task body Producer is begin accept Start; -- производство данных end Producer; ```
¶Применение
¶Авиация и космос
Ada широко используется в системах управления полётом, авионике, бортовом программном обеспечении. Примеры:
- Boeing 777: значительная часть бортового ПО написана на Ada.
- Airbus A380: системы управления полётом, авионика.
- Европейское космическое агентство (ESA): системы управления спутниками и ракетами-носителями (например, Ariane 5, хотя в этом проекте Ada не использовалась, но в более поздних — да).
¶Железнодорожный транспорт
Системы управления движением поездов, автоматические тормозные системы. Пример: Парижское метро (линия 14) — система автоматического управления поездами (Meteor) написана на Ada.
¶Военные системы
Ada была стандартом для Министерства обороны США с 1983 года. Использовалась в системах управления ракетными комплексами, радиолокационных станциях, системах связи. В России Ada также применялась в оборонных проектах, хотя и в меньшей степени из-за распространения C++.
¶Банковское дело и финансы
Высокая надёжность и строгая типизация делают Ada привлекательной для финансовых систем, где ошибка может стоить миллионы. Пример: Система SWIFT (часть инфраструктуры) — использовала Ada.
¶Критика
Несмотря на достоинства, Ada подвергается критике по нескольким причинам:
- Сложность синтаксиса: язык считается многословным и громоздким по сравнению с C или Python. Это может замедлять разработку.
- Меньшая популярность: Ada не получила широкого распространения в коммерческой разработке, коммерческом ПО и веб-программировании. Сообщество разработчиков относительно невелико.
- Ограниченная экосистема: меньше библиотек, фреймворков и инструментов, чем у C++, Java или Python.
- Высокий порог входа: строгая типизация и контрактное программирование требуют дисциплины и более глубокого проектирования на ранних этапах.
¶Интересные факты
- Имя «Ada» было выбрано в честь Ады Лавлейс, дочери лорда Байрона, которая написала первую в мире программу для аналитической машины Чарльза Бэббиджа.
- Стандарт Ada 83 был одним из первых стандартов ISO, который включал требования к тестированию компиляторов (сертификация ACVC — Ada Compiler Validation Capability).
- В 1995 году язык Ada был признан объектно-ориентированным, хотя изначально проектировался как процедурный.
- В России Ada применялась в проектах «Сухой Суперджет 100» (бортовое ПО) и в некоторых системах ПВО.
¶Источники
- ISO/IEC 8652:2022 — Information technology — Programming languages — Ada.
- Barnes, J. (2014). Programming in Ada 2012. Cambridge University Press.
- Ben-Ari, M. (2009). Ada for Software Engineers. Springer.
- Министерство обороны США. Requirements for High Order Programming Languages (Steelman), 1978.
- Ada Resource Association. Ada Reference Manual (официальная документация).
- Статья «Ada (programming language)» в Wikipedia (англ.).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


