Язык АДА

Основной документ по Ada'е -- "Language Reference Manual", обычно называемый просто "Стандарт" или "RM95" ( "RM 95", а то и просто "RM" ), некоторые по старинке говорят "LRM", но это -- общепринятое сокращение для стандарта Ады-83. Изложено, как и положено стандарту, суховато, но строго, с примерами и ссылками на смежные вопросы. В отличие от пары-тройки других "стандартов", которые мне привелось посмотреть, это, действительно, Стандарт, а не рассуждения на тему об очередной версии компилятора и не учебник программирования на базе данного языка, но, между тем, он вполне пригоден для чтения. Второй документ -- "Ada 95 Rationale" ( обычно -- "Rationale" ). Это изложение и _обоснование_ базовых _проектных решений_ языка (ответы на вопросы "а почему сделано именно так?") и демонстрация этих решений в деле. Соответственно, более вольное, чем Стандарт, кое в чем менее полное, а кое в чем более ппространное. С развернутыми примерами, пояснениями, аналогиями и прочей весьма полезной "белетристикой". Читается как хороший детектив. Литературные достоинства ( без тени иронии ) этого документа отмечены не только мной. Я бы настоятельно рекомедовал эту книгу в качестве именно _учебника_ для подготовленного и _мотивированного_ читателя ( такому читателю нет резона тратить время на традиционные университетские учебники ), а RM использовать как справочник.

Язык Ада – двадцать лет спустя

Сергей Рыбин, Василий Фофанов

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

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

Несмотря ни на что, в отдельных областях техники Россия все еще "впереди планеты всей". И одна из них – конструирование и производство самолетов-амфибий. Всемирно признанным лидером в этой области является ТАНТК им. Г. М. Бериева. Недавно это предприятие приобрело средства разработки бортового программного обеспечения на базе языка Ада для использования при модернизации своей последней модели Бе-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, который является компонентом предопределенной библиотеки.

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

:

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


Страница: