Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Ada - это структурированный , статически типизированный , императивный и объектно-ориентированный язык программирования высокого уровня , расширенный от Pascal и других языков. Он имеет встроенную языковую поддержку для проектирования по контракту (DbC), чрезвычайно строгую типизацию , явный параллелизм, задачи, синхронную передачу сообщений, защищенные объекты и недетерминизм . Ada улучшает безопасность кода и удобство обслуживания, используя компилятор для поиска ошибок в пользу ошибок времени выполнения . Ada - это международный технический стандарт , совместно определенныйМеждународная организация по стандартизации (ISO) и Международная электротехническая комиссия (IEC). По состоянию на 2020 год стандартом, неофициально называемым Ada 2012 [7], является ISO / IEC 8652: 2012. [8]

Изначально Ada была разработана группой под руководством французского ученого-информатика Жана Ичбиа из CII Honeywell Bull по контракту с Министерством обороны США с 1977 по 1983 год, чтобы заменить более 450 языков программирования, используемых Министерством обороны в то время. [9] Ада была названа в честь Ады Лавлейс (1815–1852), которая считается первым компьютерным программистом. [10]

Особенности [ править ]

Изначально Ada была разработана для встроенных систем и систем реального времени . Версия Ada 95, разработанная С. Такером Тафтом из Intermetrics в период с 1992 по 1995 год, улучшила поддержку системного, численного, финансового и объектно-ориентированного программирования (ООП).

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

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

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

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

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

Управление динамической памятью в Ada является высокоуровневым и безопасным для типов. В Ada нет универсальных или нетипизированных указателей ; и не объявляет неявно какой-либо тип указателя. Вместо этого все динамическое выделение и освобождение памяти должно происходить через явно объявленные типы доступа . С каждым типом доступа связан пул хранения, который обрабатывает низкоуровневые детали управления памятью; программист может либо использовать пул хранения по умолчанию, либо определить новые (это особенно актуально для неоднородного доступа к памяти ). Можно даже объявить несколько разных типов доступа, которые обозначают один и тот же тип, но используют разные пулы хранения. Также в языке предусмотрены проверки доступности., как во время компиляции, так и во время выполнения, что гарантирует, что значение доступа не сможет пережить тип объекта, на который оно указывает. [13]

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

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

Точка с запятой («;») - это признак конца оператора , а оператор null или отсутствие операции - null;. Сингл ;без заявления о прекращении не допускается.

В отличие от большинства стандартов ISO , определение языка Ada (известное как Справочное руководство Ada или ARM , или иногда Справочное руководство по языку или LRM ) представляет собой бесплатный контент . Таким образом, это общий справочник для программистов Ada, а не только программистов, реализующих компиляторы Ada. Помимо справочного руководства, существует также обширный документ с обоснованием, который объясняет структуру языка и использование различных языковых конструкций. Этот документ также широко используется программистами. Когда язык был изменен, был написан новый документ с обоснованием.

Одним из примечательных бесплатных программных инструментов, которые используют многие программисты Ada для помощи в написании исходного кода Ada, является GNAT Programming Studio .

История [ править ]

В 1970-х годах Министерство обороны США (DoD) было обеспокоено количеством различных языков программирования, используемых для его проектов встраиваемых компьютерных систем, многие из которых были устаревшими или аппаратно-зависимыми, и ни один из них не поддерживал безопасное модульное программирование. В 1975 году рабочая группа , то высокого порядка Язык Рабочая группа (HOLWG), была создана с целью , чтобы уменьшить это число нахождение или создание языка программирования , как правило , пригодную для Департамента и в Министерстве обороны Великобритании требования «s. После многих итераций, начиная с оригинального предложения Strawmanв конечном итоге язык программирования был назван Ада. Общее количество языков программирования высокого уровня, используемых для таких проектов, упало с 450 в 1983 г. до 37 к 1996 г.

Рабочая группа HOLWG разработала требования к языку Steelman , серию документов, излагающих требования, которым, по их мнению, должен удовлетворять язык программирования. Многие существующие языки были официально рассмотрены, но в 1977 году команда пришла к выводу, что ни один из существующих языков не соответствует спецификациям.

Были выпущены запросы на предложения по новому языку программирования, и были наняты четыре подрядчика для разработки своих предложений под именами Red ( Intermetrics, возглавляемый Бенджамином Бросголом), Green ( CII Honeywell Bull , возглавляемый Джин Ичбиа ), Blue ( SofTech , возглавляемый Джон Гуденаф) [14] и Желтый ( SRI International , возглавляемый Джеем Спитценом). В апреле 1978 г., после рассмотрения общественностью, предложения «красных и зеленых» перешли к следующему этапу. В мае 1979 года было выбрано предложение Зеленого, разработанное Джин Ичбиа из CII Honeywell Bull, и ему было дано имя Ада - в честь Августы Ады, графини Лавлейс . На это предложение повлиял язык LIS.что Ичбия и его группа разработали в 1970-х годах. Предварительное справочное руководство по Ada было опубликовано в ACM SIGPLAN Notices в июне 1979 года. Справочное руководство по военному стандарту было утверждено 10 декабря 1980 года (в день рождения Ады Лавлейс ) и получило номер MIL-STD-1815 в честь рождения Ады Лавлейс. год. В 1981 году К. Р. Хоар воспользовался своей речью на Премии Тьюринга, чтобы критиковать Аду за ее чрезмерную сложность и, следовательно, ненадежность [15], но впоследствии, казалось, отрекся от предисловия, которое он написал для учебника Ады. [16]

В первые дни своего существования Ада привлекала большое внимание программистов в целом. Его сторонники и другие предсказывали, что он может стать доминирующим языком для программирования общего назначения, а не только для работы, связанной с защитой. [17] Ичбия публично заявил, что в течение десяти лет останутся только два языка программирования: Ada и Lisp . [18] Ранние компиляторы Ada изо всех сил пытались реализовать большой, сложный язык, и производительность как во время компиляции, так и во время выполнения была медленной, а инструменты примитивными. [17] Поставщики компиляторов потратили большую часть своих усилий на прохождение массового тестирования на соответствие языку, требуемого правительством пакета проверки «ACVC», который требовался в еще одной новой особенности разработки языка Ada.[18] The Jargon File , словарь компьютерного хакерского сленга, созданный в 1975–1983 годах, отмечает в статье об Аде, что «это именно то, чего можно было ожидать, учитывая такого рода одобрение со стороны указа; разработанный комитетом ... использовать, и в целом катастрофический, многомиллиардный бесполезный труд ... Ада Лавлейс ... почти наверняка побледнела бы от использования ее имени в последнее время; самое доброе, что было сказано об этом, это то, что, вероятно, есть хороший маленький язык, кричащий, чтобы выбраться из своей огромной слоновьей массы ".

Первой проверенной реализацией Ada был переводчик Ada / Ed NYU, [19] сертифицированный 11 апреля 1983 г. NYU Ada / Ed реализован на языке наборов высокого уровня SETL . [20] Несколько коммерческих компаний начали предлагать компиляторы Ada и связанные с ними инструменты разработки, включая Alsys , TeleSoft , DDC-I , Advanced Computer Techniques , Tartan Laboratories , TLD Systems и Verdix . [21]

Августа Ада Кинг , графиня Лавлейс.

В 1991 году Министерство обороны США начало требовать использования Ada ( мандат Ada ) для всего программного обеспечения [22], хотя из этого правила часто допускались исключения. [17] Мандат Ada Министерства обороны был фактически снят в 1997 году, когда Министерство обороны начало использовать технологию COTS . [17] Подобные требования существовали и в других странах НАТО : Ada требовалась для систем НАТО, включающих командование и управление и другие функции, а Ada был обязательным или предпочтительным языком для приложений, связанных с обороной, в таких странах, как Швеция, Германия и Канада. [23]

К концу 1980-х - началу 1990-х годов производительность компиляторов Ada улучшилась, но все еще существовали препятствия для полного использования возможностей Ada, включая модель задач, которая отличалась от той, к которой привыкло большинство программистов реального времени. [18]

Из -за критически важных для безопасности функций поддержки Ada теперь он используется не только для военных приложений, но и в коммерческих проектах, где ошибка программного обеспечения может иметь серьезные последствия, например, авионика и управление воздушным движением , коммерческие ракеты, такие как Ariane 4 и 5. , спутники и другие космические системы, железнодорожный транспорт и банковское дело. [12] Например, система самолета управления информацией , то летать по проводам системы программного обеспечения в Boeing 777 , была написана в Аде. [24] [25] Разработано компанией Honeywell Air Transport Systemsв сотрудничестве с консультантами из DDC-I , он стал, пожалуй, самым известным из всех проектов Ada, гражданских или военных. [24] [25] Канадская автоматизированная система воздушного движения была написана 1 миллионом строк на языке Ада ( подсчет SLOC ). Он отличался расширенной распределенной обработкой , распределенной базой данных Ada и объектно-ориентированным дизайном. Ada также используется в других системах управления воздушным движением, например, система управления воздушным движением следующего поколения Interim Future Area Control Tools Support (iFACTS) в Великобритании разработана и реализована с использованием SPARK Ada. [26] Он также используется во французской системе внутренней сигнализации TVM на TGV.высокоскоростная железнодорожная система и метро пригородных поездов в Париже, Лондоне, Гонконге и Нью-Йорке. [12] [27]

Стандартизация [ править ]

Этот язык стал стандартом ANSI в 1983 году ( ANSI / MIL-STD 1815A ), а после перевода на французский язык и без каких-либо дальнейших изменений на английский язык стал стандартом ISO в 1987 году (ISO-8652: 1987). Эта версия языка широко известна как Ada 83 с даты ее принятия ANSI, но иногда также упоминается как Ada 87 с даты ее принятия ISO.

Ada 95, совместный стандарт ISO / ANSI ( ISO-8652: 1995 ), был опубликован в феврале 1995 года, что сделало Ada 95 первым объектно-ориентированным языком программирования стандарта ISO. Чтобы помочь с пересмотром стандарта и его принятием в будущем, ВВС США профинансировали разработку компилятора GNAT . В настоящее время компилятор GNAT является частью коллекции компиляторов GNU .

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

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

Языковые конструкции [ править ]

Ада является АЛГОЛ -как программирования языка с участием управляющих структур с зарезервированными словами , такими как , если , то , иначе , в то время как , для , и так далее. Однако в Ada также есть много средств структурирования данных и других абстракций, которые не были включены в исходный АЛГОЛ 60 , таких как определения типов , записи , указатели , перечисления . Такие конструкции были частично унаследованы от Паскаля или вдохновлены им .

"Привет, мир!" в Аде [ править ]

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

с  Ada.Text_IO ;  используйте  Ada.Text_IO ; процедура  Hello  - это begin  Put_Line  ( "Привет, мир!" ); конец  Привет ;

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

gnatmake hello.adb

Типы данных [ править ]

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

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

тип  Day_type  -  диапазон  1  ..  31 ; тип  Month_type  - это  диапазон  1  ..  12 ; тип  Year_type  -  диапазон  1800  ..  2100 ; тип  Часы  -  мод  24 ; тип  Будни  является  ( понедельник ,  вторник ,  среда ,  четверг ,  пятница ,  суббота ,  воскресенье );тип  Дата  -  запись  Day  :  Day_type ;  Месяц  :  Месяц_тип ;  Год  :  Year_type ;  конец записи ;

Типы можно уточнять, объявив подтипы:

подтип  Working_Hours  -  диапазон часов  0 .. 12 ; - в большинстве 12 часов работы в день подтип Working_Day является Будни диапазон понедельник .. пятница ; - Дни на работу            Work_Load :  постоянный  массив ( Working_Day )  из  Working_Hours  - неявного объявления типа  : =  ( пятница  =>  6 ,  понедельник  =>  4 ,  другие  =>  10 );  - справочная таблица рабочего времени с инициализацией

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

Структуры управления [ править ]

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

- пока a не равно b, цикл. в то время как  a  / =  b  цикл  Ada . Текст_IO . Put_Line  ( "Ожидание" ); конец  петли ;если  a  >  b,  то  Ада . Текст_IO . Put_Line  ( «Условие выполнено» ); еще  Ада . Текст_IO . Put_Line  ( «Условие не выполнено» ); конец,  если ;для  i  в  1  ..  10  петлю  Ада . Текст_IO . Положите  ( "Итерация:" );  Ада . Текст_IO . Положите  ( i );  Ада . Текст_IO . Put_Line ; конец  петли ;петля  a  : =  a  +  1 ;  выйти  при  a  =  10 ; конец  петли ;случай  i  - это  когда  0  =>  Ада . Текст_IO . Положите  ( «ноль» );  когда  1  =>  Ада . Текст_IO . Положите  ( «один» );  когда  2  =>  Ада . Текст_IO . Положите  ( «два» );  - операторы case должны охватывать все возможные случаи:  когда  другие  =>  Ada . Текст_IO . Положите  ( «ничего из вышеперечисленного» ); конец  дела;for  aWeekday  in  Weekday ' Range  loop  - цикл по перечислению  Put_Line  (  Weekday ' Image ( aWeekday )  );  - вывод строки представление перечисления ,  если  aWeekday  в  Working_Day  затем  - проверка подтипа перечисления  Put_Line  (  «для работы»  и  Working_Hours " Image  ( Work_Load ( aWeekday ))  );  - доступ к таблице поиска  end  if ; конец петля ;

Пакеты, процедуры и функции [ править ]

Среди частей программы Ada - пакеты, процедуры и функции.

Пример: спецификация пакета (example.ads)

 Пример  пакета -  тип  Число  -  диапазон  1  ..  11 ;  Процедура  Print_and_Increment  ( J : в  из  числа ); конец  Пример ;

Тело пакета (example.adb)

с  Ada.Text_IO ; Пакет  тела  Пример  является i  :  Number  : =  Number ' Первый ; процедура  Print_and_Increment  ( j : in  out  Number )  является функция  Next  ( k : in  Number )  return  Number  is  begin  return  k  +  1 ;  конец  Далее ; начинаем  Ада . Текст_IO . Put_Line  (  "Итого:"  &  Number ' Image ( j )  );  j  : =  Далее  ( j );  конец  Print_and_Increment ;- инициализация пакета, выполняемая, когда пакет доработан, начинается  при  i  <  Number ' Последний  цикл  Print_and_Increment  ( i );  конец  петли ; конец  Пример ;

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

gnatmake -z example.adb

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

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

Параллелизм [ править ]

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

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

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

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

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

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

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

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

с  Ada.Text_IO ;  используйте  Ada.Text_IO ;Процедура  движения  является Тип  Airplane_ID  -  диапазон  1 .. 10 ;  - 10 самолетов  тип  задачи Самолет  ( ID : Airplane_ID );  - задача, представляющая самолеты, с идентификатором в качестве параметра инициализации  типа  Airplane_Access  - это  доступ к  самолету ;  - тип ссылки на самолет защищенный  тип  Runway  is  - общая взлетно-посадочная полоса (защищенная для одновременного доступа)  запись  Assign_Aircraft  ( ID : Airplane_ID );  - для всех записей гарантируется взаимоисключающая  запись  Cleared_Runway  ( ID : Airplane_ID );  запись  Wait_For_Clear ;  закрытый  Clear :  Boolean  : =  True ;  - защищенные личные данные - обычно больше, чем просто флаг ...  конец  взлетно-посадочной полосы ;  type  Runway_Access  -  доступ  ко всем Взлетно-посадочная полоса ; - задача авиадиспетчера принимает запросы на взлет и посадку  задача  типа  контроллера  ( My_Runway : Runway_Access )  это  - записей задач для синхронной передачи сообщений  ввода  Request_Takeoff  ( ID : в  Airplane_ID ;  Взлет : из  Runway_Access );  запись  Request_Approach ( ID : в  Airplane_ID ;  подход : вне  Runway_Access );  end  Controller ; - выделение экземпляров  Runway1  :  взлетно-посадочная полоса с псевдонимом  ; - экземпляр ВПП Controller1 : контроллер ( Runway1 ' Access ); - и контроллер для управления      ------ реализации вышеуказанных типов ------  защищенное  тело  Взлетно-посадочная полоса  - это  запись  Assign_Aircraft  ( ID : Airplane_ID ),  когда  Clear  is  - охрана входа - вызывающие задачи блокируются до тех пор, пока условие не будет истинным  begin  Clear  : =  Ложь ;  Put_Line  ( Airplane_ID ' Изображение  ( ID )  &  "на взлетно-посадочной полосе" );  конец ; запись  Cleared_Runway  ( ID : Airplane_ID ),  если  не  Clear  -  начало  Clear  : =  True ;  Put_Line  ( Airplane_ID ' Изображение  ( ID )  &  «очищенная взлетно-посадочная полоса» );  конец ; запись  Wait_For_Clear,  когда  Clear  имеет значение  begin  null ;  - здесь ничего делать не нужно - задача может войти только в том случае, если "Очистить" имеет значение true  end ;  конец  взлетно-посадочной полосы ;  Контроллер тела  задачи - начало цикла My_Runway . Wait_For_Clear ; - ждать, пока не станет доступной взлетно-посадочная полоса (блокирующий вызов) select - дождаться двух типов запросов (в зависимости от того, какой из них будет запущен первым), когда Request_Approach ' count = 0 => - оператор защиты - принять, только если нет задач в очереди на запрос Request_Approach accept Request_Takeoff ( ID : in Airplane_ID ; Takeoff : out Runway_Access ) do - начало синхронизированной части                        My_Runway . Assign_Aircraft  ( ID );  - резервная взлетно-посадочная полоса (потенциально блокирующая вызов, если защищаемый объект занят или защита входа ложна)  Взлет  : =  My_Runway ;  - назначить значение параметра out, чтобы сообщить самолету, какой  конец  взлетно-посадочной полосы Request_Takeoff ;  - конец синхронизированной части  или  принять  Request_Approach  ( ID :  в  Airplane_ID ;  Заход :  вне  Runway_Access )  сделать  My_Runway . Assign_Aircraft  ( ID );  Подход : =  My_Runway ;  конец  Request_Approach ;  или  - завершить работу, если не осталось задач, которые могли бы вызвать  завершение ;  конец  выбора ;  конец  петли ;  конец ; Задача  тела  Самолет  является  Rwy  :  Runway_Access ;  начать  Controller1 . Request_Takeoff  ( ID ,  Rwy );  - Этот вызов блокируется до тех пор, пока задача контроллера не примет и не завершит блок  приема Put_Line  ( Airplane_ID ' Image  ( ID )  &  "взлет ..." );  задержка  2.0 ;  Rwy . Cleared_Runway  ( ID );  - вызов не будет заблокирован, так как «Очистить» в Rwy теперь ложно и никакие другие задачи не должны находиться внутри защищенного объекта задержка  5.0 ;  - немного облететь ...  loop  select  - попробовать запросить взлетно-посадочную полосу  Controller1 . Request_Approach  ( ID ,  Rwy );  - это блокирующий вызов - будет работать на контроллере , достигающего принимает блок и вернуться на завершение  выхода ;  - если звонок вернулся, мы готовы к посадке - оставим блок выбора и продолжаем ...  или  задержка  3.0 ;  - тайм-аут - если нет ответа в течение 3 секунд, сделайте что-нибудь еще (все в следующем блоке)  Put_Line  ( Airplane_ID ' Image  ( ID )  & «в режиме ожидания» );  - просто распечатайте  выбор конца  сообщения ; конец петли ; задержка 4.0 ; - выполнить заход на посадку ... Put_Line ( Airplane_ID ' Image ( ID ) & "приземлился!" ); Rwy . Cleared_Runway ( ID ); - уведомить взлетно-посадочную полосу, что мы здесь закончили. конец ;               New_Airplane :  Airplane_Access ;начать  для  I  в  Airplane_ID ' Range  loop  - создать несколько задач самолета  New_Airplane  : =  новый  самолет  ( I );  - запустится сразу после создания  задержки  4.0 ;  конец  петли ; конец  трафика ;

Прагмы [ править ]

Прагма - это директива компилятора, которая передает информацию компилятору, чтобы разрешить определенные операции над скомпилированным выводом. [29] Некоторые прагмы встроены в язык [30], а другие зависят от реализации.

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

См. Также [ править ]

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

Ссылки [ править ]

  1. ^ «Техническое исправление для Ada 2012, опубликованное ISO» . Ассоциация ресурсов Ada. 2016-01-29 . Проверено 23 февраля 2016 .
  2. ^ «Сводное справочное руководство по языку Ada 2012» . Орган по оценке соответствия Ada. Архивировано из оригинала на 2016-03-03 . Проверено 23 февраля 2016 .
  3. ^ "Техническое исправление 1 для Ada 2012" . Орган по оценке соответствия Ada. Архивировано из оригинала на 2016-03-02 . Проверено 23 февраля 2016 .
  4. ^ "PTC ObjectAda" . PTC.com . Проверено 27 января 2014 .
  5. ^ "AdaMagic с сертификатом C Intermediate" .
  6. ^ "Спецификация часовни (Благодарности)" (PDF) . Cray Inc. 2015-10-01 . Проверено 14 января 2016 .
  7. ^ Ganssle, Джек (2013-05-29). «Ada Resource Association - Новости и ресурс по языку программирования Ada» . Adaic.org . Проверено 14 июня 2013 .
  8. ^ a b «ISO / IEC 8652: 2012 Информационные технологии - Языки программирования - Ада » . Международная организация по стандартизации . Проверено 23 декабря 2012 .
  9. ^ "Язык программирования Ада" . Университет штата Мичиган . Архивировано из оригинала на 2016-05-22 . Проверено 27 мая 2016 .
  10. ^ Fuegi, J; Фрэнсис, J (2003). «Лавлейс и Бэббидж и создание 1843„ноты ». IEEE Annals of the History of Computing . 25 (4): 16–26. DOI : 10.1109 / MAHC.2003.1253887 . S2CID 40077111 . 
  11. ^ Тафт, С. Такер; Олсен, Флоренция (1999-06-30). «Ада помогает выпускать менее ошибочный код» . Правительственные компьютерные новости. С. 2–3 . Проверено 14 сентября 2010 .
  12. ^ a b c Фельдман, Майкл. "Кто использует Аду?" . Рабочая группа SIGAda Education.
  13. ^ Нет безопасного управления динамической памятью в ADA , в: Написание модулей ядра Linux в Safe Rust - Джеффри Томас и Алекс Гейнор, The Linux Foundation, 2019-10-02
  14. ^ "Джон Гуденаф | Профиль персонала SEI" . Sei.cmu.edu . Проверено 27 января 2014 .
  15. Перейти ↑ CAR, Hoare (1981). "Старая одежда императора" (PDF) . Коммуникации ACM . Ассоциация вычислительной техники . 24 (2): 75–83. DOI : 10.1145 / 358549.358561 . S2CID 97895 .  
  16. ^ Ватт, DA; Wichmann, BA; Финдли, В. (1987). Ада: язык и методология . Прентис-Холл.
  17. ^ a b c d Sward, Рики Э. (ноябрь 2010 г.). «Взлет, падение и упорство Ады». SIGAda '10: Материалы ежегодной международной конференции ACM SIGAda, посвященной SIGAda . С. 71–74. DOI : 10.1145 / 1879063.1879081 .
  18. ^ a b c Розен, JP. (Август 2009 г.). "Парадокс Ады". Письма Ады . ACM SIGAda. 24 (2): 28–35. DOI : 10.1145 / 1620593.1620597 . S2CID 608405 . 
  19. ^ SofTech Inc. (1983-04-11). «Сводный отчет о проверке компилятора Ada: NYU Ada / ED, версия 19.7 V-001» . Уолтем, Массачусетс. Архивировано из оригинала на 2012-03-12 . Проверено 16 декабря 2010 .
  20. ^ Дьюар, Роберт Б.К .; Фишер, Джеральд А. Младший; Шенберг, Эдмонд; Froelich, Роберт; Брайант, Стивен; Госс, Клинтон Ф .; Берк, Майкл (ноябрь 1980). "Переводчик и устный переводчик Ada NYU". Уведомления ACM SIGPLAN - Материалы симпозиума ACM-SIGPLAN по языку программирования Ada . 15 (11): 194–201. DOI : 10.1145 / 948632.948659 . ISBN 0-89791-030-3. S2CID  10586359 .
  21. ^ "Список проверенных компиляторов Ada". Информационный центр Ada. 1 июля 1992 г. С. 1–36.
  22. ^ Информационный центр Ada (1983-04-11). «Мандат Ады Конгресса» . Архивировано из оригинала на 2016-03-04 . Проверено 7 июня 2015 .
  23. ^ Бабяк, Nicholas J. (1989). Ада, компьютерный язык новой системы вооружения Министерства обороны - Панацея или Бедствие (PDF) . Воздушный университет (ВВС США) . С. 39–40.
  24. ^ a b Ремер, Карл (2009). «Команда HADS». В Stellman, Эндрю; Грин, Дженнифер (ред.). Красивые команды: вдохновляющие и поучительные истории от опытных руководителей команд . Севастополь, Калифорния: О'Рейли. С. 299–312.
  25. ^ a b Вулф, Александр (октябрь 2004 г.). «В Аде еще осталось немного жизни» . Очередь ACM . 2 (7): 28–31. DOI : 10.1145 / 1035594.1035608 .
  26. ^ AdaCore. «GNAT Pro выбран для британской системы УВД нового поколения» . Архивировано из оригинала на 2010-12-24 . Проверено 1 марта 2011 .
  27. ^ AdaCore. «Посмотрите, кто использует Аду» . Архивировано из оригинала на 2010-12-24 . Проверено 1 марта 2011 .
  28. ^ "Карта синтаксиса Ada" (PDF) . Архивировано из оригинального (PDF) 6 июля 2011 года . Проверено 28 февраля 2011 года .
  29. ^ "Ada 83 LRM, раздел 2.8: Pragmas" . Archive.adaic.com . Проверено 27 января 2014 .
  30. ^ "Ada 83 LRM, Приложение / Приложение B: Предопределенные языковые прагмы" . Archive.adaic.com. Архивировано из оригинала на 2012-02-06 . Проверено 27 января 2014 .

Международные стандарты [ править ]

  • ISO / IEC 8652 : Информационные технологии. Языки программирования. Ада.
  • ISO / IEC 15291 : Информационные технологии - Языки программирования - Спецификация семантического интерфейса Ada ( ASIS )
  • ISO / IEC 18009 : Информационные технологии - Языки программирования - Ada: Оценка соответствия языкового процессора ( ACATS )
  • Стандарт IEEE 1003.5b-1996 , привязка POSIX Ada
  • Ада Mapping спецификации языка , то CORBA язык описания интерфейсов (IDL) для отображения Ada

Обоснование [ править ]

Эти документы опубликованы в различных формах, в том числе в печатном виде.

  • Ичбия, Жан Д .; Барнс, Джон Г. П.; Ферт, Роберт Дж .; Вудгер, Майк (1986), Обоснование разработки языка программирования Ada , заархивировано из оригинала 02.02.2007.
  • Барнс, Джон Г. П. (1995), Обоснование Ada 95: язык: стандартные библиотеки
  • Барнс, Джон (2006) [2005], Обоснование Ada 2005

Книги [ править ]

  • Буч, Грэди (1987). Разработка программного обеспечения с помощью Ada . Калифорния: Издательство Benjamin / Cummings Publishing Company. ISBN 0-8053-0604-8.
  • Скансхольм, янв (1996). Ада 95 с самого начала . Эддисон-Уэсли. ISBN 0-201-40376-5.
  • Гилпин, Джефф. Ада: Экскурсия и учебное пособие . Зал Прентис. ISBN 978-0-13-004045-9.
  • Барнс, Джон (2006). Программирование на Аде 2005 . Эддисон-Уэсли. ISBN 0-321-34078-7.
  • Барнс, Джон (1991). Справочное руководство по программированию на языке Ada plus . Эддисон-Уэсли. ISBN 0-201-56539-0.
  • Барнс, Джон (1998). Программирование на Аде 95 . Эддисон-Уэсли. ISBN 0-201-34293-6.
  • Барнс, Джон (1997). Ада высокой интеграции: подход SPARK . Эддисон-Уэсли. ISBN 0-201-17517-7.
  • Барнс, Джон (2003). Программное обеспечение высокой степени интеграции: подход SPARK к безопасности . Эддисон-Уэсли. ISBN 0-321-13616-0.
  • Бейдлер, Джон (1997). Структуры данных и алгоритмы: объектно-ориентированный подход с использованием Ada 95 . Springer-Verlag. ISBN 0-387-94834-1.
  • Гонсалес, Дин В. (1991). Справочник программиста на Аде . Издательство Бенджамин-Каммингс. ISBN 0-8053-2529-8.
  • Бен-Ари, М. (1998). Ada для инженеров-программистов . Джон Вили и сыновья. ISBN 0-471-97912-0.
  • Коэн, Норман (1996). Ада как второй язык . McGraw-Hill Наука / Инженерия / Математика. ISBN 0-07-011607-5.
  • Бернс, Алан ; Веллингс, Энди (2001). Системы реального времени и языки программирования. Ada 95, Java в реальном времени и POSIX в реальном времени . Эддисон-Уэсли. ISBN 0-201-72988-1.
  • Бернс, Алан ; Веллингс, Энди (1995). Параллелизм в Аде . Издательство Кембриджского университета. ISBN 0-521-62911-X.
  • Аткинсон, Колин (1991). Объектно-ориентированное повторное использование, параллелизм и распространение: подход на основе Ada . Эддисон-Уэсли. ISBN 0-201-56527-7.
  • Буч, Гради ; Брайан, Дуг (1994). Разработка программного обеспечения с помощью Ada . Эддисон-Уэсли. ISBN 0-8053-0608-0.
  • Джонс, Do-While (1989). Ада в действии: с практическими примерами программирования . Джон Вили и сыновья. ISBN 0-471-60708-8.
  • Стаббс, Дэниел; Вебре, Нил В. (1993). Структуры данных с абстрактными типами данных и Ada . Брукс Коул. ISBN 0-534-14448-9.
  • Ледру, Паскаль (декабрь 1998 г.). Распределенное программирование на Ada с защищенными объектами . Диссертация.com. ISBN 1-58112-034-6.
  • Калвин, Финтан (1997). Ада, подход к развитию . Прентис Холл. ISBN 0-13-264680-3.
  • Английский, Джон; Калвин, Финтан (январь 1997 г.). Ada 95 - ремесло объектно-ориентированного программирования . Прентис Холл. ISBN 0-13-230350-7.
  • Musser, David R .; Степанов, Александр (24 октября 1989 г.). Универсальная библиотека Ada: пакеты обработки линейных списков . Springer-Verlag. ISBN 0-387-97133-5.
  • Фельдман, Майкл Б. (1997). Построение программного обеспечения и структуры данных с помощью Ada 95 . Эддисон-Уэсли. ISBN 0-201-88795-9.
  • Джонстон, Саймон (1997). Ada 95 для программистов на C и C ++ . Эддисон-Уэсли. ISBN 0-201-40363-3.
  • Фельдман, Майкл Б .; Коффман, Эллиот Б. (1992–1993). Ада: Решение проблем и разработка программ . Эддисон-Уэсли. ISBN 0-201-52279-9. 795 страниц.
  • Фельдман, Майкл Б .; Коффман, Эллиот Б. (1999). Ада 95 . Эддисон-Уэсли. ISBN 0-201-36123-X.
  • Дейл, Нелл Б .; Уимс, Чип; Маккормик, Джон (август 1996). Программирование и решение проблем с помощью Ada 95 . Издательство "Джонс и Бартлетт". ISBN 0-7637-0293-5.
  • Дейл, Нелл Б .; Маккормик, Джон (2007). Структуры данных Ada Plus: объектно-ориентированный подход, 2-е издание . Издательство "Джонс и Бартлетт". ISBN 978-0-7637-3794-8.
  • Крелл, Брюс С. (1992). Разработка с помощью Ada: методы жизненного цикла . Группа пабов Bantam Dell. ISBN 0-553-09102-6.
  • Епископ, Джуди (10 мая 1990 г.). Распределенная Ада: разработки и опыт . Издательство Кембриджского университета. ISBN 0-521-39251-9.
  • Санден, Бо (1994). Построение программных систем с примерами на языке Ada . Прентис Холл. ISBN 0-13-030834-X.
  • Хиллам, Брюс (1994). Введение в абстрактные типы данных с использованием Ada . Прентис Холл. ISBN 0-13-045949-6.
  • Радд, Дэвид (1994). Введение в дизайн и разработку программного обеспечения с помощью Ada . Брукс Коул. ISBN 0-314-02829-3.
  • Пайл, Ян К. (1991). Разработка систем безопасности: руководство с использованием Ada . Прентис Холл. ISBN 0-13-204298-3.
  • Бейкер, Луи (1989). Искусственный интеллект с Ada . Макгроу-Хилл. ISBN 0-07-003350-1.
  • Бернс, Алан ; Веллингс, Энди . HRT-HOOD: метод структурированного проектирования для систем Ada жесткого реального времени . Северная Голландия. ISBN 0-444-82164-3.
  • Савич, Уолтер; Петерсон, Чарльз (1992). Ада: Введение в искусство и науку программирования . Издательство Бенджамин-Каммингс. ISBN 0-8053-7070-6.
  • Вайс, Марк Аллен (1993). Структуры данных и анализ алгоритмов в Ada . Издательство Бенджамин-Каммингс. ISBN 0-8053-9055-3.
  • Ледгард, Генри (1983). Ада: Введение (второе изд.). Springer-Verlag. ISBN 0-387-90814-5.
  • Бьёрнер, Дайнс; Ост, Оле Н., ред. (1980). К формальному описанию Ады . Лондон: Springer-Verlag. ISBN 3-540-10283-3.

Архивы [ править ]

  • Материалы по языку программирования Ada, 1981–1990 . Институт Чарльза Бэббиджа , Университет Миннесоты. Включает литературу по программным продуктам, разработанным для языка Ada; Публикации правительства США, включая отчеты о проектах Ada 9X, технические отчеты, рабочие документы, информационные бюллетени; и информация о группе пользователей.

Внешние ссылки [ править ]

  • Ada - программа смены C / C ++ - MapuSoft
  • Спецификация языка программирования DOD Ada (ANSI / MIL STD 1815A-1983)
  • JTC1 / SC22 / WG9 ИСО - основа стандартов Ada
  • Ада (язык программирования) в Curlie