Язык программирования ada это
Почему вам стоит использовать язык Ада для программирования вашей системы
Язык программирования Ада родился в середине 1970-х, когда министерство обороны США и министерство обороны Британии решили заменить сотни специализированных языков программирования для встроенных вычислительных систем, всё чаще использовавшихся в военных проектах. Язык Ада разрабатывали так, чтобы это был единственный язык, способный работать на всех этих встроенных системах, и при этом обеспечивавший надёжность и быстродействие уровнем не хуже специализированных.
После обновления от 1995 года язык приспособили для систем общего назначения, добавив объектно-ориентированное программирование, не теряя из вида ключевые ценности – надёжность, простоту поддержки и эффективность. Сегодня написанное на Ада ПО формирует основу не только военного оборудования, но и коммерческих проектов в сфере авионики и систем управления воздушным трафиком. Код на Ада управляет такими ракетами, как Ариан-4 и 5, многими спутниками, и бесчисленным количеством других систем, в которых небольшие сбои могут иметь серьёзные последствия.
Возможно, Ада подойдёт и для использования в вашем следующем встроенном проекте.
Планирование военного качества
Чтобы выбрать новый язык программирования, минобороны собрала «рабочую группу языков высшего порядка» [High Order Language Working Group (HOLWG)], состоявшую из военных и учёных экспертов, в задачи которой входило составление списка запросов и выбор языков-кандидатов. В итоге были составлены т.н. «запросы Стилмана»:
Главными пунктами запросов были:
Группа заключила, что хотя среди существовавших на тот момент языков ни один не подходил для нужд минобороны, было вполне реально создать новый язык, подходящий под все указанные вопросы. Четырём проектировщикам получили это сделать. Промежуточный процесс выбора подобрал два наиболее подходящих метода работы, и в итоге лишь один язык победил в конкурсе и получил название «Ада».
Встроенная по умолчанию защита
Система типов в Аде не просто строгая – её иногда называют сверхстрогой, поскольку она не позволяет никакого неявного приведения типов. Возьмём, к примеру, этот отрывок кода на С:
Это допустимый код; он откомпилируется, запустится и выдаст очевидный результат, обозначающий ответ на главный вопрос жизни, вселенной и всего такого. В Аде так не получится:
Компилятор выдаст ошибку, поскольку Integer и MyInt – это не одно и то же. Главное преимущество такого подхода в том, что если программист потом изменит определение типа, тысячи неявных приведений типа по всей базе кода не взорвут программу. Вместо этого нужно явно приводить типы – это пропагандирует хороший код, предотвращая смешение типов, которые «достаточно схожи».
Любой программист, вязнувший в болоте из смеси стандартных определений типов C, Linux и Win32, может оценить по достоинству отсутствие необходимости рыться в бесчисленных страницах документации и плохо отформатированного кода, чтобы понять в каком из typedef или макросе содержится реальное определение чего-то, что только что помешало компиляции или вылезло при отладке.
Ада добавляет дополнительные слои защиты в проверках на этапах компиляции и запуска. В Аде программист должен явно указывать закрывающие операторы для блоков и границы, в которые должно укладываться значение переменной. Ада не определяет стандартные типы вроде int или float, а требует, чтобы программист с самого начала создал типы с определённым диапазоном. Это верно и для строк – за исключением неограниченных строк, у всех строк длина фиксирована.
На этапе работы можно проверить ошибки типа неверного доступа к памяти, переполнения буфера, выхода за установленные пределы, ошибки ±1, доступа к массиву. Затем их можно безопасно обработать, вместо того, чтобы ронять всё приложение.
Ада реализует модель ссылочных типов вместо низкоуровневых указателей. Каждый ссылочный тип обрабатывается пулом памяти, либо заданным по умолчанию, либо определённым программистом при необходимости работы с более экзотическими реализациями памяти типа NUMA. Программисту никогда не приходится обращаться к памяти напрямую, он должен использовать обработчик пула памяти.
Наконец, компилятор или программа во время исполнения решает, как передавать данные в функцию или из неё. И хотя направление передачи каждого параметра указывать нужно (‘in‘, ‘out‘, или ‘in out‘), но итоговое решение о том, передаются ли данные через регистры, кучу или по ссылке, принимает компилятор или программа во время выполнения, но не программист. Это предотвращает проблемы с переполнением стека.
Ravenscar profile и диалект SPARK являются подмножествами Ады, причём последний концентрируется на контрактах. Со временем особенности этих подмножеств перенесли в спецификацию основного языка.
Программирование на языке Ада сегодня
ANSI установила спецификацию Ada 83 в 1983. Тогда только-только вышел Intel 80286, а процессору Motorola 68000 было всего четыре года. Это была заря домашних компьютеров, а также неуклюжий переход из 1970-х в 80-е, когда популярность микроконтроллеров начала расти. Представьте себе микроконтроллер Intel 8051 и его потрясающие 4 кБ EPROM и 128 Б оперативной памяти.
Популярные сегодня микроконтроллеры во много раз более мощные по сравнению с теми, что были в 1983. Можно взять любой ARM, AVR, RISC-V, и т.п. (или Lego Mindstorms NXT kit) и начать под него разработку при помощи одинаковых инструментальных средств на базе С. Неудивительно, что популярный компилятор GNAT Ada основан на GCC. Также в разработке в рамках проекта DragonEgg находятся инструментальные средства на базе LLVM.
Существуют две версии инструментальных средств Ады на основе GCC. Вариант AdaCore поддерживается коммерчески, однако имеет свои особенности. Вариант от Free Software Foundation, естественно, свободен, и по функциональности сравним с AdaCore.
Для лёгкого старта используйте либо GNAT Programming Studio IDE (GPS), идущее в комплекте с AdaCore (копия на Github), или пишите код в текстовом редакторе и компилируйте его вручную, или при помощи Makefiles. Инструментарий тут немного посложнее, чем у С или С++, однако разработку облегчает утилита gnatmake, включающая в себя все инструменты, и работающая примерно как GCC.
Пример небольшого, но нетривиального проекта на Аде, написанного вашей покорной слугой в виде парсера аргументов командной строки. Там вы найдёте Makefile, находящийся в папке проекта ada/, где определяются папки, в которых можно найти файлы спецификации пакетов (.ads) и сами пакеты (.adb).
Куда двигаться далее
Скачав инструментарий GNAT, запустив GPS или Vim/Emacs, и некоторое время посмотрев на мигающий курсор на пустой странице, вы можете задуматься над тем, с чего начать. К счастью, мы недавно освещали проект на основе Ады с использованием ядра PicoRV32 RISC-V. Он использует распространённый ICE40LP8K CPLD, который поддерживают инструментарии FPGA с открытым кодом, например, Yosys.
В плане документации есть вводные статьи для начинающих, рассчитанные на разработчиков Java и С++, справочник по AdaCore, справочник на WikiBooks, и, конечно же, документация Programming in Ada 2012. Это, возможно, наиболее полные справочники, за исключением документации Ada 2012 Language Reference Manual (LRM) на 945 страниц.
Язык Ада, пусть и довольно редкий для любителей программирования, является полностью открытым языком с надёжными средствами разработки с коммерческой поддержкой, и используется для создания ПО для всего, от межконтинентальных баллистических ракет и F-15 до прошивок медицинских устройств. Хотя это довольно сложный язык, если выходить за базовые пределы, он должен определённо входить в список языков, которые вы когда-либо использовали в своих проектах – пусть даже и для того, чтобы ваше резюме выглядело покруче.
Ада (язык программирования)
А́да (Ada) — язык программирования, созданный в 1979—1980 годах в ходе проекта Министерством обороны США с целью разработать единый язык программирования для встроенных систем (то есть систем управления автоматизированными комплексами, функционирующими в реальном времени). Имелись в виду, прежде всего, бортовые системы управления военными объектами (кораблями, самолётами, танками, ракетами, снарядами и т. п.). Перед разработчиками не стояло задачи создать универсальный язык, поэтому решения, принятые авторами Ады, нужно воспринимать в контексте особенностей выбранной предметной области. Язык назван в честь Ады Лавлэйс.
Содержание
Особенности языка
В исходном варианте, стандартизованном в 1983 году, Ада — это структурный, модульный язык программирования, содержащий высокоуровневые средства программирования параллельных процессов. Синтаксис Ады унаследован от языков типа Algol или Паскаль, но расширен, а также сделан более строгим и логичным. Ада — язык со строгой типизацией, в нём исключена работа с объектами, не имеющими типов, а автоматические преобразования типов сведены к абсолютному минимуму. В стандарте 1995 года в язык были добавлены базовые средства объектно-ориентированного программирования, в стандарте 2007 эти средства были дополнены, поэтому современная Ада — объектно-ориентированный язык программирования.
Из особенностей синтаксиса можно отметить:
«Hello, world!» на Аде
Несколько различных вариантов программы «Hello, world!» можно увидеть в Викиучебнике (англ.). Различия обусловлены необходимостью использовать библиотечную функцию Put_Line — в этом языке есть три различных способа организации такого использования.
Здесь для применения функции Put_Line содержащий её пакет Ada.Text_IO импортируется с помощью конструкции use, что даёт возможность вызывать функцию по имени без квалификации — указания в вызове имени пакета, содержащего функцию.
История
Разработка языка была проведена в рамках международного конкурса, организованного и профинансированного министерством обороны США. Целью разработки было получение языка программирования, который мог бы стать единым для разработки проектов по заказам военного ведомства, главным образом, для разработки встроенных систем военного назначения и для больших военных компьютеров (на базе процессора iAPX 432 от Intel). Работа началась в 1975 году, с формирования набора требований к языку, который бы в полной мере удовлетворил разработчиков систем указанного типа. Первоначальный список требований, выпущенный под кодовым наименованием «Соломенный», был представлен на рецензию в ряд организаций и фирм, в течение двух лет последовательно уточнялся, в конечном счёте превратившись в итоговый документ под названием «Стальной».
После завершения формирования требований был проведён анализ, который показал, что ни один из имеющихся языков программирования не удовлетворяет требованиям в достаточной мере, так что было принято решение разработать новый язык. Конкурс на его создание был объявлен в 1977 году, разработчикам было предложено базироваться на одном из трёх языков: Паскаль, Алгол-68 или PL/1.
Из представленных на конкурс 15 проектов было отобрано 4 (все основаны на Паскале). Эти проекты были отправлены на дальнейшую доработку. На следующем этапе из 4 проектов отобрали два, из которых, после очередной доработки, был выбран один. Этот язык получил наименование «Ада» — разработавшая его группа под руководством француза Жана Ишбиа дала языку название в честь Огасты Ады Кинг Лавлейс (1815—1852), дочери поэта Дж. Байрона, которая занималась разработкой программ для вычислительной машины Бэббиджа и считается первым программистом в мире.
В 1983 году язык был официально стандартизован ANSI. Стандарт языка ANSI/MIL-STD-1815-A-1983 был утверждён 17 февраля 1983 года. МО США сделало наименование «Ada» зарегистрированной торговой маркой, запретив выпускать трансляторы языка, не прошедшие официальную процедуру тестирования на соответствие стандартам. Процедура состояла в прогоне через тестируемый компилятор большого количества (более 1000) тестовых программ (так называемый комплект ACVC), для каждой из которых был однозначно определён результат тестирования: либо удачная компиляция, либо выдача вполне конкретного сообщения об ошибке. Тестирование проводилось по принципу «всё или ничего» — при ошибке в обработке хотя бы одного тестового примера компилятор считался не прошедшим тест, причём тестирование было действительно только на той аппаратной и программной платформе, на которой оно проводилось. Таким образом была в зародыше подавлена возможность образования «версий» или «диалектов» языка Ада.
В 1987 году язык Ада был официально стандартизован ISO. С этого момента МО США предоставило язык в публичное распоряжение.
К 1990 году в мире существовало уже около 200 компиляторов, соответствовавших стандарту языка Ада.
В 1995 году был принят новый стандарт Ады, известный как Ada95. В язык были введены средства объектного программирования. Кроме того, язык был дополнен более развитыми средствами для взаимодействия с программами, написанными на других языках.
В марте 2007 года опубликованы [3] изменения в стандарте Ады. Они коснулись, в основном, возможностей объектно-ориентированного программирования: введены интерфейсы, принят обычный для большинства гибридных языков синтаксис вызова метода, внесён ещё ряд дополнений.
Ада в СССР и России
В СССР в 80-х годах была организована Рабочая Группа по языку Ада при Госкомитете по науке и технике. Группа занималась изучением всех открытых (а также, по слухам, добытых разведкой закрытых) данных по языку Ада и исследовала возможность и целесообразность развития и использования Ады в СССР. Деятельность этой группы привела к концу 80-х годов к разработке компиляторов Ады для практически всех применяемых в СССР компьютеров. Было выпущено несколько книг по языку Ада на русском языке.
В МГУ проводилась работа по созданию собственных пакетов тестирования Ада-трансляторов на соответствие стандартам. В ЛГУ для создания Ада-системы была использована ранее разрабатываемая для реализации Алгола-68 система «Паллада», которую перевели на Аду. Система содержит интегрированную среду разработки, компилятор, текстовый редактор, отладчик, библиотеки, систему контроля версий и командный интерпретатор.
После распада СССР работа по распространению Ады практически прервалась. Правда, были приняты три программы развития разработки ПО на Аде (в министерстве обороны, министерстве гражданской авиации и министерстве образования и науки), но разработка их ведётся медленно и нескоординированно. В результате в России язык Ада малоизвестен, большинство современных российских программистов считают его «мёртвым языком» и ничего о нём не знают. Ада используется в России и СНГ отдельными энтузиастами. Тем не менее, язык применяется для промышленной разработки ПО. Известно несколько разработанных на Аде проектов, работающих в России. Среди них:
Критика
С момента появления Ада подверглась критике некоторых признанных авторитетов в области разработки языков программирования, в первую очередь — за сложность синтаксиса и большой объём. В частности, язык критиковали Чарльз Хоар и Никлаус Вирт (участвовавшие со своим проектом в данном конкурсе, но выбывшие после первого этапа), а также Эдсгер Дейкстра.
Дейкстра усомнился, что язык такой сложности, как Ада, может быть обозрим и управляем.
Распространение, перспективы
Тем не менее, по некоторым осторожным прогнозам, с удешевлением аппаратуры и распространением встроенных систем со сложным ПО рынок для программ на Аде может заметно вырасти:
… сейчас на постсоветском пространстве в области программной индустрии и образования сложился очевидный порочный круг: в индустрии практически не знают про Аду, соответственно, со стороны индустрии нет запроса к образованию по подготовке Ада-специалистов, и из вузов в индустрию приходят новые люди, которые практически ничего не знают про Аду.
Операционные системы, написанные на Аде
Встроенные системы
Системы в разработке
Больше не существующие системы
Компиляторы Ада
Название | Компания | Версия | Операционная система | Сайт |
---|---|---|---|---|
AdaMagic | SofCheck | Ада 95 | ? | www.sofcheck.com |
AdaMULTI | Green Hills Software | Ада 83, Ада 95, Си, Си++, Фортран | Solaris SPARC, GNU/Linux x86, Windows | www.ghs.com |
DEC Ada | Hewlett Packard | Ада 83 | OpenVMS | h71000.www7.hp.com |
GNAT | AdaCore | Ада 83, Ада 95, Ада 2005, Си | Solaris SPARC, Linux x86/x86-64, Windows, другие | libre.adacore.com |
ICC | Irvine Compiler Corporation | Ада 83, Ада 95 | DEC VAX/VMS, HP 9000/700, Solaris SPARC, DEC Alpha OSF/1, PC Linux, SGI IRIX, Windows | www.irvine.com |
Janus/Ada | RR Software | Ада 83, Ада 95 | SCO, UnixWare, Interactive, MS-DOS, Windows | www.rrsoftware.com |
MAXAda | Concurrent | Ада 95 | Linux/Xeon, PowerPC | www.ccur.com |
ObjectAda | Aonix | Ада 95 | Solaris SPARC, HP-UX, IBM AIX, Linux, Windows | www.aonix.com |
PowerAda | OC Systems | Ада 83, Ада 95 | Linux, AIX (Ада 95); IBM System 370/390 (Ада 83) | www.ocsystems.com |
Rational Apex | IBM Rational | Ада, Си, Си++ | Solaris SPARC, Linux | www-01.ibm.com |
SCORE | DDC-I | Ада 83, Ада 95, Си, Фортран | Solaris SPARC, Windows | www.ddci.com |
XD Ada | SWEP-EDS | Ада 83 | OpenVMS Alpha/VAX | www.swep-eds.com |
XGC Ada | XGC Software | Ада 83, Ада 95, Си | Solaris SPARC, PC Linux, Windows (Cygwin) | www.xgc.com |
За исключением GNAT и XGC (для некоторых платформ) вышеперечисленные компиляторы являются платными. Некоторые фирмы, например Aonix, предлагают бесплатные демонстрационные версии, ограниченные либо по времени использования, либо по функциональности.
Среды разработки NetBeans [7] и Eclipse имеют плагины для работы с Ада.
Производные языки
Синтаксис языка Ада использован в следующих языках:
Интересные факты
Язык Пентагона — враг мира. Язык «Ады» — голос термоядерного ада… В языке «Ады» слышится проклятие роду людскому.
Изначально Ada была разработана группой под руководством французского ученого-информатика Жана Ичбиа из CII Honeywell Bull по контракту с Министерством обороны США (DoD) с 1977 по 1983 год, чтобы заменить более 450 языков программирования, используемых Министерством обороны в то время. Ада была названа в честь Ады Лавлейс (1815–1852), которую считают первым программистом.
Содержание
Характеристики
Ада предназначена для разработки очень больших программных систем. Пакеты Ada можно компилировать отдельно. Спецификации пакета Ada (интерфейс пакета) также могут быть скомпилированы отдельно без реализации для проверки согласованности. Это позволяет обнаруживать проблемы на ранней стадии проектирования, до начала реализации.
Поддерживается большое количество проверок во время компиляции, чтобы помочь избежать ошибок, которые не будут обнаружены до времени выполнения на некоторых других языках или потребуют явных проверок для добавления в исходный код. Например, синтаксис требует явно названного закрытия блоков для предотвращения ошибок из-за несовпадения конечных токенов. Соблюдение строгой типизации позволяет обнаруживать многие распространенные программные ошибки (неправильные параметры, нарушения диапазона, недопустимые ссылки, несовпадающие типы и т. Д.) Либо во время компиляции, либо иным образом во время выполнения. Поскольку параллелизм является частью спецификации языка, компилятор в некоторых случаях может обнаруживать потенциальные взаимоблокировки. Компиляторы также обычно проверяют идентификаторы с ошибками, видимость пакетов, повторяющиеся объявления и т. Д. И могут предоставлять предупреждения и полезные предложения о том, как исправить ошибку.
Хотя семантика языка допускает автоматическую сборку мусора для недоступных объектов, большинство реализаций не поддерживают ее по умолчанию, так как это может вызвать непредсказуемое поведение в системах реального времени. Ада поддерживает ограниченную форму управления памятью на основе регионов ; Кроме того, творческое использование пулов хранения может обеспечить ограниченную форму автоматической сборки мусора, поскольку при уничтожении пула хранения также уничтожаются все объекты в пуле.
История
Стандартизация
Этот язык стал стандартом ANSI в 1983 году ( ANSI / MIL-STD 1815A ), а после перевода на французский язык и без каких-либо дальнейших изменений на английский язык стал стандартом ISO в 1987 году (ISO-8652: 1987). Эта версия языка широко известна как Ada 83 с даты ее принятия ANSI, но иногда также упоминается как Ada 87 с даты ее принятия ISO.
Продолжалась работа по улучшению и обновлению технического содержания языка Ада. Техническое исправление к Ada 95 было опубликовано в октябре 2001 года, а основная поправка, ISO / IEC 8652: 1995 / Amd 1: 2007, была опубликована 9 марта 2007 года. На конференции Ada-Europe 2012 в Стокгольме Ada Resource Association (ARA) и Ada-Europe объявили о завершении разработки последней версии языка Ada и отправке справочного руководства в Международную организацию по стандартизации (ISO) на утверждение. ISO / IEC 8652: 2012 был опубликован в декабре 2012 года.
Языковые конструкции
«Привет мир!» в Аде
Типичным примером синтаксиса языка является программа Hello world : (hello.adb)
Типы данных
Например, дата может быть представлена как:
Типы можно уточнить, объявив подтипы:
Типы могут иметь модификаторы, такие как ограниченные, абстрактные, частные и т. Д. Доступ к частным типам возможен только, а ограниченные типы могут быть изменены или скопированы только в рамках пакета, который их определяет. Ada 95 добавляет дополнительные функции для объектно-ориентированного расширения типов.
Структуры управления
Пакеты, процедуры и функции
Пример: спецификация пакета (example.ads)
Тело пакета (example.adb)
Пакеты, процедуры и функции могут быть вложены на любую глубину, и каждый также может быть самым логическим внешним блоком.
Каждый пакет, процедура или функция могут иметь собственные объявления констант, типов, переменных и других процедур, функций и пакетов, которые могут быть объявлены в любом порядке.
Параллелизм
Задачи могут иметь записи для синхронизации (форма синхронной передачи сообщений ). Записи о задачах объявлены в спецификации задачи. Каждая запись задачи может иметь один или несколько операторов принятия в теле задачи. Если поток управления задачи достигает оператора принятия, задача блокируется до тех пор, пока соответствующая запись не будет вызвана другой задачей (аналогично, вызывающая задача блокируется до тех пор, пока вызываемая задача не достигнет соответствующего оператора принятия). Записи задач могут иметь параметры, аналогичные процедурам, что позволяет задачам синхронно обмениваться данными. В сочетании с операторами select можно определить защиту для операторов accept (аналогично защищенным командам Дейкстры ).
Защищенный объект состоит из инкапсулированных частных данных (к которым можно получить доступ только из защищенного объекта) и процедур, функций и записей, которые гарантированно являются взаимоисключающими (за единственным исключением функций, которые должны быть свободны от побочных эффектов. и поэтому может работать одновременно с другими функциями). Задача, вызывающая защищенный объект, блокируется, если другая задача в данный момент выполняется внутри того же защищенного объекта, и освобождается, когда эта другая задача покидает защищенный объект. Заблокированные задачи ставятся на защищаемый объект в очередь по времени прибытия.
Вызовы к записям могут быть повторно поставлены в очередь на другие записи с такой же подписью. Повторно поставленная задача блокируется и добавляется в очередь целевой записи; это означает, что защищенный объект освобождается и допускает выполнение другой задачи.
Оператор select в Ada может использоваться для реализации неблокирующих вызовов входа и приема, недетерминированного выбора записей (также с защитой), тайм-аутов и прерываний.
В следующем примере показаны некоторые концепции параллельного программирования в Ada.
Прагмы
Примерами общего использования прагм компилятора могут быть отключение определенных функций, таких как проверка типа во время выполнения или проверка границ индекса массива, или указание компилятору вставить объектный код вместо вызова функции (как C / C ++ делает со встроенными функциями ).
Смотрите также
Ссылки
Международные стандарты
Обоснование
Эти документы опубликованы в различных формах, в том числе в печатном виде.