Ада (язык программирования). Ада (язык программирования) - Ada (programming language) День рождения языка программирования ада

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

И это очень далеко от правды.

Появление

В 70-х годах 20 века, в разгар холодной войны, Министерство Обороны США устроило международный конкурс, по результатам которого необходимо было выбрать язык программирования для использования в военных целях. Однако ни один из существующих языков не устроил членов комиссии, поэтому путём долгого выбора и нескольких доработок на свет появился язык Ада, названный так в честь Ады Лавлейс . Далее началась многолетняя волокита со стандартизацией, регистрация торговой марки, запреты на кастомные трансляторы и прочие действия, отбившие желание массовой аудитории работать с Ада.

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

Синтаксис

Изначально, Ада - модульный язык программирования со строгой типизацией, унаследовавший синтаксис от Паскаль и Алгол. Если вы учили первый в школе или институте, то глядя на «Hello, World!» должны испытать ностальгию:

with Ada.Text_IO;

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

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

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

Более поздние стандарты частично решали эти проблемы, но по понятным причинам, они не сделали из Ада второй Python.

Ада сегодня

Вопреки мнению широкой аудитории, язык Ада до сих пор активно используется, не только в США и не только в военной индустрии. Так, например, часть ПО самолёта-амфибии Бериев Бе-200 написана как раз на Ада. Поезда метрополитена без машиниста, которые курсируют во многих крупных городах (Париже, Лондоне, Нью-Йорке и др.), также используют оборудование с американским военным языком.

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

Перспективы

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

Впрочем, почти 40 лет активного использования подтверждают, что пожалуй со своей главной задачей язык Ада справился - с его помощью всё ещё можно создавать надёжный код для систем с повышенными требованиями к безопасности. При этом, если вы посмотрите на современные тенденции, количество таких изделий неуклонно растёт: автомобили с автопилотом и гибридными двигателями, частные космические аппараты и малые летательные средства, скоростные поезда, а также огромное количество встраиваемых систем. Всё это потенциальное поле для деятельности языка Ада. Добавьте сюда тот факт, что стандарт был серьёзно переработан и модернизирован в 2012 году, инструменты для работы тоже выходят и обновляются .

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

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

1. со «статическими» (или «сильными») типами;

2. с «динамическими» (или «слабыми») типами.

Обе группы языков имеют свои достоинства и недостатки. Главный тезис этой статьи: «Ада - лучший из языков со статическими типами».

Преимущества языков со статическими типами (а значит, автоматически преимущества Ады, поскольку Ада относится к языкам со статическими типами):

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

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

Ада, в некотором смысле, - это язык с «самыми сильными» типами среди языков с сильными типами. Отсюда автоматически выводы:

1. Ада - один из самых быстрых языков программирования среди всех языков программирования. Программа реально может работать в сто раз быстрее по сравнению с динамическими языками программирования.

2. Ада напрочь отметает «глупые» ошибки с перепутанными типами данных. На этом мы остановимся ниже подробнее.

История Ады

История появления Ады заслуживает отдельного рассмотрения.

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

В конкурсе победил язык «Ада» (названный в честь женщины-математика 19-ого века Ады Лавлейс). К 1983 году была написана, так называемая, формальная спецификация Ады, ставшая известной как Ada83.

Ada83 не соответствовал требованиям к современному языку программирования. Поэтому на его основе были созданы Ada95 (1995 год), который уже можно назвать современным языком, а позднее Ada2005 и Ada2012 (понятно каких годов).

Ада получила широкое распространение в сферах, требующих повышенной надежности (военной промышленности, финансах, управлении инфраструктурой и т. п.), например, самолет F-16 сделан на Аде.

Список достоинств Ады

Список основных достоинств Ады:

1. Ада - один из самых быстрых языков программирования. Программа реально может работать в сто раз быстрее.

2. Ада напрочь отметает «глупые» ошибки с перепутанными типами данных.

3. Хорошая поддержка контроля даже против менее грубых ошибок. (Это дает в четыре раза меньше ошибок в программах на Аде). На этом мы остановимся подробнее ниже.

4. Модульная структура языка. Поддержка больших и сложных программ.

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

6. «Мощный» современный язык программирования: объектно-ориентированное программирование, шаблоны, гибкое управление выделением динамической памяти и т. д. и т. п. (Не волнуйтесь, если не понимаете терминологию: это просто означает, что Ада - мощный современный язык).

7. Довольно-таки быстрая компиляция (программист меньше ждет, пока Ада создаст.exe файл и имеет больше свободного времени на программирование и поиск ошибок).

8. Поддержка всех видов устройств: компьютеры, встроенная электроника, космические корабли и т. д.

9. Язык таков, что его удобно не только писать, но и читать (если Вы - программист).

10. Есть бесплатная, но хорошая среда разработки (программы для программистов).

11. Есть международный стандарт.

12. Десятичные дроби позволяют работать, например, с финансовой информацией.

Надежность или скорость

Между требованием надежности и скорости есть естественное противоречие:

Чтобы программа работала с максимально возможной скоростью, надо отказаться от проверки правильности программы по ходу ее выполнения.

Например, есть список из 10-ти чисел. Если программа пытается изменить 12-ое число в этом списке - это бессмыслица. Если проверка не была осуществлена, эта программа запишет наше 12-ое число, выражаясь технической терминологией, «куда попало» и программа может даже испортить сама себя и начать делать что-то бессмысленное.

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

Разрешение этого противоречия в Аде следующее: Есть два режима работы: с проверками и без проверок (точнее режимов больше, потому что есть возможность селективно включить некоторые виды проверок, а некоторые оставить выключенными). С проверками программа может работать в несколько раз медленнее, но с проверками во много раз реже бывает, что программа начинает делать полную бессмыслицу.

Часто проверки оставляют включенными при изначальной отладке (поиске и исправлении ошибок) программы и выключают, когда программа готова, чтобы увеличить скорость и уменьшить затраты электричества на нагрев процессора. Если вы закажете мне программирование на Аде, мы можем договориться, оставить ли проверки включенными после того, как я передаю вам готовую программу.

Кстати, Ада готова проверять не только самую выдающуюся бессмыслицу (типа 12-ого элемента в списке из 10-чисел или деление на ноль), но и менее грубые ошибки. Уникальная система «сильных» типов в Аде способна автоматически проверить, например, что месяц всегда в интервале 1..12 (а не 14-ый месяц, например). Эти проверки позволяют сделать программу намного надежней, чем программы на других языках программирования. Недавние версии Ады более того позволяют программисту делать вообще любые виды проверок, которые он пожелает сделать.

Мифы об Аде

Миф 1: Ада - «древний» язык программирования

На самом деле, этот миф истинен только для первой версии Ады, Ada83, разработанной в 1983 году.

А последняя версия спецификации Ады, Ada2012 - вполне недавний и современный язык программирования с такими современными чертами, как объектно-ориентированное программирование и шаблонные типы.

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

Миф 2: Ада только для больших систем

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

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

Миф 3: Ада - это для электроники

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

Миф 4: Ада требует дорогих технологий

На самом деле, есть бесплатный компилятор Ады (GNAT) для большинства современных операционных систем. Он идет со всем программным обеспечением для программиста-профессионала.

Я работаю в первую очередь с Линуксом. И конечно, есть GNAT для Линукс.

Недостатки Ады

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

Ада имеет следующие недостатки:

1. Ада - мощный профессиональный инструмент, а потому, чтобы им умело пользоваться, нужен высококвалифицированный специалист (вроде меня!)

2. К сожалению, Ада не стала высокопопулярным языком. Как следствие, «компоненты» (готовые фрагменты программ) для многих задач отсутствуют. Например, нет действительно хороших компонентов для разработки Web-сайтов на Аде.

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

4. Есть и еще некоторые недостатки (о которых я не буду говорить подробно, поскольку такой разговор требует специальной терминологии), но они могут показаться достоинствами на фоне недостатков других языков программирования.

(Ада 2005), Эйфелева (Ada 2012)

C ++ , Chapel , "Драго" . , Eiffel , "Грифон" . , Java , Nim , летать на парашюте за катером , PL / SQL , PL / PgSQL , рубин , Seed7 , "SPARforte" . , Sparkel , SQL / PSM , VHDL

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

Синтаксис Ada минимизирует выбор способов выполнения основных операций, и предпочитает английские ключевые слова (например, «или же» и « а затем») в символы (такие как «||» и «&&»). Ада использует основные арифметические операторы «+», «-», «*» и «/», но избегает использования других символов. Блоки кода ограничивается словами, такие как «объявить», «начать» и «конец», где «конец» (в большинстве случаев) следует идентификатор блока он закрывает (например, если конец, если... , петля... конец цикла ). В случае условных блоков это позволяет избежать оборванных еще , что может спариваться с неправильным вложенным if-выражения в других языках, таких как C или Java.

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

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

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

Динамическое Ады управление памятью является высоким уровнем и типа-сейф. Ада не имеет общие или нетипизированные указатели ; и не неявно объявить любой тип указателя. Вместо этого, все динамическое распределение памяти и освобождение должно происходить через явно объявленных типов доступа . Каждый тип доступа имеет соответствующий пул устройств хранения данных , который обрабатывает низкоуровневые детали управления памятью; программист может использовать либо пул хранения по умолчанию или определить новые (это особенно актуально для Non-Uniform Memory Access). Можно даже объявить несколько различных типов доступа, которые все обозначают один и тот же тип, но используют различные пулы хранения. Кроме того, язык обеспечивает доступности проверок , как во время компиляции и во время выполнения, что гарантирует, что стоимость доступа не может изгладить тип объекта он указывает.

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

история

Продолжается работа по совершенствованию и обновлению технического содержания языка программирования Ada. Техническое исправление к Аду 95 было опубликовано в октябре 2001 года, а основная поправке, ISO / IEC 8652: 1995 / Amd 1: 2007 было опубликовано 9 марта 2007 года В Ada-Europe 2012 конференции в Стокгольме, Ассоциация Ada ресурсов (ARA) и Ад-Europe объявили о завершении проектирования последней версии языка программирования Ada и представления справочного руководства к Международной организации по стандартизации (ISO) для утверждения. ISO / IEC 8652: 2012 был опубликован в декабре 2012 года.

Другие соответствующие стандарты включают ISO 8651 -3: 1988 Системы обработки информации, компьютерной графики, графического ядра системы (ГКС) язык привязок-Часть 3: Ада .

Языковые конструкции

"Привет, мир!" в Ada

Типичным примером такого языка в синтаксисе является Привет мир программа : (hello.adb)

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

Эта программа может быть составлена с использованием свободно распространяемого с открытым исходным кодом компилятора GNAT , выполнив

gnatmake hello.adb

Типы данных

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

Например, дата может быть представлена ​​в виде:

type Day_type is range 1 .. 31 ; type Month_type is range 1 .. 12 ; type Year_type is range 1800 .. 2100 ; type Hours is mod 24 ; type Weekday is (Monday , Tuesday , Wednesday , Thursday , Friday , Saturday , Sunday ); type Date is record Day : Day_type ; Month : Month_type ; Year : Year_type ; end record ;

Типы могут быть уточнены путем объявления подтипов:

subtype Working_Hours is Hours range 0 .. 12 ; -- at most 12 Hours to work a day subtype Working_Day is Weekday range Monday .. Friday ; -- Days to work Work_Load : constant array (Working_Day ) of Working_Hours -- implicit type declaration := (Friday => 6 , Monday => 4 , others => 10 ); -- lookup table for working hours with initialization

Типы могут иметь модификаторы, такие как ограниченные, абстрактные, частные и т.д. Частные типы могут быть доступны и ограниченные типы могут быть изменены только или скопированы в пределах пакета, который определяет их только. Ada 95 добавляет дополнительные возможности для объектно-ориентированного расширения типов.

Управляющие структуры

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

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

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

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

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

Следующий пример иллюстрирует некоторые концепции параллельного программирования в Ada.

with Ada.Text_IO ; use Ada.Text_IO ; procedure Traffic is type Airplane_ID is range 1. . 10 ; -- 10 airplanes task type Airplane (ID : Airplane_ID ); -- task representing airplanes, with ID as initialisation parameter type Airplane_Access is access Airplane ; -- reference type to Airplane protected type Runway is -- the shared runway (protected to allow concurrent access) entry Assign_Aircraft (ID : Airplane_ID ); -- all entries are guaranteed mutually exclusive entry Cleared_Runway (ID : Airplane_ID ); entry Wait_For_Clear ; private Clear : Boolean := True ; -- protected private data - generally more than just a flag... end Runway ; type Runway_Access is access all Runway ; -- the air traffic controller task takes requests for takeoff and landing task type Controller (My_Runway : Runway_Access ) is -- task entries for synchronous message passing entry Request_Takeoff (ID : in Airplane_ID ; Takeoff : out Runway_Access ); entry Request_Approach (ID : in Airplane_ID ; Approach : out Runway_Access ); end Controller ; -- allocation of instances Runway1 : aliased Runway ; -- instantiate a runway Controller1 : Controller (Runway1 " Access ); -- and a controller to manage it ------ the implementations of the above types ------ protected body Runway is entry Assign_Aircraft (ID : Airplane_ID ) when Clear is -- the entry guard - calling tasks are blocked until the condition is true begin Clear := False ; Put_Line (Airplane_ID " Image (ID ) & " on runway " ); end ; entry Cleared_Runway (ID : Airplane_ID ) when not Clear is begin Clear := True ; Put_Line (Airplane_ID " Image (ID ) & " cleared runway " ); end ; entry Wait_For_Clear when Clear is begin null ; -- no need to do anything here - a task can only enter if "Clear" is true end ; end Runway ; task body Controller is begin loop My_Runway . Wait_For_Clear ; -- wait until runway is available (blocking call) select -- wait for two types of requests (whichever is runnable first) when Request_Approach " count = 0 => -- guard statement - only accept if there are no tasks queuing on Request_Approach accept Request_Takeoff (ID : in Airplane_ID ; Takeoff : out Runway_Access ) do -- start of synchronized part My_Runway . Assign_Aircraft (ID ); -- reserve runway (potentially blocking call if protected object busy or entry guard false) Takeoff := My_Runway ; -- assign "out" parameter value to tell airplane which runway end Request_Takeoff ; -- end of the synchronised part or accept Request_Approach (ID : in Airplane_ID ; Approach : out Runway_Access ) do My_Runway . Assign_Aircraft (ID ); Approach := My_Runway ; end Request_Approach ; or -- terminate if no tasks left who could call terminate ; end select ; end loop ; end ; task body Airplane is Rwy : Runway_Access ; begin Controller1 . Request_Takeoff (ID , Rwy ); -- This call blocks until Controller task accepts and completes the accept block Put_Line (Airplane_ID " Image (ID ) & " taking off..." ); delay 2.0 ; Rwy . Cleared_Runway (ID ); -- call will not block as "Clear" in Rwy is now false and no other tasks should be inside protected object delay 5.0 ; -- fly around a bit... loop select -- try to request a runway Controller1 . Request_Approach (ID , Rwy ); -- this is a blocking call - will run on controller reaching accept block and return on completion exit ; -- if call returned we"re clear for landing - leave select block and proceed... or delay 3.0 ; -- timeout - if no answer in 3 seconds, do something else (everything in following block) Put_Line (Airplane_ID " Image (ID ) & " in holding pattern" ); -- simply print a message end select ; end loop ; delay 4.0 ; -- do landing approach... Put_Line (Airplane_ID " Image (ID ) & " touched down!" ); Rwy . Cleared_Runway (ID ); -- notify runway that we"re done here. end ; New_Airplane : Airplane_Access ; begin for I in Airplane_ID " Range loop -- create a few airplane tasks New_Airplane := new Airplane (I ); -- will start running directly after creation delay 4.0 ; end loop ; end Traffic ;

Прагмы

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

Примеры общего использования компилятора прагм будут отключать определенные функции, такие как проверка типов времени выполнения или индекс массива проверка граничной, или поручить компилятор, чтобы вставить код объекта вместо вызова функции (в C / C ++ делает с инлайн функции).

  • APSE - спецификация для среды программирования для поддержки разработки программного обеспечения в Ada
  • Ravenscar профиль - это подмножество функций Ada многозадачных, предназначенных для обеспечения безопасности критически важных жесткого реального времени вычислений
  • СПАРК (язык программирования) - язык программирования, состоящий из весьма ограниченного подмножества Ada, аннотированные с мета - информацией, описывающей желаемое поведение компонента и индивидуальных требований во время выполнения

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

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 .


Понравилась статья? Поделиться с друзьями: