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

А́да(Ada) —язык программирования, созданный в1979—1980 годахв ходе проектаМинистерства обороны СШАс целью разработать единый язык программирования длявстроенных систем(то есть систем управления автоматизированными комплексами, функционирующими в реальном времени). Имелись в виду прежде всего бортовые системы управления военными объектами (кораблями, самолётами, танками, ракетами, снарядами и т. п.). Перед разработчиками не стояло задачи создать универсальный язык, поэтому решения, принятые авторами Ады, нужно воспринимать в контексте особенностей выбранной предметной области. Язык назван в честьАды Лавлейс.
В исходном варианте, стандартизованном в 1983 году, Ада — этоструктурный,модульныйязык программирования, содержащий высокоуровневые средства программирования параллельных процессов. Синтаксис Ады унаследован от языков типаAlgolилиПаскаль, но расширен, а также сделан более строгим и логичным. Ада —язык со строгой типизацией, в нём исключена работа с объектами, не имеющимитипов, аавтоматические преобразования типовсведены к абсолютному минимуму: допускается неявное приведение значения общего целого или вещественного числового типа к совместимому числовому типу. В стандарте 1995 года в язык были добавлены базовые средстваобъектно-ориентированного программирования, в стандарте 2007 эти средства были дополнены, поэтому современный Ада —объектно-ориентированный язык программирования.
Язык регистро-независим.Синтаксис—алголоподобный, в духе языков конца 1970-х годов: все управляющие конструкции, начинающиеся на ключевое слово, заканчиваются ключевым словом и позволяют размещать внутри любое число операторов, что устраняет часто критикуемый недостаток, свойственный Алголу-60 и Паскалю: необходимость частого использования «операторных скобок»begin-end. Детали синтаксиса разработаны так, чтобы снизить вероятность случайных ошибок. Например, в идентификаторах запрещено использовать несколько знаков подчёркивания подряд. Завершающие ключевые слова для разных управляющих конструкций различны: условный операторifзаканчивается комбинациейend if, циклы — комбинациейend loop, оператор множественного выбора —end caseи т. д. На уровне синтаксиса языка поддерживаетсяструктурная обработка исключений.
Язык имеет развитую систему типов, как встроенных, так и порождаемых программистом. Есть множество способов создания новых типов, язык поддерживает два разных понятия: «подтип» и «производный тип». Переменные типа и подтипа совместимы, переменные типа и его производного типа — нет.
В процедурах и функциях поддерживаются входные и выходные параметры, передача параметров по имени, параметры со значениями по умолчанию. Поддерживаетсяпереопределение процедур, функций и операторов— создание нескольких вариантов процедуры, функции или оператора с одним и тем же именем, но различными сигнатурами (типами и количеством параметров).
Программы — модульные, механизм контроля импорта-экспорта описаний между модулями включает две разные директивы: одну для подключения другого модуля (with), другую — для импорта его описаний (use). Также существует возможность переименовать модуль при импорте (rename) — этот вариант позволяет использовать для обозначения пакета более удобные программистуидентификаторы. Пакеты (один из типов модулей) могут содержать заголовок и приватную часть — то, что содержится в ней, не экспортируется и другим модулям недоступно. Поддерживается механизмобобщённых (generic) модулей: пакетов, процедур и функций, позволяющих описывать алгоритмы обработки данных без указания конкретного типа.
В язык встроены конструкции поддержкипараллельного программирования: поддерживаются понятия «задача» (параллельно выполняемый фрагмент программы), «вход задачи» (средство синхронизации и коммуникации параллельно выполняющихся задач), поддерживается механизм «рандеву» (протокол взаимодействия параллельно выполняемых задач через вход одной из них), имеется оператор выбораSELECTдля организации условного межпотокового взаимодействия (выбора параллельной задачи, с которой следует взаимодействовать, в зависимости от готовности к рандеву и некоторых других условий). В принципе, имеющихся в языке средствпараллельного программированиядостаточно для решения большого класса задач, требующих параллельной обработки, без обращения к внешним средствам, таким как дополнительные библиотеки илиAPI операционной системы.
Для удовлетворения требованиям надёжности язык построен таким образом, чтобы как можно большее количество ошибок обнаруживалось на этапекомпиляции. Кроме того, одним из требований при разработке языка была максимально лёгкая читаемостьтекстов программ, даже в ущерб лёгкости написания. Результатом такого подхода стал несколько «тяжеловесный»синтаксиси множество ограничений, отсутствующих в наиболее распространённых языках общего назначения (таких какСииC++), например, та жестрогая типизация. Это привело к формированию представления об Аде как о сложном, малопонятном и неудобном в использовании языке.
Пример программы «Hello, world!»:
Здесь для применения функцииPut_Lineсодержащий её пакетAda.Text_IOимпортируется с помощью конструкции use, что даёт возможность вызывать функцию по имени без квалификации — указания в вызове имени пакета, содержащего функцию.
Разработка языка была проведена в рамках международного конкурса, организованного и профинансированногоминистерством обороны США.
Целью разработки было получениеязыка программирования, который мог бы стать единым для разработки проектов по заказам военного ведомства, главным образом, для разработки встроенных систем военного назначения и для больших военных компьютеров (на базе процессораiAPX 432отIntel). Работа началась в1975 годус формирования набора требований к языку, который бы в полной мере удовлетворил разработчиков систем указанного типа. Первоначальный список требований, выпущенный под кодовым наименованием «Strawman» («Соломенный»), был представлен на рецензию в ряд организаций и фирм, в течение двух лет последовательно уточнялся, пройдя через «Woodenman» («Деревянный»), «Tinman» («Оловянный»), «Ironman» («Железный») и в конечном счёте превратившись в итоговый документ под названием «Steelman» («Стальной»). «Steelman» был выпущен в июне 1978 года [DoD 1978].
Ещё до окончательного завершения формирования требований анализ показал, что ни один из имеющихся языков программирования не удовлетворяет требованиям в достаточной мере, так что было принято решение разработать новый язык. Конкурс на его создание был объявлен в1977 году, разработчикам было предложено базироваться на одном из трёх языков:Паскаль,Алгол-68илиПЛ/1. Из представленных на конкурс 15 проектов было отобрано 4 (все основаны на Паскале). Эти проекты были отправлены на дальнейшую доработку. На следующем этапе из 4 проектов отобрали два, из которых, после очередной доработки, был выбран один. Этот язык получил наименование «Ада» — разработавшая его группа под руководством французаЖана Ишбиадала языку название в честьАвгусты Ады Кинг Лавлейс(1815—1852), дочери поэтаДжорджа Байрона, которая занималась разработкой программ длявычислительной машины Бэббиджаи считается первым программистом в мире.
В1983 годуязык был официально стандартизованANSI. Стандарт языкаANSI/MIL-STD-1815-A-1983 был утверждён17 февраля1983 года. Министерство обороны США сделало наименование «Ada» зарегистрированной торговой маркой, запретив выпускатьтрансляторыязыка, не прошедшие официальную процедурутестированияна соответствие стандартам. Процедура состояла в прогоне через тестируемыйкомпиляторбольшого количества (более 1000) тестовых программ (так называемый комплект ACVC), для каждой из которых был однозначно определён результат тестирования: либо удачная компиляция, либо выдача вполне конкретного сообщения об ошибке. Тестирование проводилось по принципу «всё или ничего» — при ошибке в обработке хотя бы одного тестового примера компилятор считался не прошедшим тест, причём тестирование было действительно только на той аппаратной и программной платформе, на которой оно проводилось. Таким образом была в зародыше подавлена возможность образования диалектов языка Ада.
В1987 годуязык Ада был официально стандартизованISO. С этого момента Министерство обороны США перевело язык вобщественное достояние.
К 1990 году в мире существовало уже около 200компиляторов, соответствовавших стандарту языка Ада.
В1995 годубыл принят новый стандарт Ады, известный как Ada95. В язык были введены средства объектного программирования. Кроме того, язык был дополнен более развитыми средствами для взаимодействия с программами, написанными на других языках.
В марте2007 годаопубликованыизменения в стандарте Ады. Они коснулись, в основном, возможностейобъектно-ориентированного программирования: введеныинтерфейсы, принят обычный для большинства гибридных языков синтаксис вызова метода, внесён ещё ряд дополнений.
В 2012 годуISOпринят и опубликован новый стандарт языка.
В 1980-х годах была организована рабочая группа по языку Ада приГоскомитете СССР по науке и технике. Группа занималась изучением всех открытых (а также, по слухам, добытых разведкой закрытых) данных по языку Ада и исследовала возможность и целесообразность развития и использования Ады в СССР. Деятельность этой группы привела к концу 1980-х годов к разработке компиляторов Ады для практически всех применявшихся в СССР компьютеров. Было выпущено несколько книг по языку Ада на русском языке.
ВМГУпроводилась работа по созданию собственных пакетов тестирования ада-трансляторов на соответствие стандартам. ВЛГУдля создания ада-системы была использована ранее разрабатывавшаяся для реализацииАлгола-68система «Паллада», которую перевели на Аду. Система содержит интегрированную среду разработки, компилятор, текстовый редактор, отладчик, библиотеки, систему контроля версий и командный интерпретатор.
После распада СССР работа по распространению Ады практически прервалась. Правда, были приняты три программы развития разработки ПО на Аде (вМинистерстве обороны,Министерстве гражданской авиациииМинистерстве образования и науки), но разработка их ведётся медленно и нескоординированно. В результате вРоссииязык Ада малоизвестен, большинство современных российских программистов считает его «мёртвым языком» и ничего о нём не знает. Ада используется в России иСНГотдельными энтузиастами. Тем не менее, язык применяется для промышленной разработки ПО. Известно несколько разработанных на Аде проектов, работающих в России. Среди них:
С момента появления Ада подвергся критике некоторых признанных авторитетов в области разработки языков программирования, в первую очередь — за сложность синтаксиса и большой объём. В частности, язык критиковалиЧарльз ХоариНиклаус Вирт(участвовавшие со своим проектом в данном конкурсе, но выбывшие после первого этапа), а такжеЭдсгер Дейкстра.
Дейкстра усомнился, что язык такой сложности, как Ада, может быть обозрим и управляем.
Хоар выразил своё сожаление тем, что «погремушки и побрякушки возобладали над фундаментальными требованиями надёжности и безопасности» и предостерёг от «армады ракет, летящих не туда из-за не обнаруженной вовремя ошибки в компиляторе Ады».Никлаус Виртвысказался более сдержанно, но тоже негативно. Он сказал: «Слишком много всего вываливается на программиста. Я не думаю, что, изучив треть Ады, можно нормально работать. Если вы не освоите всех деталей языка, то в дальнейшем можете споткнуться на них, и это приведёт к неприятным последствиям».Жан Ишбиа, руководитель группы разработчиков Ады, выразив своё «уважение и восхищение» Виртом, не согласился с ним, сказав: «Вирт верит в простые решения сложных проблем. Я не верю в такие чудеса. Сложные проблемы требуют сложных решений».
Вызывает сомнения и процедура проверки соответствия компилятора стандарту языка путём тестирования. Из общих соображений ясно, что тестирование может найти несоответствие, но не может гарантировать правильность. Практическим подтверждением этого является тот факт, что сертифицированные компиляторы, будучи проверены на другом наборе тестов, обнаруживали несоответствие стандарту.
Сторонники Ады утверждают, что единственная альтернатива большому и сложному языку в больших проектах — это применение нескольких компактных языков, неизбежно порождающее проблемы с совместимостью, для избавления от которых и была придумана Ада. Они замечают также, что представление о сложности разработки на Аде верно лишь отчасти: написание простой программы на Аде действительно требует больше времени, чем на других, менее формальных языках, типаСи, но отладка и сопровождение программ, особенно крупных и сложных, значительно упрощается. По утверждению Стефена Цейгера изRational Software Corporation, разработка программного обеспечения на Аде в целом обходится на 60 % дешевле, а разработанная программа имеет в 9 раз меньше дефектов, чем при использованииязыка Си.
На практике оказалось, что Ада, заняв предназначенную ей нишу в военных и родственных им разработках встроенных систем, за пределы данной ниши так и не вышла ни на Западе, ни в СССР, ни напостсоветском пространстве. Причин этому называется много. Противники языка упирают на его сложность и недостатки, сторонники говорят, прежде всего, об объективных обстоятельствах появления языка и негативных сторонах процесса его внедрения. По мнению С. И. Рыбина, старшего научного сотрудникаНИВЦ МГУ, консультанта компании AdaCore EU, эксперта по языку Ада рабочей группы ISO по стандарту языка, своими неудачами Ада обязана двум основным причинам:
Тем не менее, по некоторым осторожным прогнозам, с удешевлением аппаратуры и распространением встроенных систем со сложным ПО рынок для программ на Аде может заметно вырасти:
Кроме того, Ада имеет, пусть и весьма ограниченное, применение в сфере высшего образования. В МГУ и Харьковском университете читаются спецкурсы по Аде. Однако, по словам того жеС. И. Рыбина,
На Аде написан рядоперационных систем, среди них —MaRTEАрхивная копияот 10 июля 2017 наWayback Machine,RTEMS(система с открытым исходным кодом, разработаннаяDARPAМОСША, используется в ракетных системах и на борту автоматической межпланетной станцииMars Reconnaissance Orbiterкак управляющая радиомодулем «Electra»),Ravenskar,RTOS-32. В разработке находится ещё несколько проектов создания операционных систем на Аде, среди них —AuroraUX— проект по переписыванию ядраOpenSolaris, а потом —DragonFly BSD, а также проект по созданию на микроядреL4системыLovelace.
Ранее существовали и другие операционные системы, написанные на Аде, среди них — BiiN, Pulse, AdaOS.
В настоящее время развивается операционная система Muen, написанная на Ada и SPARK, используются учебные ОС Ada Bare bones, Microkernel Ada (TAMP).
За исключениемLLVM,GNATиXGC(для некоторых платформ) вышеперечисленные компиляторы являются платными. Некоторые фирмы, напримерAonix, предлагают бесплатные демонстрационные версии, ограниченные либо по времени использования, либо по функциональности.
Среды разработкиNetBeansиEclipseимеют плагины для работы с Ада.
Синтаксис Ады в значительной степени воспроизведён в таких языках, какPL/SQL(и впоследствииPL/pgSQL),VHDL,SPARK.
В языках программированияЕи Clarity, затем - во множестве других: например, в языкахErlang,Fortress,Chapel,X10,DиGoполучили дальнейшее развитие идеи распределённых, многозадачных, многопоточных вычислений, которые реализованы самим языком, а не внешними библиотеками, впервые широко применённые на практике именно в языке Ада.
Стандарты