Ада (язык программирования). Язык программирования ада 1 из языков программирования называется ада

Если спросить отечественного ИТ-специалиста: «Что такое Ада?», большинство лишь удивленно пожмет плечами, а кто-то даже скажет, что это мертвый язык, когда-то придуманный Пентагоном, а ныне практически не используемый. На самом же деле Ада и сегодня - вполне благополучный и активно применяемый в различных областях язык программирования. Правда, большинство российских программистов знают о нем мало.

Наверное, каждый, кому приходилось пользоваться четырнадцатой линией парижского метрополитена, удивлялся, впервые увидев поезд, в котором нет кабины машиниста. Движение поездов на этой линии полностью управляется Ада-программой.

Несмотря ни на что, в отдельных областях техники Россия все еще «впереди планеты всей». И одна из них - конструирование и производство самолетов-амфибий. Всемирно признанным лидером в этой области является ТАНТК им. Г.М. Бериева. Недавно это предприятие приобрело средства разработки бортового программного обеспечения на базе языка Ада для использования при модернизации своей последней модели Бе-200.

Между тем, большинство отечественных ИТ-специалистов в лучшем случае ничего не знают о языке Ада, в худшем же - имеют совершенно неверное представление об Аде как о языке-монстре, некогда придуманном Пентагоном для разработки военных систем, а ныне окончательно забытом.

Немного истории

Официальным днем рождения языка программирования Ада можно считать 17 февраля 1983 года - дату утверждения стандарта ANSI/MIL-STD-1815-A-1983.

Технические и административные меры, предпринятые Минобороны как часть проекта по созданию и внедрению Ады, полностью предотвратили появление и распространение диалектов языка. С 1983 года и по настоящее время все индустриальные реализации поддерживают действующий стандарт Ады. Когда же речь заходит о подмножествах Ады, то эти подмножества определяются не реализацией, а стандартами разработки конкретного класса систем.

В 1987 году стандарт ANSI без единого изменения был утвержден в качестве стандарта ISO (ISO/IEC 8652), а когда в начале 90-х годов назрела необходимость пересмотра стандарта, работа по пересмотру также была проведена под управлением и на средства Министерства обороны США. Стартовал новый международный проект, который завершился утверждением в конце 1994-го и публикацией в начале 1995 года новой версии стандарта ISO/IEC 8652. Именно этот документ и служит сегодня определением языка программирования Ада.

В СССР в начале 80-х годов была образована Рабочая группа по языку программирования Ада при Государственном комитете по науке и технике. Тщательно собиралась и анализировалась вся открытая информация о проекте, а усилиями специальных служб добывалась и закрытая информация. Были организованы проекты по реализации Ады для практически всех использовавшихся тогда архитектур ЭВМ, и некоторые из них оказались весьма успешными. Распад СССР положил конец этой деятельности. Сегодня Ада используется в России и СНГ отдельными энтузиастами.

Что такое Ада

Все современные индустриальные языки предоставляют по сути один и тот же базовый набор возможностей, различаясь не тем, что они позволяют делать, а тем, как именно они позволяют это делать. Однако Ада, по крайней мере, в двух аспектах расширяет стандартный для современных языков набор возможностей. Во-первых, Ада предоставляет высокоуровневые средства программирования асинхронных процессов. Во-вторых, является единственным языком, который без всяких оговорок можно назвать модульным.

Пример такой просто необходим для того, чтобы опровергнуть достаточно распространенный миф о том, что Ада - большой, сложный и «тяжелый» язык, пригодный лишь для написания сверхбольших и сверхсложных систем. На самом же деле, Ада может применяться для разработки небольших и средних программ с тем же успехом, как и современные клоны Си, Паскаля, Бейсика и Java. Так, классический пример программы «Hello, World!» выглядит на Аде следующим образом:

Легко видеть, что код на Аде похож на код на Паскале, который был выбран в качестве его прототипа. Первая строка описывает связь данного компилируемого модуля с другими модулями - указывается, что подпрограмма Hello_World должна компилироваться совместно с модулем Ada.Text_IO, который является компонентом предопределенной библиотеки.

Следующая программа определяет два асинхронных процесса :

В разделе локальных объявлений процедуры Tasking_Example описывается задача Outputter (строка 6, строки с 8 по 17 содержат тело этой задачи). Когда управление в процессе, соответствующем процедуре Tasking_Example, доходит до строки 20, перед тем, как выполнить этот первый оператор, запускается процесс, соответствующий задаче Outputter, после чего два этих процесса живут и асинхронно выполняются независимо друг от друга. Выполнение оператора задержки (строки 14 и 20) состоит в приостановке соответствующего процесса на указанное количество секунд. Таким образом, процесс Tasking_Example приостанавливается на 20 секунд, а в это время процесс Outputter начинает печатать значения увеличивающегося на единицу счетчика, приостанавливаясь на одну секунду после вывода каждого значения. По истечении 20 секунд процесс Tasking_Example устанавливает флаг Finished в положение «истина», в результате завершается цикл в процессе Outputter. Спецификация переменной Finished как атомарного объекта данных (строка 4) делает невозможным одновременное чтение и изменение значения этой переменной.

Далее представлен шаблон функции, позволяющей покомпонентно складывать два одномерных массива. Этот шаблон может быть настроен на произвольный тип, являющийся одномерным массивом, для компонентов которого определены операции присваивания и сложения («сложение» не обязано быть арифметическим сложением).

Строки 1-6 содержат объявление настраиваемой функции, а строки 8-20 - ее тело. Содержательно, параметром настройки является произвольный одномерный регулярный тип с неуточненным индексным диапазоном (строка 4), про которого известно только, что тип компонента у него произвольный, однако для компонентов определена операция присваивания (строка 2), тип индекса - произвольный дискретный (строка 4). Поскольку нам предстоит покомпонентно складывать два массива, надо знать, что такое операция сложения для типа компонентов. Так как это произвольный тип, мы вынуждены передавать сложение для типа компонента как формальный параметр настройки (строка 5).

В теле функции мы первым делом проверяем, совпадают ли длины операндов (строка 12), иначе покомпонентное сложение не имеет смысла. Совпадение длин операндов не гарантирует совпадение индексных диапазонов, поэтому в цикле по индексному диапазону первого аргумента (строка 15) нам необходимо каждый раз вычислять индекс соответствующего компонента второго аргумента. Мы лишены возможности сделать это для типа Index, так как знаем про него только, что он дискретен, поэтому переходим от значения дискретного типа к его порядковому номеру (атрибут?Pos), вычисляем необходимый сдвиг для порядкового номера и возвращаемся к соответствующему значению типа Index (атрибут?Val).

Заметим, что параметры (настраиваемой) функции «+» Left и Right объявлены как имеющие тип Arr, индексный диапазон которого не уточнен. Однако Left и Right - это формальные параметры, на место которых при вызове (результата конкретизации) функции «+» будут подставлены конкретные массивы с известными индексными диапазонами. Мы же в теле функции «+» пользуемся атрибутами массивов (?Range, ?First, ?Length), чтобы из объекта получить информацию о его индексном диапазоне.

Почему Ада?

Выбор языка для программного проекта ранее был чисто техническим вопросом. Сегодня это стало вопросом стратегической важности, имеющим далеко идущие последствия для успеха проекта. Перечислим некоторые причины, благодаря которым язык Ада был выбран для реализации программных проектов различными компаниями, либо сделан обязательным для использования в рамках тендеров.

  • Желание повысить надежность разрабатываемой системы, так как программные дефекты могут иметь серьезные последствия для здоровья людей, экономики, экологии и т.п. (Ада обладает встроенными средствами обеспечения надежности).
  • Желание снизить стоимость разработки и сопровождения системы.
  • Наличие международных стандартов и наличие компиляторов языка практически для любой платформы.
  • Преимущества дисциплинированного подхода к разработке программного обеспечения, которые становятся особенно существенными по мере увеличения объема и сложности программного обеспечения.
Ада и Си

При проведении сравнительных анализов популярных языков переломано столько копий, что сегодня эту тему часто относят к разряду «религиозных войн». Поэтому ограничимся лишь ссылкой на известную статью , в которой делается ряд красноречивых выводов.

  1. Разработка программ на языке Ада обходится на 60% дешевле аналогичных программных проектов, реализуемых на Си.
  2. Программа на языке Ада имеет в 9 раз меньше дефектов, чем программа на Си; программа на Си++ имеет еще более низкие, чем программа Си, характеристики.
  3. предпочтительнее Си как для опытных, так и для неопытных программистов, а также для программистов, имеющих как максимальный, так и минимальный рейтинг в своей группе.
  4. Трудоемкость изучения языка Ада не выше трудоемкости изучения Си.
  5. Программы на Аде более надежны, чем программы на Си.

В качестве иллюстрации этих выводов, приведем пример разработки бортового программного обеспечения самолета C-130J в соответствии с требованиями Уровня А стандарта DO-178B . При этом констатировалось качество кода, в 10 раз превышающее среднее для программного обеспечения Уровня А. Производительность труда выросла вчетверо относительно сопоставимых программных проектов.

Ада и Java

В Microsoft были вынуждены включить в лицензионные соглашения для своих операционных систем следующий пункт (www.microsoft.com/msdownload/ieplatform/ie/ license.txt ): «Замечание относительно поддержки языка Java... Технология Java не является устойчивой к сбоям и не предназначена... для использования в рамках управляющих систем реального времени..., в которых сбой языка Java может повлечь за собой смерть, увечье, или тяжелый урон инфраструктуре или окружающей среде. Компания Sun Microsystems, Inc. обязала компанию Microsoft разместить данное предупреждение».

Укажем также на статьи и , демонстрирующие преимущества языка Ада над Java.

«Адские» мифы

Довольно часто с Адой связывают набор устойчивых заблуждений, препятствующих как распространению языка, так и осознанному выбору Ады в качестве языка реализации проекта.

Ада - мертвый язык, на нем сейчас никто не программирует. В действительности, Ада уверенно занимает нишу больших встроенных систем с повышенными требованиями к надежности. По сравнению с «коробочными» продуктами для Windows, такие системы не так заметны, поскольку либо существуют в одном экземпляре (какой смысл тиражировать программу, управляющую движением поездов метро), или распространяются как часть системы, в которую они встроены (бортовое программное обеспечение).

Ада - язык, предназначенный исключительно для военных применений. Ада действительно была разработана при участии Министерства обороны США, однако отсутствуют какие-либо технические, административные или иные причины, препятствующие использованию Ады для разработки гражданских систем. Количество «гражданских» проектов, основанных на этом языке, сегодня сопоставимо с количеством «военных» проектов.

Ада - слишком большой и сложный язык, для того чтобы использовать его в небольшом проекте. Объем и сложность всех современных индустриальных языков практически одинаковы, и чтобы убедиться в этом, достаточно просто сравнить объем их описаний. Этот миф восходит к началу 80-х годов, когда Аду сопоставляли с Паскалем, Фортраном 77 или Бейсиком.

Программистов, знающих Аду, мало, изучение языка с нуля требует чрезмерных усилий и времени. На самом же деле, настоящую трудность представляет отыскание специалистов, понимающих специфику встроенных систем и способных создавать качественные программы для них. Так, например, компания BAE, один из активных пользователей языка Ада, не требует от кандидатов знания этого языка; вместо этого ищутся люди, знакомые со встроенными системами и процессами создания программного обеспечения индустриального качества. После найма таких людей требуется всего две недели для обучения их языку Ада.

Наш личный опыт показывает, что программистам, знакомым с той или иной разновидностью Паскаля, требуется всего несколько дней, чтобы начать разрабатывать несложные программы на Аде.

Существующие Ада-технологии неэффективны; и трансляторы, и порождаемый ими код, отличаются низкой производительностью. Этот миф также восходит к первой половине 80-х годов, когда появились первые реализации Ады, фактически всего лишь доказывавшие «теорему существования Ада-транслятора, соответствующего стандарту». Достаточно провести ряд несложных экспериментов, запрограммировав некоторую модельную задачку на Аде, Паскале и Си/Си++, и сравнив (при сопоставимых параметрах компиляторов) затем скорость компиляции, объем порождаемого кода и скорость его выполнения, чтобы убедиться, что какой-либо специфической неэффективности, свойственной Аде, просто не существует. Можно также отметить, что система программирования GNAT при объеме исходных текстов более 40 Мбайт, на 90% реализована на Аде, и построение ее из исходных текстов (в его ходе она трижды сама себя компилирует) на современном ПК занимает не более получаса.

Существующие реализации Ады крайне дороги. Это верно, однако следует иметь в виду, что существует публично доступная версия системы программирования GNAT, которая бесплатно и на совершенно законных основаниях может быть взята из программного репозитория Нью-йоркского университета (ftp://cs.nyu.edu/pub/gnat ) вместе с исходными текстами

Бесплатный сыр и как избежать мышеловки

GNAT (GNu Ada Translator) - многоплатформная реализация языка Ада, существующая практически на всех современных индустриальных платформах и поддерживающая генерацию кода для популярных встроенных архитектур. GNAT (www.gnat.com ) полностью реализует стандарт Ады, включая те библиотеки, которые стандартом классифицируются как необязательные. Помимо собственно Ада-транслятора, GNAT включает инструментарий, в котором следует отметить развитую интегрированную среду разработчика и многоязыковый графический отладчик, позволяющий, в том числе, исследовать поведение программ с асинхронными процессами. Транслятор и сопутствующие инструменты можно использовать как по отдельности, вызывая их из командной строки, так и в рамках интегрированной графической среды разработки Ада-программ. Все компоненты GNAT, включая среду разработки, имеют один и тот же интерфейс на всех платформах. Помимо полной реализации описываемых стандартом средств GNAT предлагает богатый набор допускаемых стандартом расширений. GNAT - реализация Ады в многоязыковой системе программирования gcc, состоящей из набора компиляторов переднего плана для различных входных языков при общем генераторе кода, что существенно упрощает разработку программ, содержащих компоненты, реализованные на различных языках программирования.

GNAT с самого начала разрабатывался и распространялся под лицензией GPL. Увы, с GPL также связана масса мифов. Так, многие считают, что программы под GPL разрабатываются неорганизованными группами энтузиастов, распространяются абсолютно бесплатно; в результате и надежность, и функциональность таких программ оставляют желать лучшего, не позволяют использовать их в сколько-нибудь серьезных проектах. В случае с GNAT это далеко не так. Для того чтобы убедиться в этом, достаточно просмотреть список компаний, заключивших с его разработчиками контракты на техническую поддержку: Boeing, British Aerospace, Lockheed, Ericsson, SAAB, Avionics и др.

Свободное предоставление демонстрационных версий - обычная практика многих разработчиков программного обеспечения. GNAT отличается тем, что находящаяся в свободном доступе публичная версия является абсолютно полной версией технологии, без каких-либо юридических или технических ограничений на ее использование. Ряд серьезных проектов был успешно реализован именно на базе публичных версий GNAT. Программное обеспечение спускаемого аппарата Beagle 2 европейской автоматической станции Mars Express, направляющейся в данный момент к Марсу (www.beagle2.com/index.htm ), автоматизированная станция документальной связи Министерства обороны РФ (www.ada-ru.org/prj_doc.html ). Единственным недостатком публичных версий является то, что разработчик не предоставляет для них технической поддержки.

Заключение

Подводя итог, можно сказать, что язык Ада предоставляет разработчикам идеальное сочетание цельности, последовательности, надежности и эффективности. Язык поддерживает созидательное творчество и новаторство, обеспечивая в то же время дисциплину и индустриальный уровень разработки программного обеспечения, необходимые для реализации программных систем большой важности.

Литература
  1. Benjamin Brosgol, Introduction to Ada 95. www.embedded.com/story/OEG20021211S0034
  2. Stephen Zeigler, Comparing Development Costs of C and Ada. www.adaic.com/whyada/ada-vs-c/cada_art.html www.ada-ru.org . Аннотированную библиографию книг по языку Ада, изданных на русском языке, можно найти на сайте

Особенности языка

«Hello, world!» на Аде

Несколько различных вариантов программы «Hello, world!» можно увидеть в Викиучебнике (англ.) . Различия обусловлены необходимостью использовать библиотечную функцию Put_Line - в этом языке есть три различных способа организации такого использования.

with Ada.Text_IO;

procedure Hello is

Use Ada.Text_IO;

Put_Line("Hello, world!");

end Hello;

Здесь для применения функции Put_Line содержащий её пакет Ada.Text_IO импортируется с помощью конструкции use, что даёт возможность вызывать функцию по имени без квалификации - указания в вызове имени пакета, содержащего функцию.

История

Разработка языка была проведена в рамках международного конкурса, организованного и профинансированного министерством обороны США .Целью разработки было получение языка программирования , который мог бы стать единым для разработки проектов по заказам военного ведомства, главным образом, для разработки встроенных систем военного назначения и для больших военных компьютеров (на базе процессора iAPX 432 от Intel). Работа началась в 1975 году , с формирования набора требований к языку, который бы в полной мере удовлетворил разработчиков систем указанного типа. Первоначальный список требований, выпущенный под кодовым наименованием «Соломенный», был представлен на рецензию в ряд организаций и фирм, в течение двух лет последовательно уточнялся, в конечном счёте превратившись в итоговый документ под названием «Стальной».

После завершения формирования требований был проведён анализ, который показал, что ни один из имеющихся языков программирования не удовлетворяет требованиям в достаточной мере, так что было принято решение разработать новый язык. Конкурс на его создание был объявлен в 1977 году , разработчикам было предложено базироваться на одном из трёх языков: Паскаль , Алгол-68 или PL/1 .

Из представленных на конкурс 15 проектов было отобрано 4 (все основаны на Паскале). Эти проекты были отправлены на дальнейшую доработку. На следующем этапе из 4 проектов отобрали два, из которых, после очередной доработки, был выбран один. Этот язык получил наименование «Ада» - разработавшая его группа под руководством француза Жана Ишбиа дала языку название в честь Огасты Ады Кинг Лавлейс (дочери поэта Дж. Байрона), которая считается первым программистом в мире за разработку программ для вычислительной машины Бэббиджа .

Дейкстра в одной из своих статей усомнился, что язык такой сложности, как Ада, может быть обозрим и управляем. Он заметил: «Если Ada собирается выдать стандарт, желательно, чтобы он был недвусмысленно документирован. По меньшей мере две группы попытались сделать это; в результате обе выдали около 600 страниц формального текста. Это гораздо больше, чем необходимо, чтобы удостовериться в невозможности хотя бы твердо установить, что оба документа определяют один и тот же язык. Ошибка очевидной неуправляемости этих двух документов кроется ни в двух группах, составивших их, ни в принятом ими формализме, а лишь в самом языке: сами не обеспечив формального определения, могут ли его разработчики скрыть, что они предлагают неуправляемого монстра. То, что Ada уменьшит проблемы программирования и увеличит надёжность наших разработок до приемлемых границ, - это лишь одна из тех сказок, в которые могут поверить только люди с военным образованием».

Хоар выразил своё сожаление тем, что «погремушки и побрякушки возобладали над фундаментальными требованиями надёжности и безопасности» и предостерёг от «армады ракет, летящих не туда из-за не обнаруженной вовремя ошибки в компиляторе Ады». Никлаус Вирт высказался более сдержанно, но тоже негативно. Он сказал: «Слишком много всего вываливается на программиста. Я не думаю, что, изучив треть Ады, можно нормально работать. Если вы не освоите всех деталей языка, то в дальнейшем можете споткнуться на них, и это приведёт к неприятным последствиям» . Жан Ишбиа, руководитель группы разработчиков Ады, выразив своё «уважение и восхищение» Виртом, не согласился с ним, сказав: «Вирт верит в простые решения сложных проблем. Я не верю в такие чудеса. Сложные проблемы требуют сложных решений».

Вызывает сомнения и процедура проверки соответствия компилятора стандарту языка путём тестирования. Из общих соображений ясно, что тестирование может найти несоответствие, но не может гарантировать правильность. Практическим подтверждением этого является тот факт, что сертифицированные компиляторы, будучи проверены на другом наборе тестов, обнаруживали несоответствие стандарту .

Сторонники Ады утверждают, что единственная альтернатива большому и сложному языку в больших проектах - это применение нескольких компактных языков, неизбежно порождающее проблемы с совместимостью, для избавления от которых и была придумана Ада. Они замечают также, что представление о сложности разработки на Аде верно лишь отчасти: написание простой программы на Аде действительно требует больше времени, чем на других, менее формальных языках, типа Си , но отладка и сопровождение программ, особенно крупных и сложных, значительно упрощается. По утверждению Стефена Цейгера из Rational Software Corporation , разработка программного обеспечения на Аде в целом обходится на 60 % дешевле, а разработанная программа имеет в 9 раз меньше дефектов, чем при использовании языка Си.

Распространение, перспективы

На практике оказалось, что Ада, заняв предназначенную ей нишу в военных и родственных им разработках встроенных систем, за пределы данной ниши так и не вышла, ни на Западе, ни в СССР, ни на постсоветском пространстве. Причин этому называется много. Противники языка упирают на его сложность и недостатки, сторонники говорят, прежде всего, об объективных обстоятельствах появления языка и негативных сторонах процесса его внедрения. Интересно мнение С. И. Рыбина, старшего научного сотрудника НИВЦ МГУ, консультанта компании AdaCore EU, эксперта по языку Ада рабочей группы ISO по стандарту языка. Он считает , что своими неудачами Ада обязана двум основным причинам:

  • Во время проектирования языка Пентагон предполагал, что всё новое ПО будет создаваться только на Аде. Из-за этого Ада получила крайне примитивные средства взаимодействия с программами на других языках. На практике оказалось, что написать на Аде вообще всё - нереально (хотя бы потому, что возникала необходимость взаимодействовать с готовыми разработками на других языках). Поэтому в отраслях, где не было жёсткого требования «писать только на Аде», предпочитали другие языки, более приспособленные к мультиязычной среде. В стандарте 1995 года проблема взаимодействия с другими языками была решена, но время оказалось упущено.
  • Парадоксально, но распространению Ады помешала финансовая и организационная поддержка Пентагона. Программы на Аде, написанные для военных, работали на самой мощной вычислительной технике, какая была доступна, поэтому разработчики компиляторов заботились в первую очередь о прохождении тестов ACVC, и только потом - об эффективности компилятора и создаваемого им кода. В начале 1980-х годов начался бум микрокомпьютеров, и трансляторы для распространённых языков (Паскаля, Си, Бейсика) были оперативно оптимизированы под маломощные системы. Для Ады стимула в такой модернизации не оказалось, в результате ставшие через несколько лет основной массой мирового вычислительного парка персональные компьютеры оказались без качественного транслятора Ады. Естественно, что Ада потеряла этот сегмент рынка. Лишь относительно недавно появился компилятор GNAT , качественный и производительный, но и здесь время оказалось упущено.

В настоящее время Ада достаточно прочно обосновалась в разработках больших встроенных систем повышенной надёжности, здесь у неё практически нет сильных конкурентов. Применение языка постепенно растёт, хотя и довольно медленно. По некоторым осторожным прогнозам, с удешевлением аппаратуры и распространением встроенных систем со сложным ПО рынок для программ на Аде может заметно вырасти, вырастет и использование языка.

Кроме того, Ада имеет, пусть и весьма ограниченное, применение в сфере высшего образования. В МГУ и Харьковском университете читаются спецкурсы по Аде. Однако, по словам того же С. И. Рыбина,

… сейчас на пост-советском пространстве в области программной индустрии и образования сложился очевидный порочный круг: в индустрии практически не знают про Аду, соответственно, со стороны индустрии нет запроса к образованию по подготовке Ада-специалистов, и из вузов в индустрию приходят новые люди, которые практически ничего не знают про Аду.

Операционные системы, написанные на Аде

Встроенные системы

  • RTEMS - ОС с открытым исходным кодом, разработана DARPA МО США
  • Ravenskar
  • RTOS -32 - проприетарная ОС

Системы в разработке

  • AuroraUX (проект по переписыванию ядра OpenSolaris на язык Ада)
  • Lovelace (операционная система на ядре )

Больше не существующие системы

  • BiiN™
  • Pulse™
  • AdaOS

Компиляторы Ада

Название Компания Версия Операционная система Сайт
AdaMagic SofCheck Ада 95 ? www.sofcheck.com
AdaMULTI Green Hills Software Ада 83, Ада 95,

Реферат на тему:

Ada



План:

    Введение
  • 1 Особенности языка
  • 2 «Hello, world!» на Аде
  • 3 История
  • 4 Ада в СССР и России
  • 5 Критика
  • 6 Распространение, перспективы
  • 7 Операционные системы, написанные на Аде
    • 7.1 Встроенные системы
    • 7.2 Системы в разработке
    • 7.3 Больше не существующие системы
  • 8 Компиляторы Ада
  • 9 Производные языки
  • 10 Интересные факты
  • Примечания
    Литература

Введение

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


1. Особенности языка

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

Из особенностей синтаксиса можно отметить:

  • Язык регистро-независимый.
  • Программы модульные, механизм контроля импорта-экспорта описаний между модулями включает две разные директивы: одну для подключения другого модуля (with), другую - для импорта его описаний (use). Также существует возможность переименовать модуль при импорте (rename) - этот вариант позволяет использовать для обозначения пакета более удобные программисту идентификаторы.
  • Пакеты (один из типов модулей) могут содержать заголовок и личную часть - то, что содержится в ней, не экспортируется и другим модулям недоступно.
  • Поддерживается механизм обобщённых (настраиваемых) модулей: пакетов, процедур и функций, позволяющих описывать обобщённые алгоритмы обработки данных без указания конкретного типа.
  • Развитая система типов, как встроенных, так и порождаемых программистом. Есть множество способов создания новых типов, язык поддерживает два разных понятия: «подтип» и «производный тип». Переменные типа и подтипа совместимы, переменные типа и его производного типа - нет.
  • Средства обработки исключений.
  • Развитые средства обращения к процедурам и функциям: поддерживаются входные и выходные параметры, передача фактических параметров в произвольном порядке с указанием имён формальных, параметры со значениями по умолчанию.
  • Поддерживается переопределение процедур, функций и операторов - создание нескольких вариантов процедуры, функции или оператора с одним и тем же именем, но различными сигнатурами (типами и количеством параметров).
  • Встроенные в язык конструкции поддержки параллельного программирования: поддерживаются понятия «задача» (параллельно выполняемый фрагмент программы), «вход задачи» (средство синхронизации и коммуникации параллельно выполняющихся задач), поддерживается механизм «рандеву» (протокол взаимодействия параллельно выполняемых задач через вход одной из них), имеется оператор выбора SELECT для организации условного межпотокового взаимодействия (выбора параллельной задачи, с которой следует взаимодействовать, в зависимости от готовности к рандеву и некоторых других условий). В принципе, имеющихся в языке средств параллельного программирования достаточно для решения большого класса задач, требующих параллельной обработки, без обращения к внешним средствам, таким как дополнительные библиотеки или API операционной системы.

Для удовлетворения требованиям надёжности язык построен таким образом, чтобы как можно большее количество ошибок обнаруживалось на этапе компиляции. Кроме того, одним из требований при разработке языка была максимально лёгкая читаемость текстов программ, даже в ущерб лёгкости написания . Результатом такого подхода стал несколько «тяжеловесный» синтаксис и множество ограничений, отсутствующих в наиболее распространённых промышленных языках (С и C++) и часто воспринимаемых профессиональными программистами как избыточные, например, та же строгая типизация. Это привело к формированию представления об Аде как о сложном, малопонятном и неудобном в использовании языке .


2. «Hello, world!» на Аде

Несколько различных вариантов программы «Hello, world!» можно увидеть в Викиучебнике (англ.). Различия обусловлены необходимостью использовать библиотечную функцию Put_Line - в этом языке есть три различных способа организации такого использования.

With Ada.Text_IO ; procedure Hello is use Ada.Text_IO ; begin Put_Line("Hello, world!" ) ; end Hello;

Здесь для применения функции Put_Line содержащий её пакет Ada.Text_IO импортируется с помощью конструкции use, что даёт возможность вызывать функцию по имени без квалификации - указания в вызове имени пакета, содержащего функцию.


3. История

Разработка языка была проведена в рамках международного конкурса, организованного и профинансированного министерством обороны США. Целью разработки было получение языка программирования, который мог бы стать единым для разработки проектов по заказам военного ведомства, главным образом, для разработки встроенных систем военного назначения и для больших военных компьютеров (на базе процессора iAPX 432 от Intel). Работа началась в 1975 году, с формирования набора требований к языку, который бы в полной мере удовлетворил разработчиков систем указанного типа. Первоначальный список требований, выпущенный под кодовым наименованием «Соломенный», был представлен на рецензию в ряд организаций и фирм, в течение двух лет последовательно уточнялся, в конечном счёте превратившись в итоговый документ под названием «Стальной».

После завершения формирования требований был проведён анализ, который показал, что ни один из имеющихся языков программирования не удовлетворяет требованиям в достаточной мере, так что было принято решение разработать новый язык. Конкурс на его создание был объявлен в 1977 году, разработчикам было предложено базироваться на одном из трёх языков: Паскаль, Алгол-68 или PL/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 года опубликованы изменения в стандарте Ады. Они коснулись, в основном, возможностей объектно-ориентированного программирования: введены интерфейсы, принят обычный для большинства гибридных языков синтаксис вызова метода, внесён ещё ряд дополнений.


4. Ада в СССР и России

В СССР в 80-х годах была организована Рабочая Группа по языку Ада при Госкомитете по науке и технике. Группа занималась изучением всех открытых (а также, по слухам, добытых разведкой закрытых) данных по языку Ада и исследовала возможность и целесообразность развития и использования Ады в СССР. Деятельность этой группы привела к концу 80-х годов к разработке компиляторов Ады для практически всех применяемых в СССР компьютеров. Было выпущено несколько книг по языку Ада на русском языке.

В МГУ проводилась работа по созданию собственных пакетов тестирования Ада-трансляторов на соответствие стандартам. В ЛГУ для создания Ада-системы была использована ранее разрабатываемая для реализации Алгола-68 система «Паллада», которую перевели на Аду. Система содержит интегрированную среду разработки, компилятор, текстовый редактор, отладчик, библиотеки, систему контроля версий и командный интерпретатор.

После распада СССР работа по распространению Ады практически прервалась. Правда, были приняты три программы развития разработки ПО на Аде (в министерстве обороны, министерстве гражданской авиации и министерстве образования и науки), но разработка их ведётся медленно и нескоординированно. В результате в России язык Ада малоизвестен, большинство современных российских программистов считают его «мёртвым языком» и ничего о нём не знают. Ада используется в России и СНГ отдельными энтузиастами. Тем не менее, язык применяется для промышленной разработки ПО. Известно несколько разработанных на Аде проектов, работающих в России. Среди них:

  • Станция документальной связи МО РФ. Основной задачей является обеспечение обмена документальной информацией в сетях передачи данных Министерства Обороны Российской Федерации. Программно-аппаратный комплекс был совместно разработан Производственной организацией «Вычислительная техника и средства автоматизации» (аппаратное обеспечение) и группой программистов сектора вне трасс Северо-Кавказского центра управления воздушным движением «Стрела». Программное обеспечение комплекса написано на языке программирования Ada с использованием компилятора GNAT. Поддержка распределенных вычислений осуществляется дополнительным компонентом GLADE.
  • Комплекс стандартного пилотажно-навигационного и связного оборудования для российского самолета-амфибии Бериев Бе-200 . Разработка проведена Научно-исследовательским институтом авиационного оборудования г. Жуковский, совместно с американской фирмой Allied Signal, Флорида, США. Использован комплекс разработки Ада-систем фирмы DDC-I на платформе Intel 80486.

5. Критика

С момента появления Ада подверглась критике некоторых признанных авторитетов в области разработки языков программирования, в первую очередь - за сложность синтаксиса и большой объём. В частности, язык критиковали Чарльз Хоар и Никлаус Вирт (участвовавшие со своим проектом в данном конкурсе, но выбывшие после первого этапа), а также Эдсгер Дейкстра.

Дейкстра усомнился, что язык такой сложности, как Ада, может быть обозрим и управляем.

Если Ada собирается выдать стандарт, желательно, чтобы он был недвусмысленно документирован. По меньшей мере две группы попытались сделать это; в результате обе выдали около 600 страниц формального текста. Это гораздо больше, чем необходимо, чтобы удостовериться в невозможности хотя бы твердо установить, что оба документа определяют один и тот же язык. Ошибка очевидной неуправляемости этих двух документов кроется не в двух группах, составивших их, не в принятом ими формализме, а лишь в самом языке: сами не обеспечив формального определения, могут ли его разработчики скрыть, что они предлагают неуправляемого монстра. То, что Ada уменьшит проблемы программирования и увеличит надёжность наших разработок до приемлемых границ, - это лишь одна из тех сказок, в которые могут поверить только люди с военным образованием.

Научная фантастика и научная реальность в информатике (Edsger W. Dijkstra, EWD952)

Хоар выразил своё сожаление тем, что «погремушки и побрякушки возобладали над фундаментальными требованиями надёжности и безопасности» и предостерёг от «армады ракет, летящих не туда из-за не обнаруженной вовремя ошибки в компиляторе Ады». Никлаус Вирт высказался более сдержанно, но тоже негативно. Он сказал: «Слишком много всего вываливается на программиста. Я не думаю, что, изучив треть Ады, можно нормально работать. Если вы не освоите всех деталей языка, то в дальнейшем можете споткнуться на них, и это приведёт к неприятным последствиям» . Жан Ишбиа, руководитель группы разработчиков Ады, выразив своё «уважение и восхищение» Виртом, не согласился с ним, сказав: «Вирт верит в простые решения сложных проблем. Я не верю в такие чудеса. Сложные проблемы требуют сложных решений».

Вызывает сомнения и процедура проверки соответствия компилятора стандарту языка путём тестирования. Из общих соображений ясно, что тестирование может найти несоответствие, но не может гарантировать правильность. Практическим подтверждением этого является тот факт, что сертифицированные компиляторы, будучи проверены на другом наборе тестов, обнаруживали несоответствие стандарту .

Сторонники Ады утверждают, что единственная альтернатива большому и сложному языку в больших проектах - это применение нескольких компактных языков, неизбежно порождающее проблемы с совместимостью, для избавления от которых и была придумана Ада. Они замечают также, что представление о сложности разработки на Аде верно лишь отчасти: написание простой программы на Аде действительно требует больше времени, чем на других, менее формальных языках, типа Си, но отладка и сопровождение программ, особенно крупных и сложных, значительно упрощается. По утверждению Стефена Цейгера из Rational Software Corporation , разработка программного обеспечения на Аде в целом обходится на 60 % дешевле, а разработанная программа имеет в 9 раз меньше дефектов, чем при использовании языка Си.


6. Распространение, перспективы

На практике оказалось, что Ада, заняв предназначенную ей нишу в военных и родственных им разработках встроенных систем, за пределы данной ниши так и не вышла, ни на Западе, ни в СССР, ни на постсоветском пространстве. Причин этому называется много. Противники языка упирают на его сложность и недостатки, сторонники говорят, прежде всего, об объективных обстоятельствах появления языка и негативных сторонах процесса его внедрения. Интересно мнение С. И. Рыбина, старшего научного сотрудника НИВЦ МГУ, консультанта компании AdaCore EU, эксперта по языку Ада рабочей группы ISO по стандарту языка. Он считает , что своими неудачами Ада обязана двум основным причинам:

  • Во время проектирования языка Пентагон предполагал, что всё новое ПО будет создаваться только на Аде. Из-за этого Ада получила крайне примитивные средства взаимодействия с программами на других языках. На практике оказалось, что написать на Аде вообще всё - нереально (хотя бы потому, что возникала необходимость взаимодействовать с готовыми разработками на других языках). Поэтому в отраслях, где не было жёсткого требования «писать только на Аде», предпочитали другие языки, более приспособленные к мультиязычной среде. В стандарте 1995 года проблема взаимодействия с другими языками была решена, но время оказалось упущено.
  • Парадоксально, но распространению Ады помешала финансовая и организационная поддержка Пентагона. Программы на Аде, написанные для военных, работали на самой мощной вычислительной технике, какая была доступна, поэтому разработчики компиляторов заботились в первую очередь о прохождении тестов ACVC, и только потом - об эффективности компилятора и создаваемого им кода. В начале 1980-х годов начался бум микрокомпьютеров, и трансляторы для распространённых языков (Паскаля, Си, Бейсика) были оперативно оптимизированы под маломощные системы. Для Ады стимула в такой модернизации не оказалось, в результате ставшие через несколько лет основной массой мирового вычислительного парка персональные компьютеры оказались без качественного транслятора Ады. Естественно, что Ада потеряла этот сегмент рынка. Лишь относительно недавно появился компилятор GNAT, качественный и производительный, но и здесь время оказалось упущено.

В настоящее время Ада достаточно прочно обосновалась в разработках больших встроенных систем повышенной надёжности, здесь у неё практически нет сильных конкурентов. Применение языка постепенно растёт, хотя и довольно медленно. По некоторым осторожным прогнозам [ ] , с удешевлением аппаратуры и распространением встроенных систем со сложным ПО рынок для программ на Аде может заметно вырасти, вырастет и использование языка.

Кроме того, Ада имеет, пусть и весьма ограниченное, применение в сфере высшего образования. В МГУ и Харьковском университете читаются спецкурсы по Аде. Однако, по словам того же С. И. Рыбина,

… сейчас на пост-советском пространстве в области программной индустрии и образования сложился очевидный порочный круг: в индустрии практически не знают про Аду, соответственно, со стороны индустрии нет запроса к образованию по подготовке Ада-специалистов, и из вузов в индустрию приходят новые люди, которые практически ничего не знают про Аду.


7. Операционные системы, написанные на Аде

7.1. Встроенные системы

  • MaRTE
  • RTEMS - ОС с открытым исходным кодом, разработана DARPA МО США
  • Ravenskar
  • RTOS-32 - проприетарная ОС

7.2. Системы в разработке

  • AuroraUX (проект по переписыванию ядра OpenSolaris, а потом DragonFly BSD на язык Ада)
  • Lovelace (операционная система на ядре L4)

7.3. Больше не существующие системы

  • BiiN™
  • Pulse™
  • AdaOS

8. Компиляторы Ада

Название Компания Версия Операционная система Сайт
AdaMagic SofCheck Ада 95 ? www.sofcheck.com
AdaMULTI Green Hills Software Ада 83, Ада 95, Си, Си++, Фортран Solaris SPARC, GNU/Linux x86, Windows www.ghs.com
DEC Ada Hewlett Packard Ада 83 OpenVMS h71000.www7.hp.com
GNAT AdaCore Ада 83, Ада 95, Ада 2005, Си Solaris SPARC, Linux x86/x86-64, Windows, другие libre.adacore.com
ICC Irvine Compiler Corporation Ада 83, Ада 95 DEC VAX/VMS, HP 9000/700, Solaris SPARC, DEC Alpha OSF/1, PC Linux, SGI IRIX, Windows www.irvine.com
Janus/Ada RR Software Ада 83, Ада 95 SCO, UnixWare, Interactive, MS-DOS, Windows www.rrsoftware.com
MAXAda Concurrent Ада 95 Linux/Xeon, PowerPC www.ccur.com
ObjectAda Aonix Ада 95 Solaris SPARC, HP-UX, IBM AIX, Linux, Windows www.aonix.com
PowerAda OC Systems Ада 83, Ада 95 Linux, AIX (Ада 95); IBM System 370/390 (Ада 83) www.ocsystems.com
Rational Apex IBM Rational Ада, Си, Си++ Solaris SPARC, Linux www-01.ibm.com
SCORE DDC-I Ада 83, Ада 95, Си, Фортран Solaris SPARC, Windows www.ddci.com
XD Ada SWEP-EDS Ада 83 OpenVMS Alpha/VAX www.swep-eds.com
XGC Ada XGC Software Ада 83, Ада 95, Си Solaris SPARC, PC Linux, Windows (Cygwin) www.xgc.com

За исключением GNAT и XGC (для некоторых платформ) вышеперечисленные компиляторы являются платными. Некоторые фирмы, например Aonix, предлагают бесплатные демонстрационные версии, ограниченные либо по времени использования, либо по функциональности.

Среды разработки NetBeans и Eclipse имеют плагины для работы с Ада.


9. Производные языки

Синтаксис языка Ада использован в таких языках, как:

  • PL/SQL

10. Интересные факты

  • Формально конкурс на разработку языка, в результате которого был создан язык Ада, был анонимным - группы разработчиков представляли свои проекты под кодовыми названиями, чтобы конкурсная комиссия не могла учитывать личности разработчиков при выборе победителя. Но на практике, как писал один из членов комиссии, вкусы разработчиков были настолько разными, что определить автора по проекту не представляло никакого труда.
  • Все языки, дошедшие до последних туров этого конкурса, были основаны на Паскале. В связи с этим Аду можно предварительно охарактеризовать как Паскаль, развитый с учётом заданных пяти основных требований. При этом авторы пошли в основном по пути расширения Паскаля новыми элементами. В результате получился существенно более сложный язык.
  • В русском языке существуют шутки, связанные с двусмысленностью выражения «Язык Ада», в том числе и основанные на параллели с Русским Алгоритмическим Языком, известным также как «Язык РАЯ». В программистский фольклор вошло и заключение статьи советского пропагандиста Мэлора Стуруа (1984 год):

Язык Пентагона - враг мира. Язык «Ады» - голос термоядерного ада… В языке «Ады» слышится проклятие роду людскому.


Примечания

  1. Справочное руководство по языку Ада 83. Глава 1.3. Цели и источники разработки - www.ada-ru.org/arm83/ch01s03.html
  2. Вадим Станкевич. Леди Ада - www.kv.by/index2006451104.htm
  3. Обновлённый стандарт на сайте iso.org - www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=45001
  4. Брябрин В. М. Программное обеспечение персональных ЭВМ. М.: Наука, 1988.
  5. 1 2 Интервью С. И. Рыбина - www.ada-ru.org/wiki/rybin
  6. , Объектно-ориентированные языки программирования , Языки программирования платформы NET , Ада , Статьи с примерами кода Ада .
    Текст доступен по лицензии Creative Commons Attribution-ShareAlike .

Сергей Бобровский

История этого языка начинается отнюдь не с 1975 года, когда Министерство Обороны (МО) США приняло решение о начале разработки единого языка программирования для американских вооруженных сил, а в дальнейшем и для всего НАТО. История его начинается с названия, ибо Ада - имя Августы Ады Лавлейс, считающейся первой программисткой, дочери английского поэта Байрона и некоей Анабеллы Милбэнк, с которой супруг расстался навсегда через месяц после рождения дочери, появившейся на свет 10 декабря 1815 года. Вообще, история кибернетики окутана мрачной тайной, и лишь по отрывочным фактам можно судить, что родоначальниками этой науки в последние двести лет являлись различные мистики и оккультисты, начиная от Августа де Моргана, одного из учителей Ады, и кончая сподвижниками Норберта Винера, изучавшими способы формирования общественного мнения и манипулирования им.

После того как Чарльз Бэббидж сконструировал свою механическую вычислительную машину, Ада написала для нее первую программу для вычисления коэффициентов Бернулли. В дальнейшем она разработала настоящую теорию программирования, ввела понятие цикла и еще нескольких ключевых терминов, которые почти дословно изучают сегодня студенты кибернетических факультетов! Сегодня Ада известна всем как первая программистка - и только, но удивляет, откуда у молодой девушки такие уникальные способности? На этот вопрос откровенно ответила она сама: "Клянусь Дьяволом, что не пройдет и 10 лет, как я высосу некоторое количество жизненной крови из загадок Вселенной, причем так, как этого не смогли бы сделать обычные смертные умы и губы. Никто не знает, какие ужасающие энергия и сила лежат еще неиспользованными в моем маленьком гибком существе...". Однако спонсоров на проект вычислительной машины не нашлось - ядерных ракет тогда еще не было, и Ада, проиграв на скачках все свое состояние и попав в грязную историю, скончалась в возрасте 37 лет, как и ее знаменитый отец.

Поэтому стоило ли американцам так превозносить Аду, используя ее имя в качестве названия для столь амбициозного проекта, вопрос весьма спорный.

Но вернемся к истории самого языка. Через пять лет после начала проекта сотни экспертов отобрали из 17 вариантов единственный, удовлетворяющий требованиям МО, язык, разработанный небольшой группой под руководством талантливого ученого Жана Ишбиа. Конечная версия международного стандарта ISO 8652:1987 была опубликована в 1987 году. По официальным сообщениям, в создании и доработке этого языка участвовали все лучшие специалисты мира в области программирования, что, однако, вызывает сомнение. Это, например, подтверждается отсутствием понятия объекта в первоначальном варианте Ады и неучастием, по очевидным причинам, в этом проекте советских программистов.

В развитие инфраструктуры Ады во всем мире были вложены десятки миллиардов долларов. Это привело к появлению амбициозных заявлений типа "20-й век пройдет под знаком Ады", однако, как обычно, жизнь все расставила по своим местам.

К сожалению для МО США (и соответственно к счастью для "потенциальных противников" Америки), выработка четкого стандарта на этот язык и создание эффективных компиляторов были завершены как раз в то время (начало 80-х), когда уже стал вырисовываться на горизонте программной индустрии новый язык Си++ с объектной идеологией. Теперь трудно сказать, что испытывал комитет разработчиков Ады, видя, как растет популярность Си++ и старой, хорошо забытой, объектной парадигмы мышления. Но выделенные средства уже были потрачены, стандарт создан, и обратной дороги не было.

Структура Ады очень похожа на Паскаль, а еще точнее, на Модулу. Синтаксис большинства операторов и описаний практически идентичен синтаксису Модулы, хотя она появилась практически в одно время с Адой, и трудно сказать, кто на кого оказал влияние и оказал ли влияние вообще. В Аду, в частности, было добавлено довольно много различных расширений, так что компактным, в сравнении с тем же Паскалем, этот язык назвать никак нельзя. По количеству возможностей он скорее напомнит PL/1. Но так как основной упор создатели Ады делали на соответствие пожеланиям американских "первых отделов", то средства закрытости (видимости) данных и возможность создания отдельных блоков с использованием только спецификаций (интерфейсных описаний модулей) других разработчиков были для своего времени самыми совершенными. Например, программист, реально писавший код для вычисления траектории полета крылатой ракеты, даже не представлял, где и для каких целей его модуль будет использоваться, хотя имел доступ к требуемым спецификациям других сотрудников и мог без проблем отлаживать свой участок кода. Из-за строгого разграничения доступа к различным уровням спецификаций подчас даже бывает невозможно определить, для чего и какими средствами будет вызываться данная процедура. Однако такое стремление к независимой разработке программ привело к весьма сложной системе взаимосвязей между спецификациями модулей и появлению некоторых "дыр", способных вызвать побочные эффекты, наличие которых, впрочем, МО США сочло даже полезным.

Значительно были усилены элементы типизации данных, а также более формализованы сами типы. Все функции, связанные с вводомвыводом, были исключены из стандартного синтаксиса, а обработка исключительных ситуаций стала неотъемлемой частью языка. Кроме того, была доведена до предела мощность управляющих конструкций, что делало Аду наиболее передовым среди других паскалеподобных языков.

Фирма Borland вскоре выпустила свой Turbo Pascal, в который было встроено понятие модуля, и приблизила по возможностям свою версию Паскаля к Аде, но в дальнейшем попыток создания необъектных языков программирования 3-го поколения, предназначенных для разработки сверхбольших проектов, к счастью, не предпринималось. Поэтому Ада поставила жирную точку в длинной веренице простых процедурных языков, начиная с Фортрана и Алгола. Фактически все, что только можно было придумать в рамках идеологии структурного программирования, было воплощено в Аде. Затем стремительно расцвело объектное программирование, и Ада отошла на второй план.

Однако этот язык по-прежнему занимает одну нишу, в которой равных ему пока нет. Помимо раздельной компиляции модулей и обеспечения иерархической секретности спецификаций, в этом языке было реализовано такое свойство, как поддержка параллельного программирования. Предпринятое на более-менее высоком уровне в Алголе-68, затем развитое в Модуле-2, оно воплотилось в очень мощных средствах Ады, так называемых задачах, способных выполняться независимо друг от друга на параллельных компьютерах. Это привело к рождению целой идеологии программирования, базирующейся на задачах, которые могли выполняться "псевдопараллельно" - на компьютере с одним процессором. При этом сама решаемая задача разбивалась на набор одновременно работающих процедур, независимо взаимодействующих друг с другом. Это немного напоминало способ решения задачи на Прологе: просто описывается некий виртуальный мир, а затем он как бы "запускается" на функционирование, и решение находится само собой.

Тем более удивительно, что МО США по тем или иным причинам отказалось от объектной идеологии, прекрасно воплощенной еще в

60-х годах в Симуле-67, и наверняка не раз пожалело об этом. Правда, в язык Ада была введена некая жалкая замена ряда возможностей, предоставляемых объектно-ориентированным программированием - так называемые шаблоны, т. е. процедуры с параметрами неопределенных типов. Но все-таки главными преимуществами Ады, позволяющими ей и сегодня выдерживать натиск более развитых языков, явились, помимо мощного финансирования, встроенная поддержка параллельного выполнения задач и мощные средства координации их взаимодействия. Необходимо отметить, что основная ориентация Ады - это отнюдь не системы автоматизации бухгалтерии в МО США, а чисто боевые задачи такого, например, рода, как микропроцессорная навигация в реальном времени самонаводящейся ракеты, где требуется одновременно обрабатывать информацию, непрерывно поступающую от множества самых разнообразных датчиков. Ранее такие задачи писались на ассемблере, что приводило к множеству ошибок и трудностям сопровождения. Для подобных задач Ада, конечно, подходит как нельзя лучше.

Однако Ада продолжает позиционироваться и как хорошее средство для разработки больших программных комплексов. Правда, теперь голоса в поддержку этого языка звучат уже тише, примерно так: "Ада, по крайней мере, не хуже Си". МО США, учтя свой главный промах - отсутствие объектов, в соответствии с современными требованиями к технологии разработки программ выработало новый стандарт языка ISO/IEC 8652:1985(E). Он описывает версию языка Ada95 (или Ada9X). Самое интересное, что эта версия является первой в мире объектно-ориентированной системой программирования, на которую международный стандарт введен, по-видимому, в приказном порядке (с Си++ так пока не получается). Кроме того, в языке была улучшена система согласования видимости данных в спецификациях модулей и добавлены средства повышения эффективности функционирования параллельных задач.

МО США довольно ревниво относится к своему дорогому детищу и даже зарегистрировало слово "Ada" как свою торговую марку. Правда, впоследствии вместо торговой марки МО решило использовать "Ada" как свой внутренний сертифицированный знак. Без особой радости МО США относится и к появлению коммерческих версий этого языка. Конечно, никто не вправе запретить вам написать свой компилятор, но, чтобы он получил коммерческое признание, необходимо его соответствие военному стандарту, а тестирование осуществляется только комитетом AJPO при МО США, который очень строго проверяет соответствие компилятора множеству требований, в том числе, очевидно, и чисто политических.

Тем не менее различные версии Ады можно получить, как это обычно бывает с языками программирования, на халяву, то бишь даром, только не пиратским способом, а просто freeware-версии, и, конечно, за деньги.

Из свободно распространяемых версий в первую очередь необходимо выделить компилятор GNAT - GNU Ada95. В рамках проекта GNU (свободно распространяемого ПО) его можно получить в исходных текстах. Работать он может и на компьютере с одним процессором, только надо, чтобы операционная система поддерживала многозадачность. Это может быть, например, какая-нибудь версия UNIX или OS/2. Что касается MS DOS - догадайтесь сами. Однако если очень хочется запустить сотню-другую параллельных процессов на вашей персоналке под MS DOS 6.x, то вполне можно попробовать Ada/Ed - компилятор и интерпретатор версии языка 1987 года, который, впрочем, совершенно несовместим со стандартом и не имеет ряда существенных элементов.

Если есть деньги, то ситуация, конечно, облегчается. В пределах месячной зарплаты среднего российского программиста можно приобрести, например, FirstAda и написать систему управления холодильником. Более дорогие системы для Windows, OS/2 или UNIX, сертифицированные МО США, вы можете попытаться приобрести непосредственно у фирм-разработчиков, коих насчитывается около десятка.

Интересно, что стандартизации подвергся не только сам язык, что позволило создавать легко переносимые программы, но и набор вспомогательных средств разработчика - различные библиотеки ввода-вывода и организации графического интерфейса, препроцессоры, верификаторы, генераторы кода, анализаторы логической структуры исходного кода, программы для тестирования компиляторов и т. д. Конечно, имеются крупные пакеты, включающие в себя все стандартизированные средства разработки, но стоят они, по всей видимости, очень дорого.

Было бы весьма интересно узнать, не велись ли в СССР работы над языками, предназначенными для решения похожих военных задач. Или наши спецы писали только на Ассемблере?

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

Язык Ada разработан по инициативе Министерства обороны США в 1980-х годах, назван в честь математика Ады Августы Лавлейс (1815-1851). При проектировании языка в первую очередь внимание акцентировалось на надежности и эффективности - язык создавался специально для разработки больших программных комплексов реального времени для встроенных систем, к которым предъявляются высокие требования надежности; в первую очередь, это системы военного предназначения.
Язык Ада основан на идеях структурного программирования и обеспечивает разработку сложных многомодульных программ, высокую степень машиннонезависимости и переносимости. Ада содержит такие возможности паскалеподобных языков, как определение типов, общие управляющие структуры и подпрограммы, а также достижения теории языков программирования, полученные после 1970 года. Язык поддерживает логическую модульность, для которой данные, типы и подпрограммы - все могут быть пакетами. Физическая модульность достигается раздельной компиляцией. Язык Ада поддерживает программирование в реальном масштабе времени за счет механизмов распараллеливания и обработки исключений. Системное программирование поддерживается за счет доступа к системно-зависимым параметрам и управлением точностью при представлении данных.

К 1974 году в структурах Министерства обороны США использовалось множество различных языков программирования. Это увеличивало затраты времени и средств на разработку новых систем, на техническую переподготовку персонала. Руководители министерства пришли к выводу о необходимости использования единого языка программирования. В 1975 году был согласован список требований к такому языку. Ни один из существовавших на тот момент языков программирования (таких, как Паскаль, ALGOL-68 или PL/1) не соответствовал выдвинутым требованиям. Поэтому в 1977 году было принято решение создать новый язык, и был объявлен конкурс на его разработку. Из всех предложений было отобрано четыре (каждое из которых являлось расширением Паскаля), для последующего пересмотра и доработки. Позже, для дальнейшего уточнения, из них отобрали два, и в финале выбрали проект, представленный компанией Cii-Honeywell Bull. Этому языку было дано название Ada (изначально язык назывался DOD-1).

В 1983 году был принят стандарт языка ANSI/MIL-STD-1815A, а в 1987 - международный стандарт ISO 8652. В 1987 году появились и первые эффективные трансляторы Ады. Стандарт ISO был пересмотрен в начале 1995 года (ANSI/ISO/IEC 8652). Новый стандарт исправлял многие упущения и недостатки оригинального языка, и дополнял его многими новыми полезными свойствами, такими, как процедурные типы, базированные указательные типы (то есть указатели на нединамические объекты), иерархические библиотеки, дополнительные средства управления параллелизмом, множество стандартных библиотек. Кроме того, в Аде-95 появилась поддержка объектно-ориентированного программирования.
Следующий стандарт получил неформальное название Ada-2005, несмотря на то, что в 2005 году он еще не был принят. Ада-сообщество приняло решение отойти от традиции в неофициальном назывании стандарта по году опубликования, поскольку в 2005 году были согласованы все его основные параметры. В язык добавились множественное наследование, префиксная форма доступа к методам объектов, более гибкие ссылочные типы, улучшенное управление задачами и большое количество новых стандартных библиотек. Кроме того, Ада-2005 удовлетворяет стандарту ISO/IEC 10646 (2003), что позволяет использовать в названиях идентификаторов (имена переменных, функций) буквы русского и греческого алфавитов.
Ада считается единым языком программирования как для вооруженных сил США, так и для НАТО .

Кроме того, Ада используется для построения больших систем к которым предъявляются высокие требования по надежности, таких как: управляющие компьютерные системы для авиации (в том числе и гражданской); управляющие компьютерные системы для скоростных железных дорог; банковские системы; промышленная автоматика и робототехника; медицинская техника; телекоммуникационные системы.

Ада используется в высших учебных заведениях США и Западной Европы, как основа для изучения программирования, часто применяется в научно-исследовательских разработках. Ада-программа управляет движением поездов без машинистов в парижском метрополитене. Ряд фирм специализируются на разработке компиляторов, различных библиотек и инструментальных средств, охватывая широкий спектр аппаратных платформ и операционных систем. Кроме коммерческих средств разработки, существуют свободно доступные версии компиляторов, такие как ObjectAda от Aonix или GNAT от Ada Core Technologies.

Ада - самый стандартизованный язык программирования. Международный стандарт был принят до того, как появились первые работающие версии трансляторов, что позволило избежать несовместимости различных диалектов Ады. Ада превосходит СИ и C++ по строгости типизации данных, гибкости раздельной компиляции, возможности создания высоконадежных систем реального времени, наличием средств строгого контроля за параметрами функций и выходом индексов за границы массивов (80% ошибок, возникающих при создании программ на C/C++, связано именно с этим) и машинно-независимого представления двоичных значений (вместо битовых операций выполняется выборка полей записи). При этом Ада прозрачна семантически и синтаксически, поэтому изучать ее проще, чем Java.

Ада уступает C/C++ в поддержке новых операционных систем, а также в наличии средств сопровождения, отладки и формирования графических интерфейсов. Но в стандарт языка входят автоматически формируемые спецификации для стыковки с другими языками программирования, и на практике вместе с Адой применяются математические библиотеки Фортрана, системные функции, написанные на Си, классы Java для работы с Интернет. Поэтому встречаются многоязыковые интегрированные среды разработки, поддерживающие другие зыки, кроме Ады, например, IBM Rational Ada Developer (C/C++/Ada).

В Аде реализована как автоматическая сборка мусора (как в Java или C#), так и возможность непосредственного высвобождения памяти (как в C, C++, Pascal). Как и в C/C++, в Аде доступны богатые низкоуровневые средства. Встроенная поддержка многозадачности является уникальной особенностью языка программирования Ада, которая выгодно отличает его от большинства языков программирования. Эта поддержка обеспечивается не расширениями или внешними библиотеками, а с помощью стандартизированных средств, которые встроены непосредственно в язык программирования.