Язык Ада, 01 лекция (от 24 февраля)
Материал из eSyr's wiki.
Язык Ада в России практически не заметен, на рынке мало используем. Зато, например, в Париже в метро на 14 линии управление поездами происходит с помощью программы на Аде. Технология Ада используется в основном во встроенных системах. В этом курсе не ставится задача научить программировать на Аде, а изучается в некотором смысле философия создания и сопровождения программ. На сегодняшний день Аду можно назвать самым мощным из индустриальных языков программирования, который включается в себя все то, что так или иначе есть в других технологиях, а также то, что в них отсутствует. К примеру, Ада – единственный из языков программирования, который предоставляет на уровне языковых конструкций средства для управления асинхронными процессами. Ада возникла в конце золотого века программирования. В то время делалось огромное количество трансляторов и диалектов языков программирования. Потом это «мода» прошла, и теперь массово используется только несколько языков программирования, такие как C,C++,C#, Delphi, Java. История создания В 70-е годы 20 века Пентагон подсчитал, что используется около 400 различных языков программирования. Ада в чем-то похожа на Паскаль, она в отличие от Си «многословный», т.е. много ключевых слов. Аде необходимо сказать, с каким программным модулем программа должна рассматриваться, в отличие от include в C/С++, которая означает включение другого куска кода из внешнего файла в текущую программу. Краеугольный камень Ады – надежность. К примеру конец какой-либо endHello
Все началось в 70х годах 20 века, когда Министерство Обороны США стала замечать, что нарастает количество ситуаций, когда разработчики ПО не укладываются ни в бюджет, ни во время, и качество результатов тоже резко пошло вниз. Поэтому был запущен проект, в рамках которого должны были определить, какой из аспектов самый критичный. Был исследован вопрос, куда уходят ресурсы? Результаты исследований показали следующее:
- 5% - на научные исследования
- 19% - на обработку данных
- 56% - встроенные программные системы
- 20% - прочее
Так же было замечено, что расходование ресурсов распределяется следующим образом:
- 20% - Разработка
- 80% - Сопровождения
Таким образом, большая часть ресурсов уходит на сопровождение встроенных программных систем. Американцы определили, что встроенные системы – это аппаратно-программный комплекс, предназначенный для решения задач, отличных от численных расчетов. Встроенное обеспечение – это бортовое программное обеспечение, встроенное в различную технику, программа организации воздушного движения, программа для ПВО, ПРО и тд. А компилятор – это не встроенная система. Драйвер в чем-нибудь едущем, летящем – встроенное ПО.
Специфика встроенных систем:
- Самая главная – критичное требование к надежности.
- Большой объем программы
- Большой срок жизни
В 70е годы по контракту Пентагона использовалось порядка 450 языков программирования общего назначения. Ситуация осложнялась тем, что часто некоторая контора получала заказ от Пентагона на разработку ПО. Им необходимо было удержать контракт у себя. Для этого разрабатывался новый язык программирования, которым никто не смог бы пользоваться, кроме тех, кто придумал этот новый язык программирования. В ходе исследования Пентагона рассмотрели все имеющиеся языки программирования и было выяснено, что ни один из существующих языков программирования для области встроенных систем не подходил. Поэтому был предложен проект на разработку нового языка программирования для встроенных систем. Проект Ада – единственный осознанный проект разработки нового языка, который завершился успешно, за исключением, быть может, Java. Для разработки языка Ада были определены 3 прототипа: Паскаль, PL1, Algol68. Далее были разработаны требования для языка. Среди них были такие:
- Общность – одного языка должно хватить на все встроенные системы
- Надежность – язык должен помогать писать надежный код и не ошибаться
- Удобство сопровождения
- Эффективность объектного кода на целевой машине
- Простота
- Реализуемость
- Машинная независимость
- Ясный однозначный синтаксис, легко читаемый код
- Запрет синтаксических расширений
- Встроенная типизация
- Запрет неявных преобразований
- и другое
Победителем была объявлена международная команда под предводительством француза Жана Ишбиа. Т.о. в 1979 году придумали язык Ада. В 1983 года Ада официально возникла как американский национальный стандарт. Стоит заметить, что у Ады никогда не было диалектов. Пентагон зарегистрировал торговую марку Ада и только он мог распоряжаться, какому компилятору можно называться Ада, а кому нельзя. После этого все внешние заказы для Пентагона можно было делать только на Аде. Для того, чтобы компилятор имел право называться компилятором языка Ада, он должен был проходить обязательную сертификация на эталонных тестах. В 1983 г возник стандарт языка. В 1987 году стандарт Ада без единого изменения был утвержден как стандарт ISO. Но раз в 10 лет стандарт языка должен был пересматриваться. Либо комиссия говорит, что все хорошо и ничего не надо менять, либо подвергает изменениям.
Hello, World на Аде:
with Ada.Text_IO; procedure Hello_World is begin
Put_Line (“Hello, World!”);
end Hello_World;
Пример с двумя асинхронными процессами на 20 строк
[код]
В Аде нет никаких ограничений по степени вложенности конструкций. В качестве локального объявления внутри одной процедуры может быть другая процедура.
Задачи – средства описания асинхронных процессов. У всех программных модулей, кроме процедур и функций, обязательно должно раздельно присутствовать спецификация и тело. Задача может иметь входы для общения с внешним миром. Семантика языка такая, если в одной процедуре написаны асинхронные процессы, то они запустятся. В данном случае один процесс 20 секунд стоит. Другой находится в цикле и печатает от 1 до 20. Pragma показывает, что доступ к переменной осуществляется в режиме взаимного исключения. После изменения флажка Boolean цикл завершится, напишется terminate и программа закончит свою работу.
К вопросу о ясном синтаксисе: в Аде присваивание – оператор
В Аде все, что явно не разрешено, то запрещено.
Ссылки на ресурсы: [1]