Русская Википедия:Ада (язык программирования)

Материал из Онлайн справочника
Версия от 01:30, 19 июля 2023; EducationBot (обсуждение | вклад) (Новая страница: «{{Русская Википедия/Панель перехода}} {{Другие значения|Ада}} {{Карточка языка программирования | name = Ада | logo = файл:Ada horizon green logo with slogan.svg | semantics = мультипарадигменный: Конкурентное программирование|конкуре...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

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

Особенности

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

Синтаксис

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

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

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

Программы — модульные, механизм контроля импорта-экспорта описаний между модулями включает две разные директивы: одну для подключения другого модуля (with), другую — для импорта его описаний (use). Также существует возможность переименовать модуль при импорте (rename) — этот вариант позволяет использовать для обозначения пакета более удобные программисту идентификаторы. Пакеты (один из типов модулей) могут содержать заголовок и приватную часть — то, что содержится в ней, не экспортируется и другим модулям недоступно. Поддерживается механизм обобщённых (generic) модулей: пакетов, процедур и функций, позволяющих описывать алгоритмы обработки данных без указания конкретного типа.

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

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

Hello, world!

Шаблон:Викиучебник Пример программы «Hello, world!»:

with Ada.Text_IO;

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

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

История

Разработка языка была проведена в рамках международного конкурса, организованного и профинансированного министерством обороны США. Целью разработки было получение языка программирования, который мог бы стать единым для разработки проектов по заказам военного ведомства, главным образом, для разработки встроенных систем военного назначения и для больших военных компьютеров (на базе процессора iAPX 432 от Intel). Работа началась в 1975 году с формирования набора требований к языку, который бы в полной мере удовлетворил разработчиков систем указанного типа. Первоначальный список требований, выпущенный под кодовым наименованием «Strawman» («Соломенный»), был представлен на рецензию в ряд организаций и фирм, в течение двух лет последовательно уточнялся, пройдя через «Woodenman» («Деревянный»), «Tinman» («Оловянный»), «Ironman» («Железный») и в конечном счёте превратившись в итоговый документ под названием «Steelman» («Стальной»). «Steelman» был выпущен в июне 1978 года [DoD 1978][4].

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

В 1983 году язык был официально стандартизован ANSI. Стандарт языка ANSI/MIL-STD-1815-A-1983 был утверждён 17 февраля 1983 года. Министерство обороны США сделало наименование «Ada» зарегистрированной торговой маркой, запретив выпускать трансляторы языка, не прошедшие официальную процедуру тестирования на соответствие стандартам. Процедура состояла в прогоне через тестируемый компилятор большого количества (более 1000) тестовых программ (так называемый комплект ACVC), для каждой из которых был однозначно определён результат тестирования: либо удачная компиляция, либо выдача вполне конкретного сообщения об ошибке. Тестирование проводилось по принципу «всё или ничего» — при ошибке в обработке хотя бы одного тестового примера компилятор считался не прошедшим тест, причём тестирование было действительно только на той аппаратной и программной платформе, на которой оно проводилось. Таким образом была в зародыше подавлена возможность образования диалектов языка Ада.

В 1987 году язык Ада был официально стандартизован ISO. С этого момента Министерство обороны США перевело язык в общественное достояние.

К 1990 году в мире существовало уже около 200 компиляторов, соответствовавших стандарту языка Ада.

В 1995 году был принят новый стандарт Ады, известный как Ada95. В язык были введены средства объектного программирования. Кроме того, язык был дополнен более развитыми средствами для взаимодействия с программами, написанными на других языках.

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

В 2012 году ISO принят и опубликован новый стандарт языка[6].

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

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

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

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

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

Критика

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

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

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

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

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

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

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

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

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

Тем не менее, по некоторым осторожным прогнозам, с удешевлением аппаратуры и распространением встроенных систем со сложным ПО рынок для программ на Аде может заметно вырасти:

Шаблон:Начало цитаты… Ада достаточно прочно занимает нишу больших встроенных систем с повышенными требованиями к надежности, и едва ли она уступит кому-либо эту нишу в обозримом будущем. Рост производительности аппаратных компонент при одновременном падении их стоимости ведет к тому, что встроенные системы становятся все сложнее и сложнее, и может так оказаться, что потенциальный рынок для Ада-приложений вскоре существенно вырастет.Шаблон:Конец цитаты

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

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

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

На Аде написан ряд операционных систем, среди них - MaRTE Шаблон:Wayback, RTEMS (система с открытым исходным кодом, разработанная DARPA МО США, используется в ракетных системах и на борту автоматической межпланетной станции Mars Reconnaissance Orbiter как управляющая радиомодулем «Electra»), Шаблон:Iw, RTOS-32. В разработке находится ещё несколько проектов создания операционных систем на Аде, среди них - AuroraUX — проект по переписыванию ядра OpenSolaris, а потом - DragonFly BSD, а также проект по созданию на микроядре L4 системы Lovelace.

Ранее существовали и другие операционные системы, написанные на Аде, среди них - BiiN, Pulse, AdaOS.

В настоящее время развивается операционная система Muen[10], написанная на Ada и SPARK, используются учебные ОС Ada Bare bones[11], Microkernel Ada (TAMP[12]).

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

Название Компания Версия Целевые платформы Сайт
Компиляторы проекта DragonLace (GNAT AUX и будущие компиляторы DRACO Ada) проект сообщества Ада - все версии языка; версии компиляторов: 4.9.х или 6.3.х (для различных платформ) LLVM, DragonFly, FreeBSD, NetBSD, OpenBSD, OmniOS, Android http://www.dragonlace.net/ Шаблон:Wayback
Ada-C/C++ Changer (на технологии AdaMagic) MapuSoft Ада 83, Ада 95, подмножество Ада 2005 Си, C++ www.mapusoft.com Шаблон:Wayback
Ada/Ed Нью-Йоркский университет Ада 83 MS-DOS x86, UnixWare www2.informatik.uni-stuttgart.de
AdaMagic SofCheck Ада 95 ? www.sofcheck.com Шаблон:Wayback
AdaMULTI Green Hills Software Ада 83, Ада 95, Си, Си++, Фортран Solaris SPARC, GNU/Linux x86, Windows www.ghs.com Шаблон:Wayback
DEC Ada Hewlett Packard Ада 83 OpenVMS h71000.www7.hp.com
GNAT AdaCore Ада 83, Ада 95, Ада 2005, Ада 2012, Си Solaris SPARC, Linux x86/x86-64, Windows, Java Virtual Machine, другие libre.adacore.com Шаблон:Wayback
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 Шаблон:Wayback
Janus/Ada RR Software Ада 83, Ада 95 SCO, UnixWare, Interactive, MS-DOS, Windows www.rrsoftware.com Шаблон:Wayback
MAXAda Concurrent Ада 95 Linux/Xeon, PowerPC www.ccur.com Шаблон:Wayback
ObjectAda PTC Ада 95, Шаблон:Нп3 Solaris SPARC, VxWorks, HP-UX, IBM AIX, Linux, Windows, Java Virtual Machine / Java с поддержкой браузеров www.ptc.com Шаблон:Wayback
PowerAda OC Systems Ада 83, Ада 95 Linux, AIX (Ада 95); IBM System 370/390 (Ада 83) www.ocsystems.com Шаблон:Wayback
Rational Apex IBM Rational Ада 83, Си, Си++ Solaris SPARC, Linux www-01.ibm.com Шаблон:Wayback
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 Шаблон:Архивировано
LLVM (Low Level Virtual Machine) LLVM Developer Group на большинство UNIX-подобных систем и Windows llvm.org
A# (порт Ada на платформу Microsoft .NET) Академия ВВС США (GNU) Windows asharp.martincarlisle.com Шаблон:Wayback

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

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

Влияние

Синтаксис Ады в значительной степени воспроизведён в таких языках, как PL/SQL (и впоследствии PL/pgSQL), VHDL, SPARK.

В языках программирования Е[14] и Clarity[15], затем - во множестве других: например, в языках Erlang, Fortress, Chapel, X10, D и Go получили дальнейшее развитие идеи распределённых, многозадачных, многопоточных вычислений, которые реализованы самим языком, а не внешними библиотеками, впервые широко применённые на практике именно в языке Ада.

Инструменты

  • Open-DO Шаблон:Wayback — проект по подготовке специализированных квалифицированных программных инструментов с открытым исходным кодом и сертифицируемых компонентов для Open-DO («DO-178C») — новой редакции стандарта авионики для бортового программного обеспечения.

Архивы материалов

  • Ada Programming Language Materials, 1981–1990. Charles Babbage Institute, University of Minnesota. Включает литературу по программным продуктам, разработанным для языка Ada, публикации правительства США, включая отчеты по проектам Ada 9X, технические отчеты, рабочие документы, информационные бюллетени; и информацию о группе пользователей.
  • Public Ada Library (PAL) — это бесплатный репозиторий сотен мегабайт информации, относящийся к Ada. PAL содержит программы, компоненты, инструменты, общую информацию и учебные материалы по Ada. Имеет известный канонический адрес местонахождения: [1] (WUArchive – Washington University Public Archives Address ... [128.252.135.4]), который, однако, не всегда доступен в сети. Walnut Creek выпускал в 1995 г. CDROM (2 шт.), которые являются полной копией Public Ada Library (PAL) по состоянию на 28 апреля 1995 года. Образы этих дисков доступны[16] в Архиве Интернета.

Организации

  • Ada Conformity Assessment Authority (ACAA)[17] - управление по оценке соответствия Ada - отвечает за управление оценками соответствия Ada стандартам.

Примечания

Шаблон:Примечания

Ссылки

Литература

Стандарты
  • ISO/IEC 8652:1987 — Programming languages — Ada
  • ГОСТ 27831-88 — «Язык программирования АДА» (соответствует стандарту ISO 8652:1987)
  • ISO/IEC 8652:1995 — Information technology — Programming languages — Ada (Ada95)
  • ISO/IEC 8652:2012 — Information technology — Programming languages — Ada (текущая редакция стандарта)

Шаблон:Актуальность Шаблон:Перевести Шаблон:Языки программирования