Ада (язык программирования)
Ada — это структурированный , статически типизированный , императивный и объектно-ориентированный язык программирования высокого уровня , вдохновленный Pascal и другими языками. Он имеет встроенную языковую поддержку для проектирования по контракту (DbC), чрезвычайно строгую типизацию , явный параллелизм, задачи, синхронную передачу сообщений, защищенные объекты и недетерминизм . Ada повышает безопасность и удобство сопровождения кода, используя компилятор для поиска ошибок в пользу ошибок времени выполнения . Ada — это международный технический стандарт , разработанный совместно Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC). По состоянию на май 2023 г. [update]стандартом, неофициально называемым 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] конечный язык программирования получил название Ada. Общее количество языков программирования высокого уровня, используемых в таких проектах, упало с более чем 450 в 1983 году до 37 к 1996 году.
HOLWG разработала требования к языку Steelman — серию документов, в которых излагаются требования, которым, по их мнению, должен удовлетворять язык программирования. Многие существующие языки были официально проверены, но в 1977 году команда пришла к выводу, что ни один из существующих языков не соответствует спецификациям.
Были выпущены запросы на предложения по новому языку программирования, и для разработки своих предложений были наняты четыре подрядчика под именами Red ( Intermetrics под руководством Бенджамина Бросгола), Green ( Honeywell под руководством Джин Ичбиа ), Blue ( SofTech под руководством Джона Гуденафа) ) [19] и Желтая ( SRI International , возглавляемая Джеем Спитценом). В апреле 1978 года, после общественного рассмотрения, предложения красных и зеленых перешли в следующий этап. В мае 1979 года предложение Грина, разработанное Джин Ичбиа из Honeywell, было выбрано и получило имя Ада — в честь Августы Ады Кинг, графини Лавлейс, обычно известной как Ада Лавлейс . На это предложение повлиял язык LIS , который Ичбиа и его группа разработали в 1970-х годах. Справочное руководство по военному стандарту было утверждено 10 декабря 1980 года (день рождения Ады Лавлейс) и получило номер MIL-STD-1815 в честь года рождения Ады Лавлейс. В 1981 году Тони Хоар воспользовался своей речью на премии Тьюринга, чтобы раскритиковать Аду за ее чрезмерную сложность и, следовательно, ненадежность. [20] но впоследствии, похоже, отказался от предисловия, которое он написал для учебника по Аде. [21]
В первые дни своего существования Ada привлекала большое внимание сообщества программистов в целом. Его сторонники и другие предсказывали, что он может стать доминирующим языком для программирования общего назначения, а не только для работы, связанной с обороной. [22] Ичбиа публично заявил, что через десять лет останутся только два языка программирования: Ada и Lisp . [23] Ранние компиляторы Ada изо всех сил пытались реализовать большой и сложный язык, и производительность как во время компиляции, так и во время выполнения имела тенденцию быть медленной, а инструменты были примитивными. [22] Поставщики компиляторов приложили большую часть своих усилий к прохождению масштабного тестирования на соответствие языка, требуемого правительством пакета проверки Ada Compiler Validation Capability (ACVC), который требовался для еще одной новой функции языка Ada. [23] The Jargon File , словарь компьютерного хакерского сленга, созданный в 1975–1983 годах, в статье об Аде отмечается, что «это именно то, чего можно было ожидать, учитывая такое одобрение указом; разработано комитетом... сложно использовать и в целом, это катастрофическая бесполезная трата в несколько миллиардов долларов... Ада Лавлейс... почти наверняка побледнеет от того, как в последнее время стали использовать ее имя, самое доброе, что было сказано по этому поводу, - это то, что, вероятно, есть хорошая мелочь; язык кричит о том, чтобы выбраться наружу из его огромной, слоновьей туши». [24]
Первой проверенной реализацией Ada стал переводчик Ada/Ed NYU. [25] сертифицирован 11 апреля 1983 года. NYU Ada/Ed реализован на языке набора высокого уровня 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] Например, Primary Flight Control System , программное обеспечение электродистанционной системы в Boeing 777 , было написано на языке Ada, как и электродистанционные системы аэродинамически нестабильного истребителя Eurofighter Typhoon . [30] Кан Грипен , [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]
Стандартизация
[ редактировать ]Год | Неофициальное имя | Стандарт АНСИ | Стандарт ИСО/МЭК |
---|---|---|---|
1980 | Есть | MIL-STD 1815 года | — |
1983 | Есть 83/87 | MIL-STD 1815A | 8652:1987 |
1995 | Есть 95 | — | 8652:1995 |
2007 | Был 2005 год | — | 8652:1995/Изм. 1:2007 |
2012 | Был 2012 год | — | 8652:2012 |
2023 | Там 2022 | — | 8652:2023 |
Предварительную версию Ada можно найти в Уведомлениях ACM Sigplan, том 14, № 6, июнь 1979 г. [34]
Ада была впервые опубликована в 1980 году как стандарт ANSI ANSI/ MIL-STD 1815 . Поскольку эта самая первая версия содержала много ошибок и несоответствий. [а] , исправленное издание было опубликовано в 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/поправка 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) для утверждения. ИСО/МЭК 8652:2012 [44] (см. Ada 2012 RM ) была опубликована в декабре 2012 года и известна как Ada 2012 . Опубликовано техническое исправление ISO/IEC 8652:2012/COR 1:2016. [45] (см. RM 2012 с ТК 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 : (привет.adb)
with Ada.Text_IO;
procedure Hello is
begin
Ada.Text_IO.Put_Line ("Hello, world!");
end Hello;
Эту программу можно скомпилировать с помощью свободно доступного компилятора с открытым исходным кодом GNAT , выполнив
gnatmake hello.adb
Типы данных
[ редактировать ]Система типов Ады не основана на наборе предопределенных примитивных типов , но позволяет пользователям объявлять свои собственные типы. Это объявление, в свою очередь, основано не на внутреннем представлении типа, а на описании цели, которая должна быть достигнута. Это позволяет компилятору определить подходящий размер памяти для типа и проверить наличие нарушений определения типа во время компиляции и во время выполнения (т. е. нарушения диапазона, переполнение буфера, согласованность типов и т. д.). Ada поддерживает числовые типы, определяемые диапазоном, типы по модулю, агрегатные типы (записи и массивы) и типы перечислений. Типы доступа определяют ссылку на экземпляр указанного типа; нетипизированные указатели не допускаются. Специальные типы, предоставляемые языком, — это типы задач и защищенные типы.
Например, дата может быть представлена как:
type Day_type is range 1 .. 31;
type Month_type is range 1 .. 12;
type Year_type is range 1800 .. 2100;
type Hours is mod 24;
type Weekday is (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);
type Date is
record
Day : Day_type;
Month : Month_type;
Year : Year_type;
end record;
Важно отметить: Day_type, Month_type, Year_type, Hours являются несовместимыми типами, а это означает, что, например, следующее выражение является недопустимым:
Today: Day_type := 4;
Current_Month: Month_type := 10;
... Today + Current_Month ... -- illegal
Предопределенный оператор плюс может добавлять значения только одного типа, поэтому выражение является недопустимым.
Типы можно уточнить, объявив подтипы :
subtype Working_Hours is Hours range 0 .. 12; -- at most 12 Hours to work a day
subtype Working_Day is Weekday range Monday .. Friday; -- Days to work
Work_Load: constant array(Working_Day) of Working_Hours -- implicit type declaration
:= (Friday => 6, Monday => 4, others => 10); -- lookup table for working hours with initialization
Типы могут иметь модификаторы, такие как ограниченный, абстрактный, частный и т. д. Частные типы не показывают свою внутреннюю структуру; объекты ограниченных типов не могут быть скопированы. [46] В Ada 95 добавлены дополнительные возможности объектно-ориентированного расширения типов.
Структуры управления
[ редактировать ]Ада — это структурированный язык программирования , что означает, что поток управления структурирован в виде стандартных операторов. Поддерживаются все стандартные конструкции и ранний выход глубокого уровня, поэтому использование также поддерживаемых команд перехода требуется редко.
-- while a is not equal to b, loop.
while a /= b loop
Ada.Text_IO.Put_Line ("Waiting");
end loop;
if a > b then
Ada.Text_IO.Put_Line ("Condition met");
else
Ada.Text_IO.Put_Line ("Condition not met");
end if;
for i in 1 .. 10 loop
Ada.Text_IO.Put ("Iteration: ");
Ada.Text_IO.Put (i);
Ada.Text_IO.Put_Line;
end loop;
loop
a := a + 1;
exit when a = 10;
end loop;
case i is
when 0 => Ada.Text_IO.Put ("zero");
when 1 => Ada.Text_IO.Put ("one");
when 2 => Ada.Text_IO.Put ("two");
-- case statements have to cover all possible cases:
when others => Ada.Text_IO.Put ("none of the above");
end case;
for aWeekday in Weekday'Range loop -- loop over an enumeration
Put_Line ( Weekday'Image(aWeekday) ); -- output string representation of an enumeration
if aWeekday in Working_Day then -- check of a subtype of an enumeration
Put_Line ( " to work for " &
Working_Hours'Image (Work_Load(aWeekday)) ); -- access into a lookup table
end if;
end loop;
Пакеты, процедуры и функции
[ редактировать ]К частям программы Ada относятся пакеты, процедуры и функции.
Функции отличаются от процедур тем, что они должны возвращать значение. Вызовы функций не могут использоваться «как оператор», и их результат должен быть присвоен переменной. Однако, начиная с Ada 2012, функции не обязаны быть чистыми и могут изменять свои соответствующим образом объявленные параметры или глобальное состояние. [47]
Пример: Спецификация пакета (example.ads)
package Example is
type Number is range 1 .. 11;
procedure Print_and_Increment (j: in out Number);
end Example;
Тело пакета (example.adb)
with Ada.Text_IO;
package body Example is
i : Number := Number'First;
procedure Print_and_Increment (j: in out Number) is
function Next (k: in Number) return Number is
begin
return k + 1;
end Next;
begin
Ada.Text_IO.Put_Line ( "The total is: " & Number'Image(j) );
j := Next (j);
end Print_and_Increment;
-- package initialization executed when the package is elaborated
begin
while i < Number'Last loop
Print_and_Increment (i);
end loop;
end Example;
Эту программу можно скомпилировать, например, с помощью свободно доступного компилятора с открытым исходным кодом GNAT , выполнив
gnatmake -z example.adb
Пакеты, процедуры и функции могут быть вложены на любую глубину, и каждый из них также может быть самым внешним логическим блоком.
Каждый пакет, процедура или функция может иметь собственные объявления констант, типов, переменных и других процедур, функций и пакетов, которые можно объявлять в любом порядке.
Прагмы
[ редактировать ]Прагма — это директива компилятора , которая передает компилятору информацию, позволяющую конкретно манипулировать скомпилированным выводом. [48] Определенные прагмы встроены в язык, [49] в то время как другие зависят от реализации.
Примерами общего использования прагм компилятора могут быть отключение определенных функций, таких как проверка типов во время выполнения или проверка границ индексов массива, или указание компилятору вставлять объектный код вместо вызова функции (как это делает C/C++ со встроенными функциями). ).
Дженерики
[ редактировать ]Обобщенные коды Ada существуют с момента их первой разработки в 1977–1980 годах. Стандартная библиотека использует дженерики для предоставления множества сервисов. Ada 2005 добавляет к стандартной библиотеке комплексную библиотеку универсальных контейнеров, вдохновленную стандартной библиотекой шаблонов C++ .
Общий модуль — это пакет или подпрограмма, принимающая один или несколько общих формальных параметров . [50]
Общий формальный параметр — это значение, переменная, константа, тип, подпрограмма или даже экземпляр другой назначенной универсальной единицы. Для общих формальных типов синтаксис различает дискретные типы, типы с плавающей запятой, фиксированной запятой, типы доступа (указатели) и т. д. Некоторые формальные параметры могут иметь значения по умолчанию.
Чтобы создать экземпляр универсального модуля, программист передает фактические параметры для каждого формального элемента. В этом случае универсальный экземпляр ведет себя так же, как и любой другой модуль. Можно создавать экземпляры универсальных модулей во время выполнения , например, внутри цикла.См. также
[ редактировать ]- Компиляторы Ады
- APSE — спецификация среды программирования для поддержки разработки программного обеспечения на языке Ada.
- Профиль Ravenscar - подмножество функций управления задачами Ada, предназначенное для критически важных для безопасности вычислений в режиме реального времени.
- SPARK - язык программирования, состоящий из строго ограниченного подмножества Ada, снабженного метаинформацией, описывающей желаемое поведение компонента и индивидуальные требования к среде выполнения.
Примечания
[ редактировать ]- ^ «Обоснование Ada2012» (PDF) . adacore.com . Архивировано (PDF) из оригинала 18 апреля 2016 г. Проверено 5 мая 2018 г.
- ^ «Коммерческое программное обеспечение для Ada, C и C++» . АдаКор . Проверено 4 апреля 2023 г.
- ^ «ПТК ОбъектАда» . PTC.com . Проверено 27 января 2014 г.
- ^ «Чейнджер MapuSoft Ada-C/C++» . 16 апреля 2019 г.
- ^ «Список сертифицированных процессоров Ada 95 — подробности» . ada-auth.org . Проверено 4 апреля 2023 г.
- ^ Ада Обоснование, 1986, стр. 23, 70, 110–114, 137, 165, 236
- ^ «Спецификация часовни (Благодарность)» (PDF) . Cray Inc. 01 октября 2015 г. Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 14 января 2016 г.
- ^ «Драго» . Архивировано из оригинала 14 сентября 2020 г. Проверено 6 августа 2018 г.
- ^ «Проект Грифон» . cs.nyu.edu . Проверено 4 апреля 2023 г.
- ^ «Язык программирования SparForte» . www.sparforte.com . Проверено 4 апреля 2023 г.
- ^ Перейти обратно: а б Пиньо, Луис Мигель (июнь 2023 г.). «С редакционного стола» . Письма Ады . XLIII (1). Ассоциация вычислительной техники: 3. doi : 10.1145/3631483 (неактивно с 31 января 2024 г.).
{{cite journal}}
: CS1 maint: DOI неактивен по состоянию на январь 2024 г. ( ссылка ) - ^ «Язык программирования Ада» . Мичиганский университет . Архивировано из оригинала 22 мая 2016 г. Проверено 27 мая 2016 г.
- ^ Фуэги, Дж; Фрэнсис, Дж (2003). «Лавлейс и Бэббидж и создание «записок» 1843 года ». IEEE Анналы истории вычислений . 25 (4): 16–26. дои : 10.1109/MAHC.2003.1253887 . S2CID 40077111 .
- ^ «Параллелизм. Глава 6. Руководство по качеству и стилю Ada 95» . адаик.орг . Проверено 5 ноября 2021 г.
- ^ Тафт, С. Такер; Олсен, Флоренция (30 июня 1999 г.). «Ада помогает создавать код с меньшим количеством ошибок» . Правительственные компьютерные новости. стр. 2–3. Архивировано из оригинала 31 августа 2015 г. Проверено 14 сентября 2010 г.
- ^ Перейти обратно: а б с Фельдман, Майкл. «Кто использует Ada? Реальные проекты на основе языка программирования Ada, ноябрь 2014 г.» . Рабочая группа по образованию SIGada.
- ^ нет безопасного управления динамической памятью в ADA , в: Написание модулей ядра Linux в Safe Rust - Джеффри Томас и Алекс Гейнор , Фонд Linux, 2019-10-02
- ^ «Министерство обороны — Требования Строумана — апрель 1975 г.» . iment.com . Проверено 4 апреля 2023 г.
- ^ «Джон Гуденаф | Профиль сотрудника SEI» . Sei.cmu.edu . Проверено 27 января 2014 г.
- ^ АВТОМОБИЛЬ, Хоар (1981). «Старая одежда императора» (PDF) . Коммуникации АКМ . 24 (2). Ассоциация вычислительной техники : 75–83. дои : 10.1145/358549.358561 . S2CID 97895 . Архивировано (PDF) из оригинала 4 марта 2016 г.
- ^ Ватт, Д.А.; Вичманн, бакалавр; Финдли, В. (1987). Ада: язык и методология . Прентис-Холл.
- ^ Перейти обратно: а б с д Свард, Рики Э. (ноябрь 2010 г.). «Взлет, падение и существование Ады». SIGAda '10: Материалы ежегодной международной конференции ACM SIGAda по SIGAda . стр. 71–74. дои : 10.1145/1879063.1879081 . ISBN 978-1-4503-0027-8 .
- ^ Перейти обратно: а б с Розен, Дж.П. (август 2009 г.). «Парадокс Ады». Письма Ады . 24 (2). АСМ СИГАда: 28–35. дои : 10.1145/1620593.1620597 . S2CID 608405 .
- ^ «ЭТО ЖАРГОННЫЙ ФАЙЛ, ВЕРСИЯ 2.6.2» (TXT) . 14 февраля 1991 г. Проверено 31 января 2023 г.
- ^ SofTech Inc. (11 апреля 1983 г.). «Сводный отчет о проверке компилятора Ada: NYU Ada/ED, версия 19.7 V-001» . Уолтем, Массачусетс. Архивировано из оригинала 12 марта 2012 г. Проверено 16 декабря 2010 г.
- ^ Дьюар, Роберт Б.К.; Фишер, Джеральд А. младший; Шенберг, Эдмонд; Фрёлих, Роберт; Брайант, Стивен; Госс, Клинтон Ф.; Берк, Майкл (ноябрь 1980 г.). «Переводчик Ады Нью-Йоркского университета». Материалы симпозиума ACM-SIGPLAN по языку программирования Ada — SIGPLAN '80 . Том. 15. стр. 194–201. дои : 10.1145/948632.948659 . ISBN 0-89791-030-3 . S2CID 10586359 .
- ^ Перейти обратно: а б «Список проверенных компиляторов Ada». Информационный центр Ады. 1 июля 1992 г. стр. 1–36.
- ^ Информационный центр Ады (11 апреля 1983 г.). «Мандат Конгресса по Аде» . Архивировано из оригинала 4 марта 2016 г. Проверено 7 июня 2015 г.
- ^ Бабяк, Николас Дж. (1989). Ада, новый компьютерный язык системы вооружения Министерства обороны США - Панацея или бедствие (PDF) . Воздушный университет (ВВС США) . стр. 39–40. Архивировано (PDF) из оригинала 15 декабря 2019 г.
- ^ «Гибкое мышление» . FlightGlobal . 16 июня 1999 года. Архивировано из оригинала 15 апреля 2021 года . Проверено 13 февраля 2024 г.
- ^ Фрисберг, Бо. «Использование Ada в системе управления полетом Gripen» (PDF) . Специальная группа по интересам по Аде . Архивировано (PDF) из оригинала 15 января 2024 года . Проверено 13 февраля 2024 г.
- ^ АдаКор. «GNAT Pro выбран для британской системы УВД следующего поколения» . Архивировано из оригинала 24 декабря 2010 г. Проверено 1 марта 2011 г.
- ^ АдаКор. «Посмотрите, кто использует Ada» . Архивировано из оригинала 24 декабря 2010 г. Проверено 1 марта 2011 г.
- ^ Ичбиа, JD (июнь 1979 г.). «Уведомления ACM Sigplan» . стр. 1–145. дои : 10.1145/956650.956651 .
- ^ Краткое изложение изменений языка Ada
- ^ «ИСО 8652:1987» . ИСО . 21 февраля 2013 г. Проверено 19 января 2024 г.
- ^ «Ада 83 LRM, первая страница» . archive.adaic.com . Проверено 19 января 2024 г.
- ^ «ИСО/МЭК 8652:1995» . ИСО . Проверено 19 января 2024 г.
- ^ «Справочное руководство по языку Ada 95 (оригинал) — Ассоциация ресурсов Ada» . www.adaic.org . Проверено 19 января 2024 г.
- ^ ИСО/МЭК 8652:1995/Корр. 1:2001.
- ^ Ада 95 RM с TC 1
- ^ «ИСО/МЭК 8652:1995/Изм. 1:2007» . ИСО . Проверено 19 января 2024 г.
- ^ «Справочное руководство Ada, ISO/IEC 8652:2007(E) Ред. 3» . www.adaic.org . Проверено 19 января 2024 г.
- ^ «ИСО/МЭК 8652:2012» . ИСО . 28 марта 2013 г. Проверено 19 января 2024 г.
- ^ «ИСО/МЭК 8652:2012/Кор 1:2016» . ИСО . Проверено 19 января 2024 г.
- ^ «Карточка синтаксиса Ады» (PDF) . Архивировано из оригинала (PDF) 6 июля 2011 года . Проверено 28 февраля 2011 г.
- ^ «Подпрограммы» . Learn.adacore.com . АдаКор . Проверено 14 апреля 2024 г.
- ^ «Ада 83 LRM, раздел 2.8: Прагмы» . Архив.adaic.com . Проверено 27 января 2014 г.
- ^ «Ada 83 LRM, Приложение/Приложение B: Предопределенные языковые прагмы» . Архив.adaic.com. Архивировано из оригинала 6 февраля 2012 г. Проверено 27 января 2014 г.
- ^ «Общие единицы» . www.adaic.org . Проверено 25 апреля 2024 г.
Ссылки
[ редактировать ]Международные стандарты
[ редактировать ]- ISO/IEC 8652 : Информационные технологии. Языки программирования. Ада.
- ISO/IEC 15291 : Информационные технологии. Языки программирования. Спецификация семантического интерфейса Ada ( ASIS ).
- ISO/IEC 18009 : Информационные технологии. Языки программирования. Ada. Оценка соответствия языкового процессора ( ACATS ).
- Стандарт IEEE 1003.5b-1996 , привязка POSIX Ada.
- Спецификация отображения языка Ada , CORBA язык описания интерфейса (IDL) для отображения Ada.
Обоснование
[ редактировать ]Эти документы были опубликованы в различных формах, в том числе в печатном виде.
- Ичбиа, Жан Д .; Барнс, Джон GP; Ферт, Роберт Дж.; Вуджер, Майк (1986), Обоснование разработки языка программирования Ada , заархивировано из оригинала 2 февраля 2007 г. Также доступен apps.dtic.mil , pdf.
- Барнс, Джон Г.П. (1995), Обоснование Ada 95: язык: стандартные библиотеки.
- Барнс, Джон (2006) [2005], Обоснование Ады 2005 г.
Книги
[ редактировать ]- Буч, Грейди (1987). Разработка программного обеспечения с использованием Ada . Калифорния: Издательская компания Бенджамина/Каммингса. ISBN 0-8053-0604-8 .
- Скансхольм, Январь (1996). Ада 95 С самого начала . Аддисон-Уэсли. ISBN 0-201-40376-5 .
- Гилпин, Джефф (1985). Ада: экскурсия и учебное пособие . Прентис Холл. ISBN 978-0-13-004045-9 .
- Бейдлер, Джон (1997). Структуры данных и алгоритмы: объектно-ориентированный подход с использованием Ada 95 . Спрингер Верлаг. ISBN 0-387-94834-1 .
- Гонсалес, Дин В. (1991). Справочник программиста Ada . Издательская компания Бенджамина-Каммингса. ISBN 0-8053-2529-8 .
- Бен-Ари, М. (1998). Ада для инженеров-программистов . Джон Уайли и сыновья. ISBN 0-471-97912-0 .
- Коэн, Норман (1996). Ада как второй язык . МакГроу-Хилл Наука/инженерия/математика. ISBN 0-07-011607-5 .
- Бернс, Алан ; Веллингс, Энди (2001). Системы реального времени и языки программирования. Ada 95, Java реального времени и POSIX реального времени . Аддисон-Уэсли. ISBN 0-201-72988-1 .
- Бернс, Алан ; Веллингс, Энди (1995). Параллелизм в Аде . Издательство Кембриджского университета. ISBN 0-521-62911-Х .
- Аткинсон, Колин (1991). Объектно-ориентированное повторное использование, параллелизм и распространение: подход на основе Ada . Аддисон-Уэсли. ISBN 0-201-56527-7 .
- Буч, Грейди ; Брайан, Дуг (1994). Разработка программного обеспечения с использованием Ada . Аддисон-Уэсли. ISBN 0-8053-0608-0 .
- Джонс, Делай-пока (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 г.). Ада 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 .
- Фельдман, Майкл Б.; Коффман, Эллиот Б. (1992–1993). Ада: Решение проблем и разработка программ . Аддисон-Уэсли. ISBN 0-201-52279-9 . 795 страниц.
- Фельдман, Майкл Б .; Коффман, Эллиот Б. (1999). Ада 95 . Аддисон-Уэсли. ISBN 0-201-36123-Х .
- Дейл, Нелл Б .; Уимс, Чип; Маккормик, Джон (август 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 г.). Распределенная Ada: разработки и опыт . Издательство Кембриджского университета. ISBN 0-521-39251-9 .
- Санден, Бо (1994). Создание программных систем с примерами на языке Ada . Прентис Холл. ISBN 0-13-030834-Х .
- Хиллам, Брюс (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 .
- Бернс, Алан ; Веллингс, Энди (1995). HRT-HOOD: метод структурированного проектирования для систем Ada жесткого реального времени . Северная Голландия. ISBN 0-444-82164-3 .
- Савич, Уолтер; Петерсон, Чарльз (1992). Ада: Введение в искусство и науку программирования . Издательская компания Бенджамина-Каммингса. ISBN 0-8053-7070-6 .
- Вайс, Марк Аллен (1993). Структуры данных и алгоритмический анализ в Ada . Издательская компания Бенджамина-Каммингса. ISBN 0-8053-9055-3 .
- Ледгард, Генри (1983). Ада: Введение (второе изд.). Спрингер-Верлаг. ISBN 0-387-90814-5 .
- Бьёрнер, Дайнс; Оэст, Оле Н., изд. К формальному описанию Ады . Лондон: Springer-Verlag. ISBN 3-540-10283-3 .
Дальнейшее чтение
[ редактировать ]- Барнс, Джон (2014). Программирование на Аде 2022 . Издательство Кембриджского университета. ISBN 1-009-56477-3 .
- Барнс, Джон (2014). Программирование на Ada 2012 с предварительной версией Ada 2022 . Издательство Кембриджского университета. ISBN 1-009-18134-3 .
- Барнс, Джон (2014). Программирование на Аде 2012 . Издательство Кембриджского университета. ISBN 1-107-42481-Х .
- Барнс, Джон (2006). Программирование на Аде 2005 . Аддисон-Уэсли. ISBN 0-321-34078-7 .
- Барнс, Джон (1991). Справочное руководство по программированию на языке Ada plus . Аддисон-Уэсли. ISBN 0-201-56539-0 .
- Барнс, Джон (1998). Программирование на Аде 95 . Аддисон-Уэсли. ISBN 0-201-34293-6 .
- Барнс, Джон (1997). Ada высокой целостности: подход SPARK . Аддисон-Уэсли. ISBN 0-201-17517-7 .
- Барнс, Джон (2003). Программное обеспечение высокой надежности: подход SPARK к обеспечению безопасности . Аддисон-Уэсли. ISBN 0-321-13616-0 .
Внешние ссылки
[ редактировать ]- Ассоциация ресурсов Ады
- Спецификация языка программирования DOD Ada (ANSI/MIL STD 1815A-1983)
- JTC1/SC22/WG9 ISO — главная страница стандартов Ada
- Ада (язык программирования) в Curlie
- Материалы по языку программирования Ada, 1981–1990 гг . Институт Чарльза Бэббиджа , Университет Миннесоты.
- Ада (язык программирования)
- Языки программирования
- Языки программирования .NET
- Языки программирования авионики
- Язык программирования высокой целостности
- Мультипарадигмальные языки программирования
- Стандарты языков программирования
- Языки программирования, созданные в 1980 году.
- Языки программирования со стандартом ISO
- Статически типизированные языки программирования
- Языки системного программирования
- программное обеспечение 1980 года
- Языки программирования высокого уровня
- Ада Лавлейс