Прикладное программирование на языке ада

Ada
ПарадигмаМульти-парадигма
СемьяПаскаль
Разработанный компанией
  • MIL-STD-1815, Ada 83: Jean Ichbiah
  • Ада 95: Такер Тафт
  • Ada 2005: Tucker Taft
  • Ada 2012: Tucker Taft
Впервые появилсяФевраль 1980года ; 41 год назад
Стабильное высвобождение
Дисциплина машинописи статичный, сильный, безопасный, номинативный
ОСМульти — или кросс-платформенный
Расширения файлов.adb, .ads
Веб-сайтwww.adaic.org
AdaCore GNAT (скачать бесплатно: http://libre.adacore.com/download),
Green Hills Software Optimizing Ada 95 compiler,
PTC, Inc. PTC ApexAda и PTC ObjectAda,[3]
, ранее известный как [4]
DDC-I Score
ИСКРА, профиль Равенскара
ALGOL 68, Pascal, Simula 67,[5]C++ (Ada 95), Smalltalk (Ada 95), Modula-2 (Ada 95) Java (Ada 2005), Eiffel (Ada 2012)
C++, Chapel,[6]., Д, Эйфель, «Гриффин»., Java, Nim, ParaSail, PL/SQL, PL/pgSQL, Python, Ruby, Seed7, ., Sparkel, SQL/PSM, VHDL

Ada-это структурированный, статически типизированный, императивныйи объектно-ориентированный язык программирования высокого уровня

, расширенный из Pascal и других языков. Он имеет встроенную языковую поддержку design by contract (DbC). Чрезвычайно строгую типизацию, явный параллелизм, задачи. Синхронную передачу сообщений. Защищенные объекты и

недетерминизм. Ada повышает безопасность и ремонтопригодность кода. Используя компилятор для поиска ошибок в пользу ошибок времени выполнения. Ada-это международный технический стандарт, совместно определенный Международной организацией по стандартизации (ISO) и Международная электротехническая комиссия (МЭК). Начиная с 2020, стандарт. Называемый Ada 2012 неофициально,[7] является ISO/IEC 8652:2012.]

Ada была первоначально разработана командой во главе с французским компьютерным ученым Жаном Ичбией из CII Honeywell Bull по контракту с Министерством

обороны США (DoD) с 1977 по 1983 год. Чтобы заменить более 450 языков программирования. Используемых DoD в то время.[9] Ада была названа в честь Ады Лавлейс (1815-1852). Которая была признана первым программистом.]

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

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

Синтаксис Ada сводит к минимуму выбор способов выполнения основных операций и предпочитает английские ключевые слова (такие как Ада использует основные арифметические операторы Блоки кода разделяются такими словами. Как if … конец, если, петля … концевая петля). В случае условных блоков это позволяет избежать

болтающегося else это может сочетаться с неправильным вложенным выражением if в других языках. Таких как C или Java.

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

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

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

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

Вместо этого все динамическое выделение и освобождение памяти должно происходить с помощью явно объявленных типов доступа. Каждый тип доступа имеет связанный пул хранения, который обрабатывает низкоуровневые детали управления памятью; программист может либо использовать пул хранения по умолчанию. Либо определить новые (это особенно актуально для неравномерного доступа к памятиМожно даже объявить несколько различных типов доступа. Которые все обозначают один и тот же тип. Но используют разные пулы хранения. Кроме того, язык обеспечивает проверку доступностикак во время компиляции . Так и во время выполнения. Что гарантирует. Что значение доступа не может пережить тип объекта. На который оно указывает.]

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

Двойнойтире (тире em, обозначает текст комментария. Комментарии останавливаются в конце строки. Чтобы предотвратить незамкнутые комментарии от случайного удаления целых разделов исходного кода. Отключение целого блока кода теперь требует префиксации каждой строки (или столбца) отдельно с помощью При четком обозначении отключенного кода со столбцом повторяющихся

Точка с запятой ( — это терминатор оператора, а оператор null или no-operation-это оператор null;. Один ;без инструкции для завершения не допускается.

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

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

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

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

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

Ada привлекла много внимания со стороны сообщества программистов в целом в первые дни своего существования. Его поддерживает и другие предсказывали. Что он может стать доминирующим языком программирования общего назначения. А не только оборонной работы.[17] Ichbiah публично заявил. Что в течение десяти лет. Только двух языков программирования останутся: ада и сюсюкать.[18] в начале Ада составители пытались реализовать крупный. Сложный язык. И как во время компиляции и производительность во время выполнения. Как правило. Были медленными и примитивными инструментами.[17] Поставщики компиляторов потратили большую часть своих усилий на прохождение массивного. Тестирования соответствия языка. Необходимого правительству набора проверки что Ада Лавлейс…почти наверняка побледнела бы от употребления ее имени в последнее время; самое доброе. Что было сказано об этом, — это то. Что, вероятно. Есть хороший маленький язык, кричащий. Чтобы вырваться из его огромной слоновьей туши.

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

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

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

Из-за Ады безопасности критически важных вспомогательных функций, теперь она используется не только для военного применения, но и в коммерческих проектах, где ошибки программного обеспечения могут привести к тяжелым последствиям, например, авионика и управления воздушным движением, коммерческой ракеты, например, ракеты-носителя Ariane 4 и 5, спутников и других космических систем. Железнодорожного транспорта и банковской деятельности.[12] Например, система информационного управления самолетом, программное обеспечение fly-by-wire system в Boeing 777, было написано в Ada., он стал, возможно. Самым известным из всех проектов Ada. Гражданских или военных. Канадская автоматизированная система воздушного движения была написана в 1 миллионе строк Ada (SLOC count). Он отличался продвинутой распределенной обработкой, распределенной базой данных Ada и объектно-ориентированным дизайном. Ada также используется в других системах воздушного движения, например. Британская система управления воздушным движением следующего поколения Interim Future Area Control Tools Support (iFACTS) разработана и внедренас использованием SPARK Ada. высокоскоростная железнодорожная система. А также пригородные поезда метро в Париже, Лондоне. Гонконге и Нью-Йорке.]

Стандартизация

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

Другие связанные стандарты включают ISO 8651-3:1988 Information Processing systems—Computer graphics—Graphical Kernel System (GKS) language bindings—Part 3: Ada.

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

Ada-это алголоподобный язык программирования , содержащий управляющие структуры с зарезервированными словами , такими как if, then, else, while, forи т. Д. Однако Ada также имеет множество средств структурирования данных и других абстракций. Которые не были включены в оригинальный ALGOL 60, таких как определения типов, записи, указатели, перечисления. Такие конструкции были частично унаследованы от Паскаля или вдохновлены им .

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

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

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

привет, гнатмэйк. 

Типы данных

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

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

тип Day_type -это диапазон 1 .. 31; тип Month_type- это диапазон 1 .. 12; тип Year_type - это диапазон 1800 .. 2100; type Hours is mod 24; type Weekday is (Понедельник, вторник, Среда, Четверг, Пятница, Суббота, воскресенье); type Date is record Day : Day_type; Month : Month_type; Year : Year_type; end record; 

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

подтип Working_Hours   -Диапазон часов 0 .. 12; -- не более 12 часов для работы подтип рабочего дня  Working_Day-это диапазон рабочих дней в понедельник .. Пятница; -- Days to work Work_Load: constant array(Working_Day) of Working_Hours -- неявное объявление типа := (Friday  6, Monday  4, others  10); -- таблица поиска рабочих часов с инициализацией 

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

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

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

-- а не равно б. Петли. а в /= б петель Ада.Text_IO.Put_Line (); конец цикла; если А > Б то Ада.Text_IO.Put_Line (); еще Ада.Text_IO.Put_Line (); конец , если; для Я в 1 .. 10 петли Ада.Text_IO.Поставить (); Ада.Text_IO.Положить (Я); Ада.Text_IO.Put_Line; конец цикла; цикл а := а + 1; выход при а = 10; конец цикла; случае я это , когда 0  Ады.Text_IO.Поставить (); при 1  Ады.Text_IO.Поставить (); при 2  Ады.Text_IO.Поставить (); -- операторы должны охватывать все возможные случаи: когда другие  Ады.Text_IO.Поставить (); конец дела; для aWeekday в будний день'спектр петли -- петли за перечисление Put_Line ( будний день'изображения(aWeekday) ); -- вывод строкового представления перечисления if aWeekday в Working_Day then -- проверка подтипа перечисления Put_Line ( "to work for" & Working_Hours'Image (Work_Load(aWeekday)) ); -- доступ в таблицу поиска end if; end loop; 

Пакеты. Процедуры и функции

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

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

 пример пакета - тип Number is range 1 .. 11; процедура Print_and_Increment (j: in out Number); конечный Пример; 

Тело пакета (пример.adb)

с Ада.Text_IO; пакет тело примере это я : количество := количество'первый; порядок Print_and_Increment (Дж: В Из число) - это функция следующего (К: в ряд) возвращает число - это начать возвращение в K + 1; конец следующего; начать Ада.Text_IO.Put_Line (  & номером'изображения(Дж) ); от J := следующий (Дж); конец Print_and_Increment; -- пакет инициализации выполняется. Если пакет разработана начаться в то время как я  Число'последние петли Print_and_Increment (я); конец цикла; конец примера; 

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

gnatmake -z example.adb 

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

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

Параллелизм

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

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

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

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

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

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

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

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

с Ада.Text_IO; использование Ада.Text_IO; порядок движения является тип Airplane_ID находится в диапазоне 1..10; 10-- самолеты задач типа самолета (код: Airplane_ID); -- панель задач. Представляющих самолеты. С ID в качестве параметра инициализации типа Airplane_Access является доступ к самолету; -- ссылка тип самолета защищены типа взлетно-посадочной полосы , это -- общая взлетная полоса (защищенный разрешить одновременный доступ) запись Assign_Aircraft (код: Airplane_ID); -- все элементы гарантированно взаимоисключающие записи, Cleared_Runway (код: Airplane_ID); запись Wait_For_Clear; частная понятно: типа boolean := истина; - защищает личные данные - как правило, больше. Чем лишь флаг... конца ВПП; тип Runway_Access является открыть все взлетно-посадочной полосы; -- авиадиспетчера задач принимает запросы для взлета и посадки задач типа контроллера (My_Runway: Runway_Access) это - задача для записи синхронной передачи сообщений запись Request_Takeoff (код: в Airplane_ID; взлет: из Runway_Access); запись Request_Approach(код: в Airplane_ID; подход: из Runway_Access); конец контроллера; -- распределение экземпляры Runway1 : псевдоним взлетно-посадочной полосы; -- создание взлетно-посадочной полосы Управления1: контроллер (Runway1'доступ); и контроллер для управления им ------ реализациях выше типы ------ защищенного корпуса взлетно-посадочной полосы - это запись Assign_Aircraft (код: Airplane_ID) , когда понятно будет -- запись охранно - называть задачи будут заблокированы до тех пор. Пока условие имеет значение true начала ясно := ложь; Put_Line (Airplane_ID'изображения (идентификатор) & ); конец; запись Cleared_Runway (код: Airplane_ID) , когда не понятно - это начать ясно := истина; Put_Line (Airplane_ID'изображения (идентификатор) & ); Конец; запись Wait_For_Clear , когда ясно - это начать нуль; - нет необходимости ничего делать. Вот - задачу можно только если ввести  конец; конец ВПП; задание корпус контроллера - это начать цикл My_Runway.Wait_For_Clear; -- ждать. Пока взлетно-посадочная полоса в наличии (блокирующий вызов) выберите -- ждать два типа запросов (в зависимости от выполняемых первого) когда Request_Approach'счетчик = 0  -- охранник заявление - принимать только при отсутствии задач в очереди на Request_Approach принять Request_Takeoff (код: в Airplane_ID; взлет: из Runway_Access) делать -- пуск синхронного часть My_Runway.Assign_Aircraft (ИД); -- резервной взлетно-посадочной полосы (потенциально блокирующий вызов. Если охраняемый объект занят или запись гвардия ложные) взлет := My_Runway; -- назначать  конце Request_Takeoff; -- конец Синхронное часть или принимать Request_Approach (код: в Airplane_ID; подход: из Runway_Access) сделать My_Runway.Assign_Aircraft (ИД); подход := My_Runway; конец Request_Approach; или -- прекратить. Если нет задач не осталось. Кто мог бы назвать прекращение; конец выбора; конец цикла; конец; задача корпус самолета имеет ВПП : Runway_Access; начать Управления1.Request_Takeoff (идентификатор, ВПП); -- этот вызов блокируется до контроллера задач принимает и заканчивает принимать заблокировать Put_Line (Airplane_ID'изображения (идентификатор) & ); задержка 2.0; ВПП.Cleared_Runway (код); - назвать не блокировать, а  задержки 5.0; -- летать вокруг немного... цикл выберите - постарайтесь запросу взлетно-посадочной полосы Управления1.Request_Approach (идентификатор, ВПП); -- это блокирующий вызов - будет работать на контроллере достижения принять заблокировать и вернуть на доработку выезда; - если вызов вернул нас на посадку - оставить выберите блок и приступить... или задержки 3.0; -- timeout - если нет ответа в течение 3 секунд. Делать что-то другое (все в следующий блок) Put_Line (Airplane_ID'изображения (идентификатор) & ); - просто напечатать сообщение конца выбора; конец цикла; Задержка 4.0; -- делать заход на посадку... Put_Line (Airplane_ID'изображения (идентификатор) & ); ВПП.Cleared_Runway (ИД); - сообщите взлетно-посадочной полосы. Что мы закончили. 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; 

Прагмы

Pragma-это директива компилятора. Которая передает информацию компилятору. Чтобы позволить определенную манипуляцию скомпилированным выводом.

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

Дженерики

У Ada есть дженерики с тех пор. Как они были впервые разработаны в 1977-1980 годах. Стандартная библиотека использует дженерики для предоставления многих услуг. Ada 2005 добавляет к стандартной библиотеке всеобъемлющую универсальную контейнерную библиотеку. Вдохновленную стандартной библиотекой шаблонов C++.

Универсальная единица-это пакет или подпрограмма. Которая принимает один или несколько универсальных формальных параметров.

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

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

  • APSE – спецификация среды программирования для поддержки разработки программного обеспечения в Ada
  • Профиль Ravenscar – подмножество функций Ada tasking. Предназначенных для критически важных для безопасности жестких вычислений в реальном времени
  • SPARK (язык программирования) – язык программирования. Состоящий из сильно ограниченного подмножества Ada. Аннотированного метаинформацией. Описывающей желаемое поведение компонентов и отдельные требования к выполнению
  1. ^
  2. ^ . Орган по оценке соответствия Ada. Архивировано с оригинала на 2016-03-03. Извлечено 2016-02-23.
  3. ^ . PTC.com. Проверено 2014-01-27.
  4. ^ .
  5. ^ Ada Rationale, 1986, стр. 23, 70, 110-114, 137, 165, 236
  6. ^ (PDF). Cray Inc. 2015-10-01. Проверено 2016-01-14.
  7. ^ Ganssle, Jack (2013-05-29). . Adaic.org. 2013-06-14.
  8. ^ b Информационные технологии – Языки программирования – Ada. Международная организация по стандартизации. Проверено 2012-12-23.
  9. ^ . University of Mich. Архивировано с оригинала на 2016-05-22. Проверено 27 мая 2016года .
  10. ^ Fuegi, J; Francis, J (2003). года IEEE Annals of the History of Computing. 25 (4): 16-26. doi:10.1109/MAHC.2003.1253887. S2CID 40077111.
  11. ^ Taft, S. Tucker; Olsen, Florence (1999-06-30). . Правительственные компьютерные новости, стр. 2-3 . Проверено 2010-09-14.
  12. ^ b c Фельдман. Майкл. — Кто использует Аду?. Образовательная рабочая группа СИГАда.
  13. ^ no safe dynamic memory management in ADA, in: Writing Linux Kernel Modules in Safe Rust — Geoffrey Thomas & Alex Gaynor , The Linux Foundation, 2019-10-02
  14. ^ . Sei.cmu.edu. Проверено 2014-01-27.
  15. ^ C. A. R., Hoare (1981). (PDF). Коммуникации АСМ. Ассоциация вычислительной техники. 24 (2): 75–83. doi:10.1145/358549.358561. S2CID 97895.
  16. ^ Watt, D. A.; Wichmann, B. A.; Findlay, W. (1987). Ada: Язык и методология. Прентис-Холл.
  17. ^ b c d Sward. Ricky E. (ноябрь 2010). SIGAda ’10: Материалы ежегодной международной конференции ACM SIGAda по SIGAda. С. 71-74. doi:10.1145/1879063.1879081.
  18. ^ b c Розен. Джей-Пи. (Август 2009). ACM SIGAda. 24 (2): 28-35. doi:10.1145/1620593.1620597. S2CID 608405.
  19. ^ SofTech Inc. (1983-04-11). . Waltham, MA. Archived from the original on 2012-03-12. Извлечено в 2010-12-16 годах.
  20. ^ Dewar, Robert B. K.; Fisher, Gerald A. Jr.; Schonberg, Edmond; Froelich, Robert; Bryant, Stephen; Goss, Clinton F.; Burke, Michael (ноябрь 1980). ACM SIGPLAN Notices – Материалы симпозиума ACM-SIGPLAN по языку программирования Ada. 15 (11): 194–201. doi:10.1145/948632.948659. ISBN 0-89791-030-3. S2CID 10586359.
  21. ^ Информационно-координационный центр Ada. 1 июля 1992 г., стр.
  22. ^ Информационный центр Ada (1983-04-11). . Архивирован с оригинала на 2016-03-04. Проверено 2015-06-07.
  23. ^ Бабяк, Николас Дж. (1989). Ada, the New DoD Weapon System Computer Language – Panacea or Calamity (PDF). Воздушный университет (Военно-воздушные силы Соединенных Штатов) .
  24. ^ b Rehmer, Karl (2009). Стеллман, Эндрю; Грин, Дженнифер (ред.). Красивые команды: вдохновляющие и предостерегающие рассказы ветеранов-руководителей команд. Севастополь. Калифорния: O’Reilly, стр.
  25. ^ b Вулф, Александр (октябрь 2004). . Очередь ACM. 2 (7): 28–31. doi:10.1145/1035594.1035608.
  26. ^ Адакор. . Архивирован с оригинала 2010-12-24 годов. 2011-03-01.
  27. ^ Адакор. . Архивирован с оригинала 2010-12-24 годов. 2011-03-01.
  28. ^ (PDF). Архивирован из оригинала (PDF) 6 июля 2011года . Получено 28 февраля 2011года .
  29. ^ . Archive.adaic.com. Проверено 2014-01-27.
  30. ^ . Archive.adaic.com… Архивирован с оригинала 2012-02-06. Проверено 2014-01-27.

Международные стандарты

Обоснование

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

Книги

  • Буч, Грейди (1987). Разработка программного обеспечения с помощью Ada. Калифорния: Издательская компания ISBN 0-8053-0604-8.
  • Скансхольм, Ян (1996). Ада 95 С самого начала. Эддисон-Уэсли. ISBN 0-201-40376-5.
  • Гилпин, Джефф. Ада: Экскурсия с гидом и Учебник. Прентис холл. ISBN 978-0-13-004045-9.
  • Barnes, John (2006). Программирование в Ada 2005. Эддисон-Уэсли. ISBN 0-321-34078-7.
  • Барнс, Джон (1991). Справочник по программированию на языке Ada plus. Эддисон-Уэсли. ISBN 0-201-56539-0.
  • Barnes, John (1998). Программирование на Ada 95. Эддисон-Уэсли. ISBN 0-201-34293-6.
  • Barnes, John (1997). Высокая Целостность Ada: Подход ИСКРЫ. Эддисон-Уэсли. ISBN 0-201-17517-7.
  • Барнс, Джон (2003). Программное обеспечение высокой целостности: Искровой подход к обеспечению безопасности и сохранности. Эддисон-Уэсли. ISBN 0-321-13616-0.
  • Beidler, John (1997). Структуры данных и алгоритмы: Объектно-Ориентированный Подход С использованием Ada 95. Шпрингер-Верлаг. ISBN 0-387-94834-1.
  • Гонсалес, Дин У. (1991). Руководство программиста Ada. Издательство Бенджамина-Каммингса. ISBN 0-8053-2529-8.
  • Бен-Ари, М. (1998). Ada для инженеров-программистов. Джон Уайли и сыновья. ISBN 0-471-97912-0.
  • Коэн, Норман (1996). Ада как второй язык. Наука Макгроу-Хилл/Инженерия/математика. ISBN 0-07-011607-5.
  • Бернс, Алан; Уэллингс, Энди (2001). Системы реального времени и языки программирования. Ada 95, Real-Time Java и Real-Time POSIX. Эддисон-Уэсли. ISBN 0-201-72988-1.
  • Бернс, Алан; Wellings, Andy (1995). Параллелизм в Ada. Издательство Кембриджского университета. ISBN 0-521-62911-X.
  • Аткинсон, Колин (1991). Объектно-ориентированное повторное использование. Параллелизм и распространение: Подход на основе Ada. Эддисон-Уэсли. ISBN 0-201-56527-7.
  • Booch, Grady; Bryan, Doug (1994). Разработка программного обеспечения с помощью Ada. Эддисон-Уэсли. ISBN 0-8053-0608-0.
  • Джонс, Do-While (1989). Ada в Действии: С Практическими Примерами Программирования. Джон Уайли и сыновья. ISBN 0-471-60708-8.
  • Stubbs, Daniel; Webre, Neil W. (1993). Структуры данных с абстрактными типами данных и Ada. Брукс Коул. ISBN 0-534-14448-9.
  • Ледру, Паскаль (декабрь 1998). Распределенное программирование в Ada с защищенными объектами. Dissertation.com… ISBN 1-58112-034-6.
  • Culwin, Fintan (1997). Ада, Подход к Развитию. Прентис Холл. ISBN 0-13-264680-3.
  • Английский, Джон; Калвин, Финтан (январь 1997). Ada 95 — искусство объектно-ориентированного программирования. Прентис Холл. ISBN 0-13-230350-7.
  • Мюссер, Дэвид Р.; Степанов, Александр (24 октября 1989). Универсальная библиотека Ada: Пакеты обработки линейных списков. Шпрингер-Верлаг. ISBN 0-387-97133-5.
  • Фельдман. Майкл Б. (1997). Построение программного обеспечения и структур данных с Ada 95. Эддисон-Уэсли. ISBN 0-201-88795-9.
  • Джонстон, Саймон (1997). Ada 95 для программистов на C и C++. Эддисон-Уэсли. ISBN 0-201-40363-3.
  • Feldman, Michael B.; Koffman, Elliot B. (1992-1993). Ada: Решение проблем и разработка программ. Эддисон-Уэсли. ISBN 0-201-52279-9. 795 с.
  • Фельдман. Майкл Б.; Коффман, Эллиот Б. (1999). Ada 95. Эддисон-Уэсли. ISBN 0-201-36123-X.
  • Dale, Nell B.; Weems, Chip; McCormick, John (август 1996). Программирование и решение задач с помощью Ada 95. Издательство ISBN 0-7637-0293-5.
  • Dale, Nell B.; McCormick, John (2007). Ada Plus Data Structures: Объектно-Ориентированный подход, 2-е издание. Издательство ISBN 978-0-7637-3794-8.
  • Крелл, Брюс К. (1992). Разработка С Помощью Ada: Методы Жизненного Цикла. Bantam Dell Pub Group. ISBN 0-553-09102-6.
  • Бишоп, Джуди (10 мая 1990). Распределенная Ada: Разработки и опыт. Издательство Кембриджского университета. ISBN 0-521-39251-9.
  • Sanden, Bo (1994). Построение программных Систем С Примерами в Ada. Прентис Холл. ISBN 0-13-030834-X.
  • Hillam, Bruce (1994). Введение в Абстрактные типы данных с использованием Ada. Прентис Холл. ISBN 0-13-045949-6.
  • Радд, Дэвид (1994). Введение в проектирование и разработку программного обеспечения с помощью Ada. Брукс Коул. ISBN 0-314-02829-3.
  • Пайл, Ян К. (1991). Разработка Систем Безопасности: Руководство По Использованию Ada. Прентис Холл. ISBN 0-13-204298-3.
  • Бейкер, Луи (1989). Искусственный Интеллект С Адой. Макгроу-Хилл. ISBN 0-07-003350-1.
  • Бернс, Алан; Уэллингс, Энди. HRT-HOOD: Метод структурированного проектирования жестких систем Ada в реальном Времени. Северная Голландия. ISBN 0-444-82164-3.
  • Савич, Уолтер; Петерсон, Чарльз (1992). Ада: Введение в искусство и науку программирования. Издательская компания ISBN 0-8053-7070-6.
  • Weiss, Mark Allen (1993). Структуры данных и анализ алгоритмов в Ada. Издательская компания ISBN 0-8053-9055-3.
  • Ледгард, Генри (1983). Ада: Введение (второе изд.). Шпрингер-Верлаг. ISBN 0-387-90814-5.
  • Bjørner, Dines; Oest, Ole N., eds. К Формальному Описанию Ады. Лондон: Springer-Verlag. ISBN 3-540-10283-3.

Архивы

Внешние ссылки

Wikisource имеет несколько оригинальных текстов, связанных с: Ada
Wikiversity имеет учебные ресурсы об Ada