Ада (язык программирования)


А́да (Ada) — язык программирования, созданный в 19791980 годах в ходе проекта Министерства обороны США с целью разработать единый язык программирования для встроенных систем (то есть систем управления автоматизированными комплексами, функционирующими в реальном времени). Имелись в виду прежде всего бортовые системы управления военными объектами (кораблями, самолётами, танками, ракетами, снарядами и т. п.). Перед разработчиками не стояло задачи создать универсальный язык, поэтому решения, принятые авторами Ады, нужно воспринимать в контексте особенностей выбранной предметной области. Язык назван в честь Ады Лавлейс.

В исходном варианте, стандартизованном в 1983 году, Ада — это структурный, модульный язык программирования, содержащий высокоуровневые средства программирования параллельных процессов. Синтаксис Ады унаследован от языков типа Algol или Паскаль, но расширен, а также сделан более строгим и логичным. Ада — язык со строгой типизацией, в нём исключена работа с объектами, не имеющими типов, а автоматические преобразования типов сведены к абсолютному минимуму: допускается неявное приведение значения общего целого или вещественного числового типа к совместимому числовому типу[6]. В стандарте 1995 года в язык были добавлены базовые средства объектно-ориентированного программирования, в стандарте 2007 эти средства были дополнены, поэтому современный Ада — объектно-ориентированный язык программирования.

Язык регистро-независим. Синтаксис — алголоподобный, в духе языков конца 1970-х годов: все управляющие конструкции, начинающиеся на ключевое слово, заканчиваются ключевым словом и позволяют размещать внутри любое число операторов, что устраняет часто критикуемый недостаток, свойственный Алголу-60 и Паскалю: необходимость частого использования «операторных скобок» begin-end. Детали синтаксиса разработаны так, чтобы снизить вероятность случайных ошибок. Например, в идентификаторах запрещено использовать несколько знаков подчёркивания подряд. Завершающие ключевые слова для разных управляющих конструкций различны: условный оператор if заканчивается комбинацией end if, циклы — комбинацией end loop, оператор множественного выбора — end case и т. д. На уровне синтаксиса языка поддерживается структурная обработка исключений.

Язык имеет развитую систему типов, как встроенных, так и порождаемых программистом. Есть множество способов создания новых типов, язык поддерживает два разных понятия: «подтип» и «производный тип». Переменные типа и подтипа совместимы, переменные типа и его производного типа — нет.

В процедурах и функциях поддерживаются входные и выходные параметры, передача параметров по имени, параметры со значениями по умолчанию. Поддерживается переопределение процедур, функций и операторов — создание нескольких вариантов процедуры, функции или оператора с одним и тем же именем, но различными сигнатурами (типами и количеством параметров).