Ада язык программирования реферат

Обновлено: 04.07.2024

оператор действительно означает безвыходное состояние.

Сотрудники, входящие в группу разработки языка BABBAGE,

постоянно работают над новыми особенностями языка, что будет

способствовать беспрерывному росту уровня эффективности данного

языка при его использования заказчиками. Например, разработчики

языка BABBAGE в настоящее время заняты работой над оператором

ALMOST EQUAL SIGN ("почти с одинаковым знаком"), используемым

для сравнения двух чисел с плавающей запятой. В работе над этим

новым нюансом уже удалось преодолеть значительные трудности.

Ни один язык, неважно каким он является, не может быть

использован сам по себе. И для языка BABBAGE совершенно

необходима детально разхработанная операционная система. После

нескольких попыток использовать существующие системы сотрудники

группы решили написать собственную "виртуальную" операционную

систему. Любому известна операционная системя виртуальной

памяти. Но сотрудники группы по разработке языка BABBAGE

сделали попытку найти несколько иное решение, зайдя подальше.

Новая операционная система носит название операционной системы

виртуального времени (VTOS). В то время как системы виртуальной

памяти обеспечивают виртуальные свойства памяти ЭВМ, VTOS

выполняет ту же функцию по отношению ко времени процессора.

В результате ЭВМ может одновременно работать с неограничен-

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

которая физическм хранит часть данных в ЗУ на дисках, VTOS

должна также применять некоторые ухищрения для достижения своей

цели. Хотя пользователь уверен, что все его задания выполняются

в текущий момент времени, некоторые из этих заданий в действи-

тельности будут выполняться на следующей неделе.

Как можно видеть, язык BABBAGE все еще находится в стадии

разработки. Группа сотрудников по разработке языка BABBAGE

нуждается в предложениях специалистов по новым средствам для

этого нового мощного языка программирования. Автор статьи,

являясь одним из сотрудников группы разработки, обращается ко

всем, кто работает в области обработки данных с помощью ЭВМ,

с просьбой оказать поддержку группе в разработке нового языка

программирования (будут приняты все предложения от всех лиц,

желающих принять участие в работе группы).

Краткое введение в язык Ада

Возможно, у вас уже возник вопрос: "Зачем знать и использовать Аду?". В ответ на этот вопрос Я могу привести как минимум три хороших причины:

Это просто! Я запомнил программу типа "Hello World" за несколько минут.

Это мощно! Ада была разработана таким способом, чтобы обеспечить все запросы программиста и пригодна для решения практически любых задач.

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

Предыстория Ады

В далеком 1957, ученый Джон Бэкас (John Backus) работавший в то время в IBM разработал новый язык программирования, с целью облегчить решение математических и научных проблем для инженеров, ученых и математиков. Этот язык называный FORTRAN, что является сокращением слов FORmula TRANslation (трансляция формул), имел и имеет огромный успех; даже в настоящее время, спустя cорок лет, он все так же активно используется в разработке программ и продолжает развиватся.

По другую же сторону Атлантики, в Европе, несколько ученых, которые знали о существовании Фортрана сформировали комитет для создания собственного языка способного заменить его. Спустя всего лишь месяц, в 1958 году, была завершена разработка нового языка программирования известного теперь под именем ALGOL, что является сокращением от слов ALGOrithmic Language (язык алгоритмов). Вслед за этим он был очень быстро стандартизован.

Так как существует традиция называть стандарт языка по году в который он был создан, то и создатели Алгола решили от нее не отходить назвав его Алгол 58. Впоследствии люди со всей Европы продолжили работу над Алголом, и спустя два года появился новый улучшенный вариант — Алгол 60.

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

SIMULA, созданный учеными из университета города Осло в Норвегии.

CPL, созданного Кеном Томпсоном (Ken Thompson) из AT&T Bell Laboratories как инструмента для написания ОС MULTICS, которая стала предшественницей Unix. CPL также является непосредственным предком С.

Последним, что вовсе не значит худшим, был Паскаль, написаный Никлаусом Виртом (Niklaus Wirth) из Швейцарского Федерального Института Технологий в Цюрихе с целью обучения студентов в колледже. Из которого в последствии мы и получили Аду.

Итак, теперь мы знаем достаточно о предшественниках Ады, потому приступим к непосредственной истории создания этого прекрасного языка.

В 60е-70е годы Министерство Обороны США (the United States Department of Defense) использовало для своих нужд более чем 2000 различных языков программирования (в основном для систем повышенной надежности). По большей части это были языки разработаные для выполнения какого-то конкретного задания. В результате Министерством Обороны была сформирована Рабочая Группа по Языкам Высокого Уровня (High-Order Language Working Group (HOLWG)), целью которой было найти решение создавшемуся в то время, так назваемому, "кризису программного обеспечения"

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

Вместо того чтобы создавать новый язык самим, было решено провести конкурс. Было образовано несколько команд, каждой из них был присвоен свой цвет. По случайному стечению обстоятельств все команды создали свои язык использовав Паскаль в качестве основы. В результате победила зеленая команда -- фирма Ханейвелл-Балл (Honeywell-Bull) из Франции. Познее, язык был назван "Ада" в честь леди Ады Августы Лавлейс (Lady Ada Augusta Lovelace), дочери известного поэта Байрона и ассистентки математика Чарльза Байбиджа (Charles Babbage), который изобрел Аналитическую Машину. Леди Аду принято считать первым программистом.

В 1979, МО США создало первый черновой вариант документации по Аде, затем язык был стандартизован в 1983 году. Сейчас этот стандарт принято называть "Ада83", первоначально он находился под полным контролем со стороны МО США, и ни кто не мог создать компилятор с языка без авторизации оного со стороны Министерства Обороны.

Однако все изменилось в 1987 году, когда МО США предоставило Аду в публичное распоряжение, и на язык был создан стандарт Международного Института по Стандартизации (International Standards Organization (ISO)). К 1990 году появилось более 200 проверенных на соответсвие стандарту компиляторов с этого языка, еще познее в 1995 году появился новый стандарт назваемый Ада95. Ада в редакции 95го года стала полностью объектно-ориетированым языком, а также оснащена очень удобными средствами взаимодействия с кодом написаным на Си, Фортране, Коболе и прочих языках.

Где взять Аду?

Скорее всего вы думаете, что компилятор для такого мощного как Ада языка стоит очень и очень дорого, однако вы заблуждаетесь, вы наверное удивитесь, но один из наиболее мощных и популярных компиляторов с Ады95, GNAT (Gnu/New york University Ada Translator) не будет стоить вам ни копейки (за исключением технической поддержки, но только в том случае если вы захотите ее иметь).

GNAT можно скачать с FTP-сервера Нью-Йоркского Университета ftp://cs.nyu.edu из каталога /pub/gnat. В нем содержатся различные версии GNAT'а для различных ОС например Unix, включая SunOS/Solaris, Linux, NetBSD, SGI IRIX, IBM's AIX, DEC's Digital Unix.

Так же там существуют версии GNAT'a для WinNT, Win95, MacOS, и даже версия для DOS называемая "EZ2Load".

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

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

Также, Аде присуща своя собственная терминология, и Я далее буду использовать несколько таких слов, со значением которых вы возможно не знакомы:

пакет (package), файл искодного кода программы в котором хранится определенный набор связанных по смыслу команд, которые делают например такие вещи как печать текста, математические вычисления, и т.д. Они в чем-то похожи на заголовки в языке Си, но не являются прямой аналогией.
(прим перев: они ближе к модулям в Турбо Паскале (хотя точнее на оборот, они слизаны с Ады)

переменная (variable), это именованая область памяти в которой может хранится некоторое значение, например число, символ, или слово.

предложение или инструкция (statement), команда для выполнения специфического действия.

Все программы на Аде имеют следующую базовую структуру:

with Имя_Пакета; use Имя_Пакета;

procedure Имя_Процедуры

end Имя_Процедуры;

Имя_Процедуры часто является и именем программы.
(прим перев: В отличие от Паскале здесь нет выделенного блока begin - end, программой может считатся любая процедура библиотечного уровня (т.е. не вложеная в другую процедуру/функцию) без параметров).

Место где написано Переменная : Некоторый_Тип_Значений является объявлением переменной. Возможно вы спросите, а что значит "Некоторый_Тип_Значений"? Это означает какого типа значения могут хранится в переменной. Другими словами, если вы хотите иметь переменную для целых чисел вам необходимо написать Variable : Integer;. Если вам нужны числа с пляавающей запятой, то Variable : Float; и т.д.

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

Инструкция begin начинает последовательность настоящих команд программы.

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

Предлоджение end Имя_Процедуры; завершает последовательность команд программы. Теперь Я могу сказать вам, что эта маленькая "демо" програмка была нужна, чтобы просто показать вам структуру программы, но теперь мы можем посмотреть и на настоящую рабочую программу. По традиции ей будет, можно сказать, классическая ;-) программа выводящая "Hello World", которая обычно и используется при первом знакомстве с новым языком.

with Ada.Text_IO; use Ada.Text_IO;

procedure Hello_World is

-- А переменные нам здесь не нужны :)

Put ("Hello world!");

end Hello_World;

Пакет "Text_IO" содержит множество функций для операций ввода/вывода;
он используется программами которым необходим вывод и получение текста.
(прим перев: как и в Си по множеству причин здесь нет "встроенных" операций для ввода/вывода, но есть стандартный пакет таких операций).
Так же Я должен заметить за чем нужно писать "Ada." перед "Text_IO". Поскольку Ада может взаимодествовать со множеством языков -- например вы можете связать со своей программой процедуры на Си или Коболе -- и может случится так что у вас будет множество библиотек с сотнями пакетов, поэтому необходимо указывать откуда их брать.
(прим перев: в Аде можно организовать набор пакетов в определенную иерархическую структуру со взаимными связями между кодом в них. В данном случает Text_IO это дочерний пакет от пакета Ada).

Процедура (и программа в данном случае) называется "Hello_World." Предложения "with" и "use" позволяют использовать команды из них в нашей программе. Если вы хотите запустить эту программу, вы можете сохранить ее под именем hello_world.ada. Замечание: если вы используете GNAT вы должны сохранить ее как hello_world.adb.

Даже если вам кажется, что использование скобок усложняет дело, они все равно нужны. Вы неможете просто взять и написать "Put "Hello world!";"!

Так же заметте, что многи имена начинаются с заглавных букв Notice also that many of the names begin with capital letters ("Text_IO" например). Это-го не требуется делать в обязательном порядке, но все же желательно делать так для удобства чтения ваших исходников.

Следующая программа несколько сложнее предыдущей. Она спрашивает у пользователя его/ее имя и затем печатает его на экране наряду с другим текстом:

with Ada.Text_IO; use Ada.Text_IO;

procedure Get_Name is

Name : String (1..80);

Put ("Введите ваше имя> ");

Get_Line (Name, Length);

Put (Name (1..Length));

Put (", Я думаю вам понравиться изучать Аду!");

end Get_Name;

Как это все работает? Мы уже знаем, что такое Text_IO, а предложение procedure Get_Name is говорит само за себя

Переменная Name содержит имя введенное пользователем, а тип String (1..80) говорит компилятору о том, что Name это строковая переменная с длинной до 80 символов. Вторая переменная, Length, это целое число используемое для хранения действительной длинны строки введенной пользователем.

А теперь об остальном: когда программа выполняется, она печатает "Введите ваше имя> ", а затем ждет его ввода от пользователя. после того как он введет имя и нажмет Enter программа пропускает строку (New_Line;) и печатает "Привет [имя пользователя], Я думаю вам понравиться изучать Аду!".

Визуальное программирование на Аде?

ObjectAda существует в двух вариантах как для MS Windows, так и для X-Windows (X-Windows это стандартная оконная графическая система ОС Unix.)

Однако учтите, что это коммерческий продукт, правда он доступен для свободного скачивания в облегченном варианте и весит около 60~70Mb.

Основной документ по 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-х годов назрела необходимость пересмотра стандарта, работа по пересмотру также была проведена под управлением и на средства Министерства обороны США. Стартовал новый международный проект, который завершился утверждением в конце

Если Вам нужна помощь с академической работой (курсовая, контрольная, диплом, реферат и т.д.), обратитесь к нашим специалистам. Более 90000 специалистов готовы Вам помочь.

Гост

ГОСТ

Язык программирования Ada принадлежит к числу модульных. Для него характерны строгая типизация, синтаксис, ведущий происхождение от языков Паскаль и Алгол. Назван в честь Ады Лавлейс, математика первой половины XIX в., которую часто называют первым в мире программистом в связи с ее работами по созданию алгоритмов для вычислительной машины Чарльза Бэббиджа.

Рисунок 1. Логотип языка Ada. Автор24 — интернет-биржа студенческих работ

История развития языка Ada

Ada появился в США на рубеже 1970-1980-х гг. как язык программирования для бортовых систем управления военными объектами. Он не принадлежит к числу самых популярных языков программирования, поскольку не рассчитана на создание эффектных пользовательских приложений. В этом языке слабо развиты такие стороны, как функционал, связанный с пользовательским интерфейсом, взаимодействие с базами данных. Тем не менее, язык Ada нельзя назвать устаревшим. На нем в США разрабатывается программное обеспечение для военной промышленности, авиации, энергетики и других инфраструктурных систем. Это нишевый, но, тем не менее, активно используемый продукт.

Язык Ada был создан для решения конкретных задач, причем предметная область его применения была заранее хорошо исследована и описана. Группа его разработчиков сформировалась на основе тщательно организованного международного конкурса.

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

Готовые работы на аналогичную тему

Попытки включить Ada в систему ГОСТ предпринимались в конце 1980-х гг. и в СССР. На этом языке велась разработка ПО для лайнера Ил-96-300, амфибии Бе-200, космической станции Альфа. Он использовался и в некоторых других проектах государственного уровня. Ada довольно активно применяется для создания промышленных и транспортных систем во Франции (беспилотные поезда метро), Японии, Китае.

На сегодняшний день актуальной является версия Ada-2012.

Специфика Ada

Можно назвать следующие особенности Ada, многие из которых являются уникальными:

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

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

Ada соответствует парадигме объектно-ориентированного программирования. Есть даже мнение, что идеи классов в C++ позаимствованы из реализации Ada-83. При этом спецификация языка Ada существенно компактнее, чем у конкурирующих продуктов.

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

Практика программирования на Ada

Рисунок 2. Разработка на зыке Ada в IDE Wind River. Автор24 — интернет-биржа студенческих работ

Программа "Hello, World!" выглядит на Ada следующим образом:

Рассмотрим более сложную программу - функцию, сравнивающую две строки без учета регистра, т.е. строки "Привет!" и "ПрИвЕт!" считаются одинаковыми, а строка "Превед!!" - отличающейся от них.


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

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

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

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

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

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

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

Что такое Ада

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

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

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

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

Почему Ада?

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

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

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

Ада и Java

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

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

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

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

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

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

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

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

Заключение

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


Язык программирования Ада родился в середине 1970-х, когда министерство обороны США и министерство обороны Британии решили заменить сотни специализированных языков программирования для встроенных вычислительных систем, всё чаще использовавшихся в военных проектах. Язык Ада разрабатывали так, чтобы это был единственный язык, способный работать на всех этих встроенных системах, и при этом обеспечивавший надёжность и быстродействие уровнем не хуже специализированных.

После обновления от 1995 года язык приспособили для систем общего назначения, добавив объектно-ориентированное программирование, не теряя из вида ключевые ценности – надёжность, простоту поддержки и эффективность. Сегодня написанное на Ада ПО формирует основу не только военного оборудования, но и коммерческих проектов в сфере авионики и систем управления воздушным трафиком. Код на Ада управляет такими ракетами, как Ариан-4 и 5, многими спутниками, и бесчисленным количеством других систем, в которых небольшие сбои могут иметь серьёзные последствия.

Возможно, Ада подойдёт и для использования в вашем следующем встроенном проекте.

Планирование военного качества

Главными пунктами запросов были:

  • Гибкая схема работы общего назначения, адаптирующаяся к нуждам встроенных вычислительных приложений.
  • Надёжность. Язык должен способствовать проектированию и разработке надёжных программ.
  • Лёгкость поддержки. Код должен быть читаемым, а программные решения — ясными.
  • Лёгкость производства эффективного кода. Должна быть возможность легко определять неэффективные конструкции.
  • Отсутствие ненужной сложности. Семантическая структура должна быть последовательной, и минимизировать количество концепций.
  • Независимость от машины. Язык не должен быть привязан к каким-то деталям ОС или оборудования.
  • Полное определение. Все части языка должны быть полностью и недвусмысленно определены.

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

Встроенная по умолчанию защита

Система типов в Аде не просто строгая – её иногда называют сверхстрогой, поскольку она не позволяет никакого неявного приведения типов. Возьмём, к примеру, этот отрывок кода на С:


Это допустимый код; он откомпилируется, запустится и выдаст очевидный результат, обозначающий ответ на главный вопрос жизни, вселенной и всего такого. В Аде так не получится:

Любой программист, вязнувший в болоте из смеси стандартных определений типов C, Linux и Win32, может оценить по достоинству отсутствие необходимости рыться в бесчисленных страницах документации и плохо отформатированного кода, чтобы понять в каком из typedef или макросе содержится реальное определение чего-то, что только что помешало компиляции или вылезло при отладке.


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

На этапе работы можно проверить ошибки типа неверного доступа к памяти, переполнения буфера, выхода за установленные пределы, ошибки ±1, доступа к массиву. Затем их можно безопасно обработать, вместо того, чтобы ронять всё приложение.

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

Наконец, компилятор или программа во время исполнения решает, как передавать данные в функцию или из неё. И хотя направление передачи каждого параметра указывать нужно (‘in‘, ‘out‘, или ‘in out‘), но итоговое решение о том, передаются ли данные через регистры, кучу или по ссылке, принимает компилятор или программа во время выполнения, но не программист. Это предотвращает проблемы с переполнением стека.

Ravenscar profile и диалект SPARK являются подмножествами Ады, причём последний концентрируется на контрактах. Со временем особенности этих подмножеств перенесли в спецификацию основного языка.

Программирование на языке Ада сегодня

ANSI установила спецификацию Ada 83 в 1983. Тогда только-только вышел Intel 80286, а процессору Motorola 68000 было всего четыре года. Это была заря домашних компьютеров, а также неуклюжий переход из 1970-х в 80-е, когда популярность микроконтроллеров начала расти. Представьте себе микроконтроллер Intel 8051 и его потрясающие 4 кБ EPROM и 128 Б оперативной памяти.


Популярные сегодня микроконтроллеры во много раз более мощные по сравнению с теми, что были в 1983. Можно взять любой ARM, AVR, RISC-V, и т.п. (или Lego Mindstorms NXT kit) и начать под него разработку при помощи одинаковых инструментальных средств на базе С. Неудивительно, что популярный компилятор GNAT Ada основан на GCC. Также в разработке в рамках проекта DragonEgg находятся инструментальные средства на базе LLVM.

Существуют две версии инструментальных средств Ады на основе GCC. Вариант AdaCore поддерживается коммерчески, однако имеет свои особенности. Вариант от Free Software Foundation, естественно, свободен, и по функциональности сравним с AdaCore.

Для лёгкого старта используйте либо GNAT Programming Studio IDE (GPS), идущее в комплекте с AdaCore (копия на Github), или пишите код в текстовом редакторе и компилируйте его вручную, или при помощи Makefiles. Инструментарий тут немного посложнее, чем у С или С++, однако разработку облегчает утилита gnatmake, включающая в себя все инструменты, и работающая примерно как GCC.


Пример небольшого, но нетривиального проекта на Аде, написанного вашей покорной слугой в виде парсера аргументов командной строки. Там вы найдёте Makefile, находящийся в папке проекта ada/, где определяются папки, в которых можно найти файлы спецификации пакетов (.ads) и сами пакеты (.adb).

Эти файлы примерно соответствуют файлам с заголовками и кодом от С и С++, однако имеют и важные отличия. В отличие от С, у Ады нет препроцессора, и она не объединяет код и заголовки для создания компилируемых файлов. Вместо этого идёт ссылка на название пакета, указанное в спецификации. Название файла .ads тоже не обязано совпадать с названием пакета. Это даёт большую гибкость и предотвращает распространённые в С проблемы с циклической зависимостью или необходимостью линковки заголовков в определённом порядке.

Куда двигаться далее

Скачав инструментарий GNAT, запустив GPS или Vim/Emacs, и некоторое время посмотрев на мигающий курсор на пустой странице, вы можете задуматься над тем, с чего начать. К счастью, мы недавно освещали проект на основе Ады с использованием ядра PicoRV32 RISC-V. Он использует распространённый ICE40LP8K CPLD, который поддерживают инструментарии FPGA с открытым кодом, например, Yosys.


В плане документации есть вводные статьи для начинающих, рассчитанные на разработчиков Java и С++, справочник по AdaCore, справочник на WikiBooks, и, конечно же, документация Programming in Ada 2012. Это, возможно, наиболее полные справочники, за исключением документации Ada 2012 Language Reference Manual (LRM) на 945 страниц.

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

Читайте также: