stringtranslate.com

Ада (язык программирования)

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

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

Функции

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

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

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

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

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

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

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

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

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

Точка с запятой (";") является признаком завершения оператора , а нулевой оператор или оператор отсутствия операции – это null;. Одиночное сообщение ;без инструкции о прекращении не допускается.

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

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

История

В 1970-х годах Министерство обороны США (DoD) было обеспокоено количеством различных языков программирования, используемых в его проектах встраиваемых компьютерных систем, многие из которых были устаревшими или аппаратно-зависимыми, и ни один из которых не поддерживал безопасное модульное программирование. В 1975 году была сформирована рабочая группа High Order Language Workshop (HOLWG) с намерением сократить это число путем поиска или создания языка программирования, в целом подходящего для требований ведомства и Министерства обороны Великобритании . После многих итераций, начавшихся с оригинального предложения [18], конечный язык программирования был назван Ада. Общее количество языков программирования высокого уровня, используемых в таких проектах, упало с более чем 450 в 1983 году до 37 к 1996 году.

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

Акварельная живопись Ады Лавлейс.

Были выпущены запросы на предложения по новому языку программирования, и для разработки своих предложений были наняты четыре подрядчика под именами Red ( Intermetrics , возглавляемая Бенджамином Бросголом), Green ( Honeywell , возглавляемая Джин Ичбиа ), Blue ( SofTech , возглавляемая Джоном Гуденафом ). ) [19] и Yellow ( SRI International , возглавляемый Джеем Спитценом). В апреле 1978 года, после общественного рассмотрения, предложения красных и зеленых перешли в следующий этап. В мае 1979 года предложение Грина, разработанное Джин Ичбиа из Honeywell, было выбрано и получило имя Ада — в честь Августы Ады Кинг, графини Лавлейс, обычно известной как Ада Лавлейс . На это предложение повлиял язык LIS , который Ичбиа и его группа разработали в 1970-х годах. Справочное руководство по военному стандарту было утверждено 10 декабря 1980 года (день рождения Ады Лавлейс) и получило номер MIL-STD-1815 в честь года рождения Ады Лавлейс. В 1981 году Тони Хоар воспользовался своей речью на премии Тьюринга , чтобы раскритиковать Аду за ее чрезмерность и, следовательно, ненадежность, [20] но впоследствии, похоже, отказался от предисловия, которое он написал для учебника по Аде. [21]

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

Первой проверенной реализацией Ada был переводчик Ada/Ed NYU, [25] сертифицированный 11 апреля 1983 года. Ada/Ed NYU реализована на языке набора высокого уровня SETL . [26] Несколько коммерческих компаний начали предлагать компиляторы Ada и связанные с ними инструменты разработки, включая Alsys , TeleSoft , DDC-I , Advanced Computer Techniques , Tartan Laboratories , Irvine Compiler, TLD Systems и Verdix . [27] Производители компьютеров, имевшие значительный бизнес в оборонной, аэрокосмической или смежных отраслях, также предлагали компиляторы и инструменты Ada на своих платформах; в их число входили Concurrent Computer Corporation , Cray Research, Inc. , Digital Equipment Corporation , Harris Computer Systems и Siemens Nixdorf Informationssysteme AG . [27]

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

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

Из-за критически важных для безопасности функций поддержки Ada теперь используется не только для военных приложений, но и в коммерческих проектах, где ошибка программного обеспечения может иметь серьезные последствия, например, в авионике и управлении воздушным движением , коммерческих ракетах, таких как Ariane 4 и 5. , спутники и другие космические системы, железнодорожный транспорт и банковское дело. [16] Например, основная система управления полетом, программное обеспечение электродистанционной системы в Boeing 777 , было написано на языке Ada, как и электродистанционные системы для аэродинамически нестабильного Eurofighter Typhoon , [30] Saab. Gripen , [31] Lockheed Martin F-22 Raptor и замена системы управления полетом DFCS для Grumman F-14 Tomcat . Канадская автоматизированная система воздушного движения была написана на 1 миллионе строк языка Ada ( счет SLOC ). Он отличался расширенной распределенной обработкой , распределенной базой данных Ada и объектно-ориентированным дизайном. Ada также используется в других системах воздушного движения, например, британская система управления воздушным движением следующего поколения Interim Future Area Control Tools Support (iFACTS) разработана и реализована с использованием SPARK Ada. [32] Он также используется во французской кабинной системе сигнализации TVM на высокоскоростной железнодорожной системе TGV и в пригородных поездах метро в Париже, Лондоне, Гонконге и Нью-Йорке. [16] [33]

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

Предварительную версию Ada можно найти в Уведомлениях ACM Sigplan, том 14, № 6, июнь 1979 г. [34]

Ада была впервые опубликована в 1980 году как стандарт ANSI ANSI/ MIL-STD 1815 . Поскольку эта самая первая версия содержала много ошибок и несоответствий [a] , исправленное издание было опубликовано в 1983 году как ANSI/MIL-STD 1815A. Без каких-либо дальнейших изменений он стал стандартом ISO в 1987 году. [36] Эта версия языка широко известна как Ada 83 со дня ее принятия ANSI, но иногда ее называют также Ada 87 с даты его принятия ISO. [37] Существует также французский перевод; В 1988 году DIN перевел его на немецкий язык как DIN 66268.

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

Продолжается работа по улучшению и обновлению технического содержания языка Ада. Техническое исправление к Ada 95 было опубликовано в октябре 2001 г. [40] [41] , а основная поправка ISO/IEC 8652:1995/Amd 1:2007 [42] [43] была опубликована 9 марта 2007 г., широко известная как Ada 2005, поскольку работа над новым стандартом была завершена в этом году.

На конференции Ada-Europe 2012 в Стокгольме Ассоциация ресурсов Ada (ARA) и Ada-Europe объявили о завершении разработки последней версии языка Ada и подаче справочного руководства в ОТК ISO/IEC 1/. SC 22 /WG 9 Международной организации по стандартизации (ISO) и Международной электротехнической комиссии (IEC) для утверждения. ISO/IEC 8652:2012 [44] (см. Ada 2012 RM) был опубликован в декабре 2012 года и известен как Ada 2012 . Было опубликовано техническое исправление ISO/IEC 8652:2012/COR 1:2016 [45] (см. RM 2012 с TC 1).

2 мая 2023 года сообщество Ada официально одобрило публикацию стандарта языка программирования версии Ada 2022 . [11]

Несмотря на названия Ada 83, 95 и т. д., юридически существует только один стандарт Ada, один из последних стандартов ISO/IEC: с принятием новой версии стандарта предыдущая отменяется. Остальные названия лишь неофициальные, относящиеся к определенному изданию.

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

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

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

"Привет, мир!" в Аде

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

с  Ada.Text_IO ;процедура  Привет начинать Ада . Текст_ИО . Put_Line  ( "Привет, мир!" );конец  Привет ;

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

gnatmake  hello.adb

Типы данных

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

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

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

Важно отметить: Day_type, Month_type, Year_type, Hours — несовместимые типы, а это означает, что, например, следующее выражение является недопустимым:

Сегодня :  Day_type  :=  4 ;Текущий_месяц :  Тип_месяца  :=  10 ;...  Сегодня  +  Текущий_Месяц  ...  -- незаконно

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

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

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

Типы могут иметь модификаторы, такие как Limited, Abstract, Private и т. д. Частные типы не показывают свою внутреннюю структуру; объекты ограниченных типов не могут быть скопированы. [46] В Ada 95 добавлены дополнительные возможности объектно-ориентированного расширения типов.

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

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

-- пока a не равно b, цикл.в то время как  цикл a  /=  b  Ада . Текст_ИО . Put_Line  ( "Ожидание" );конец  цикла ;если  а  >  б  , то Ада . Текст_ИО . Put_Line  ( "Условие выполнено" );еще Ада . Текст_ИО . Put_Line  ( "Условие не выполнено" );конец  , если ;для  меня  в  1..10  петлю   Ада . Текст_ИО . Вставьте  ( "Итерация:" ); Ада . Текст_ИО . Поставьте  ( я ); Ада . Текст_ИО . Поместить_строку ;конец  цикла ;петля а  :=  а  +  1 ; выйти  , когда  a  =  10 ;конец  цикла ;случай,  когда я  когда  0  =>  Ада . Текст_ИО . Поставить  ( «ноль» ); когда  1  =>  Ада . Текст_ИО . Положите  ( «один» ); когда  2  =>  Ада . Текст_ИО . Поставьте  ( «два» ); -- операторы случая должны охватывать все возможные случаи: когда  другие  =>  Ада . Текст_ИО . Поместите  ( «ничего из вышеперечисленного» );конец  дела ;for  aWeekday  in  Weekday ' Цикл Range  -- цикл по перечислению  Put_Line  (  День недели ' Изображение ( aWeekday )  );  -- выходное строковое представление перечисления если  aWeekday  в  Work_Day  then  -- проверка подтипа перечисления Put_Line  (  "для работы"  & Изображение рабочих_часов ( Work_Load  ( aWeekday ) ) ; -- доступ к справочной таблице   конец  , если ;конец  цикла ;

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

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

Функции отличаются от процедур тем, что они должны возвращать значение. Вызовы функций не могут использоваться «как оператор», а их результат должен быть присвоен переменной. Однако, начиная с Ada 2012, функции не обязаны быть чистыми и могут изменять свои соответствующим образом объявленные параметры или глобальное состояние. [47]

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

 Пример  пакета : Тип  Номер  находится в  диапазоне  1  ..  11 ; процедура  Print_and_Increment  ( j : входной  номер  ) ;конец  примера ;

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

с  Ada.Text_IO ; Тело  пакета Пример  : i  :  Число  :=  Число ' Первое ; Процедура  Print_and_Increment  ( j : входной  номер )   функция  Next  ( k : in  Number )  return  Number  начинать вернуть  k  +  1 ; конец  Далее ; начинать Ада . Текст_ИО . Put_Line  (  "Итого: "  &  Number ' Image ( j )  ); j  :=  Следующий  ( j ); конец  Print_and_Increment ;-- инициализация пакета выполняется при разработке пакетаначинать while  i  <  Number ' Последний  цикл Print_and_Increment  ( я ); конец  цикла ;конец  примера ;

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

gnatmake  -z  пример.adb

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

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

Прагмы

Прагма — это директива компилятора , которая передает компилятору информацию, позволяющую конкретно манипулировать скомпилированным выводом. [48] ​​Некоторые прагмы встроены в язык, [49] тогда как другие зависят от реализации.

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

Дженерики

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

Общий модуль — это пакет или подпрограмма, принимающая один или несколько общих формальных параметров . [50]

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

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

Смотрите также

Примечания

  1. ^ см. Обзор изменений языка Ada [35]
  1. ^ «Обоснование Ada2012» (PDF) . adacore.com . Архивировано (PDF) из оригинала 18 апреля 2016 года . Проверено 5 мая 2018 г.
  2. ^ «Коммерческое программное обеспечение для Ada, C и C++». АдаКор . Проверено 4 апреля 2023 г.
  3. ^ "PTC ObjectAda". PTC.com . Проверено 27 января 2014 г.
  4. ^ "Чейнджер MapuSoft Ada-C/C++" . 16 апреля 2019 г.
  5. ^ «Список сертифицированных процессоров Ada 95 — Подробности» . ada-auth.org . Проверено 4 апреля 2023 г.
  6. ^ Ada Rationale, 1986, стр. 23, 70, 110–114, 137, 165, 236.
  7. ^ «Спецификация часовни (Благодарности)» (PDF) . Cray Inc. 01 октября 2015 г. Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 14 января 2016 г.
  8. ^ "Драго". Архивировано из оригинала 14 сентября 2020 г. Проверено 6 августа 2018 г.
  9. ^ "Проект Грифон". cs.nyu.edu . Проверено 4 апреля 2023 г.
  10. ^ «Язык программирования SparForte» . www.sparforte.com . Проверено 4 апреля 2023 г.
  11. ^ Аб Пиньо, Луис Мигель (июнь 2023 г.). «С редакционного стола». Письма Ады . XLIII (1). Ассоциация вычислительной техники: 3. doi : 10.1145/3631483 (неактивно с 31 января 2024 г.).{{cite journal}}: CS1 maint: DOI inactive as of January 2024 (link)
  12. ^ «Язык программирования Ада» . Мичиганский университет . Архивировано из оригинала 22 мая 2016 г. Проверено 27 мая 2016 г.
  13. ^ Фуэги, Дж; Фрэнсис, Дж (2003). «Лавлейс и Бэббидж и создание «заметок» 1843 года».". IEEE Annals of the History of Computing . 25 (4): 16–26. doi : 10.1109/MAHC.2003.1253887. S2CID  40077111.
  14. ^ «Параллелизм. Глава 6. Руководство по качеству и стилю Ada 95» . адаик.орг . Проверено 5 ноября 2021 г.
  15. ^ Тафт, С. Такер; Олсен, Флоренция (30 июня 1999 г.). «Ада помогает создавать код с меньшим количеством ошибок». Правительственные компьютерные новости. стр. 2–3. Архивировано из оригинала 31 августа 2015 г. Проверено 14 сентября 2010 г.
  16. ^ abc Фельдман, Майкл. «Кто использует Ada? Реальные проекты на основе языка программирования Ada, ноябрь 2014 г.». Рабочая группа по образованию SIGada.
  17. ^ нет безопасного управления динамической памятью в ADA, в: Написание модулей ядра Linux в Safe Rust - Джеффри Томас и Алекс Гейнор, The Linux Foundation, 2019-10-02
  18. ^ "DoD - Требования Соломенного человека - апрель 1975 г." . iment.com . Проверено 4 апреля 2023 г.
  19. ^ "Джон Гуденаф | Профиль персонала SEI" . Sei.cmu.edu . Проверено 27 января 2014 г.
  20. ^ АВТОМОБИЛЬ, Хоар (1981). «Старая одежда императора» (PDF) . Коммуникации АКМ . 24 (2). Ассоциация вычислительной техники : 75–83. дои : 10.1145/358549.358561 . S2CID  97895. Архивировано (PDF) из оригинала 4 марта 2016 г.
  21. ^ Ватт, Д.А.; Вичманн, бакалавр; Финдли, В. (1987). Ада: язык и методология . Прентис-Холл.
  22. ^ abcd Sward, Рики Э. (ноябрь 2010 г.). «Взлет, падение и существование Ады». SIGAda '10: Материалы ежегодной международной конференции ACM SIGAda по SIGAda. стр. 71–74. дои : 10.1145/1879063.1879081. ISBN 978-1-4503-0027-8.
  23. ^ abc Розен, JP. (август 2009 г.). «Парадокс Ады». Письма Ады . 24 (2). АСМ СИГАда: 28–35. дои : 10.1145/1620593.1620597. S2CID  608405.
  24. ^ «ЭТО ЖАРГОННЫЙ ФАЙЛ, ВЕРСИЯ 2.6.2» (TXT) . 14 февраля 1991 г. Проверено 31 января 2023 г.
  25. ^ SofTech Inc. (11 апреля 1983 г.). «Сводный отчет о проверке компилятора Ada: NYU Ada/ED, версия 19.7 V-001». Уолтем, Массачусетс. Архивировано из оригинала 12 марта 2012 г. Проверено 16 декабря 2010 г.
  26. ^ Дьюар, Роберт Б.К.; Фишер, Джеральд А. младший; Шенберг, Эдмонд; Фрёлих, Роберт; Брайант, Стивен; Госс, Клинтон Ф.; Берк, Майкл (ноябрь 1980 г.). «Переводчик Ады Нью-Йоркского университета». Материалы симпозиума ACM-SIGPLAN по языку программирования Ada — SIGPLAN '80 . Том. 15. стр. 194–201. дои : 10.1145/948632.948659. ISBN 0-89791-030-3. S2CID  10586359.
  27. ^ ab «Список проверенных компиляторов Ada» . Информационный центр Ады. 1 июля 1992 г. стр. 1–36.
  28. ^ Информационный центр Ады (11 апреля 1983 г.). «Мандат Конгресса по Аде». Архивировано из оригинала 4 марта 2016 г. Проверено 7 июня 2015 г.
  29. ^ Бабяк, Николас Дж. (1989). Ада, новый компьютерный язык системы вооружения Министерства обороны США - Панацея или бедствие (PDF) . Воздушный университет (ВВС США) . стр. 39–40. Архивировано (PDF) из оригинала 15 декабря 2019 г.
  30. ^ «Гибкое мышление». FlightGlobal . 16 июня 1999 года. Архивировано из оригинала 15 апреля 2021 года . Проверено 13 февраля 2024 г.
  31. ^ Фрисберг, Бо. «Использование Ada в системе управления полетом Gripen» (PDF) . Специальная группа по интересам по Аде . Архивировано (PDF) из оригинала 15 января 2024 года . Проверено 13 февраля 2024 г.
  32. ^ АдаКор. «GNAT Pro выбран для британской системы УВД следующего поколения». Архивировано из оригинала 24 декабря 2010 г. Проверено 1 марта 2011 г.
  33. ^ АдаКор. «Посмотрите, кто использует Ada». Архивировано из оригинала 24 декабря 2010 г. Проверено 1 марта 2011 г.
  34. ^ Ичбиа, JD (июнь 1979 г.). «Уведомления ACM Sigplan». стр. 1–145. дои : 10.1145/956650.956651.
  35. ^ Краткое изложение изменений языка Ada
  36. ^ «ISO 8652:1987». ИСО . 21 февраля 2013 г. Проверено 19 января 2024 г.
  37. ^ "Ада 83 LRM, первая страница" . archive.adaic.com . Проверено 19 января 2024 г.
  38. ^ «ISO/IEC 8652:1995». ИСО . Проверено 19 января 2024 г.
  39. ^ «Справочное руководство по языку Ada 95 (оригинал) - Ассоциация ресурсов Ada» . www.adaic.org . Проверено 19 января 2024 г.
  40. ^ ИСО/МЭК 8652:1995/Корр. 1:2001.
  41. ^ Ада 95 RM с TC 1
  42. ^ «ISO/IEC 8652:1995/Поправка 1:2007». ИСО . Проверено 19 января 2024 г.
  43. ^ «Справочное руководство Ada, ISO/IEC 8652:2007(E) Ред. 3» . www.adaic.org . Проверено 19 января 2024 г.
  44. ^ «ISO/IEC 8652:2012». ИСО . 28 марта 2013 г. Проверено 19 января 2024 г.
  45. ^ «ISO/IEC 8652:2012/Кор.1:2016». ИСО . Проверено 19 января 2024 г.
  46. ^ «Карточка синтаксиса Ады» (PDF) . Архивировано из оригинала (PDF) 6 июля 2011 года . Проверено 28 февраля 2011 г.
  47. ^ «Подпрограммы». Learn.adacore.com . АдаКор . Проверено 14 апреля 2024 г.
  48. ^ «Ада 83 LRM, раздел 2.8: Прагмы» . Архив.adaic.com . Проверено 27 января 2014 г.
  49. ^ «Ada 83 LRM, Приложение/Приложение B: Предопределенные языковые прагмы» . Архив.adaic.com. Архивировано из оригинала 6 февраля 2012 г. Проверено 27 января 2014 г.
  50. ^ «Общие единицы». www.adaic.org . Проверено 25 апреля 2024 г.

Рекомендации

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

Обоснование

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

Книги

дальнейшее чтение

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