Специалистов по Аде на постсоветстких просторах – единицы. А область применений этого языка в мире по "абсолютной величине" огромна (прим.автора: имеется ввиду в денежном эквиваленте), хотя в относительном измерении может казаться скромной. Это практически всё ПО критического назначения (не считая "войны") это авионика, атомная энергетика, управляющие системы в других промышленных отраслях, часто встроенные, к которым на Java, ну никак, не подъедешь!
Для человека, стремящегося зарабатывать в индустриальном программировании причин изучать Ada практически не осталось. Ada превратилась в нишевый продукт, который расширяться не собирается, да и находится практически вся за пределами русскоговорящего пространства.
Так что у программиста-практика причин изучать Ada нет просто потому, что он не найдет работу, где бы это пригодилось. То же самое – для руководителя проекта, плюс к тому проблема – он не найдет толковых исполнителей. Круг, увы, замкнулся. Однако Сергей Рыбин, к.т.н, старший научный сотрудник НИВЦ МГУ и консультант компании AdaCore EU в России сформулировал 10 технических и идейно-философских причин, по которым стоило бы изучить язык Ada.
Язык Ada – уникальное явление в информационных технологиях
Всегда полезно знать и понимать историю развития своей профессиональной области. Ada в программной инженерии – явление уникальное. Это единственный язык, который:
- был задуман как средство решения важной проблемы, причем существование и специфика этой проблемы были тщательно исследованы до того;
- был разработан систематически, начиная с выработки детальных технических требований к языку;
- был разработан в ходе тщательно и грамотно организованного международного конкурса;
- сразу возник на свет в виде американского национального стандарта, который очень быстро был утвержден как стандарт ISO;
- средства контроля соответствия реализаций стандарту были готовы раньше, чем возникла первая реализация нового языка;
- в результате у Ada никогда не было, нет и не будет, диалектов и версий, слово "Ada" в каждый момент времени обозначала для всех одно и то же – то, что написано в стандарте языка, и каждый компилятор реализовывал (с точностью до ошибок) именно это;
- эволюция языка осуществляется путем пересмотра его международного стандарта с близкой к 100% процентов совместимостью (сохранения работоспособности существующего кода);
Какие-то из перечисленных пунктов справедливы и для других языков, но все вместе – только для Ada.
На сегодняшний день язык Ada-2012 – уникальное явление. Это самым мощным из индустриальных языков программирования, который включает в себя все то, что так или иначе есть в других технологиях, а также то, что в них отсутствует.
К примеру, Ada – единственный из языков программирования, который:
- предоставляет на уровне языковых конструкций средства для управления асинхронными процессами;
- не имеет клонов – все компиляторы языка Ada любых производителей и на всех аппаратных платформах дадут код однозначно выполнимый;
- обеспечивает полную совместимость снизу вверх – программа в стандарте Ada-83 будет давать тот же результат, если ее транслировать средствами Ada-2012;
- стандарт языка включает набор стандартных тестов, которые компилятор должен пройти.
Язык Ada – это философия и идеология программирования
Ada не столько язык программирования, сколько философия и идеология программирования, краеугольным камнем которых является забота о надежности программного обеспечения на всех этапах его жизненного цикла, включая многолетнее сопровождение и модификацию. Практика показала, что эта философия и идеология прекрасно себя проявляют на практике – время, проводимое в отладчике, для программиста, работающего на Аде, в разы меньше, чем для других языков.
Существенным элементом «Адской философии» является то, что с точки зрения языка Ada и Ada-программиста разработка программы – это не создание кода, а определение набора абстракций подходящего уровня, которые соответствовали различным компонентам и аспектам решаемой задачи, с последующим использованием этих абстракций. Причем язык Ada нацеливает программиста на создание надежных и защищенных абстракций, то есть тех, которые обладают ровно теми и ТОЛЬКО теми свойствами, которые от них требуются, и НЕ ПОЗВОЛЯЮТ использовать себя некорректным образом. В результате большинство проблем, которые в случае других языков выявляются в результате мучительных часов, а то и дней, проведенных в отладчике, в случае Ады будут быстренько выявлены компилятором на ранних этапах создания кода.
С технической точки зрения с момента своего возникновения и для всех последующих ревизий стандарта Ada является уникальным объединением в рамках одного языка технических средств и возможностей, каждое из которых само по себе уникальным не является.
Выбор индустрии
Да, язык Ada возник по инициативе Пентагона для их проектов. Но это уже – далекая история. Сейчас никто никого не заставляет использовать язык программирования Ada. Однако не случайно же многие проекты в областях, где цена ошибки может быть не просто высока, а неприемлемо высока, выбрали и продолжают выбирать язык программирования Ada?
Язык Ada специально заточенный на разработку встроенных систем. С одной стороны – кросс-компиляторы, с другой – перенос по максимуму всей тяжести языка на компилятор и на инструментальную машину так, чтобы в целевой среде выполнялось лишь то, что там и должно выполняться.
Связка Jovial-Ada, достаточно эффективно используемая в авионике уже сегодня, в недалёком будущем однозначно не будет иметь конкурентов в сфере создания программ для встроенных бортовых систем военного профиля. Особенно после провала проекта самолёта F-35. Ставка на языки программирования С и C++ – роковая ошибка допущенная при создании самолёта F-35.
В России имеется достаточный опыт использования языка Ada, взять хотя разработку программного обеспечения для самолета Ил-96-300, самолета-амфибии Белиев Бе-200 и космической станции Альфа, автоматизированная станции документальной связи Министерства обороны Российской Федерации. Российской компанией AVD Systems.
Российская компания AVD Systems – является поставщиком решений в Россию и СНГ для ответственных встраиваемых компьютерных систем, аппаратных и программные компонентов, средств разработки таких фирм как: Esterel Technologies, Wind River, AdaCore. Продукцию именно этих фирм выбрал концерн «Авиаприборостроение».
Франция традиционно использует язык программирования Ada, начиная с роботизированной 14 линии метро в Париже – в поездах этой линии нет машиниста. Французский автопром в последние несколько лет также активно переходят на системы проектирования с кода генератором для языка Ada. Это же происходит и в Японии. Китай также стал интесивно изучать язык программирования Ada.
Вот что сообщил KV.by Василий Фофанов сотрудник фирмы AdaCore:
«…Пока что мы видим как раз наоборот, что к нам идут новые сектора индустрии, с которыми мы раньше вообще не имели никакого дела, именно потому что они начинают утрачивать контроль за сложностью своих систем, и хотят поучиться у авиации. Медицинские приборы, автомобили. Да автомобили. У нас люди не вылезают из японских командировок, эта страна у нас на радаре несколько лет назад отсутствовала вообще… Ada и С++ вполне взаимозаменяемы. Но статистика показывает, что проекты на С++ имеют серьезные проблемы с обеспечением качества, и имеют более высокую стоимость жизненного цикла на строку кода.
Конечно. Связь с многомиллиардными потерями самая прямая. А также с тем фактом, что регламентирующие органы тоже начинают просыпаться и готовятся припечатывать автостроителей такими же требованиями по сертификации как в авиации/желдоре. По старинке соответственно делать уже нельзя, а учиться в иных местах, кроме как у уже умеющих это делать областей – негде. … Компилятор Ada генерирует такой же ассемблерный код, как и C. Не "похожий", а просто такой же, вплоть до распределения регистров. И у нас есть компилятор для устройств уровня tinyAVR и им подобных. Проблем никаких нет, ибо понятно что "if (a == b) ...;" и "if a = b then ... end if;" на целевую платформу отображаются идентичным образом. Естественно, при этом используется рантайм с нулевым профилем, и соответственно ряд возможностей языка, требующих поддержки времени исполнения, отключены или как минимум обрезаны.
Вы найдете сопоставимые возможности при альтернативной реализации
Все современные индустриальные языки программирования предоставляют более-менее сопоставимые возможности, различаясь не столько тем, *что* они позволяют делать, сколько тем, *как именно* они это позволяют. Изучив язык Ada, вы получите знания о том, как еще может быть организована система типов, модульность и раздельная компиляция, как могут быть реализованы парадигмы ООП по сравнению с теми языками, что вы знаете.
Так, например, Ada предоставляет полноценные возможности ООП, но вместе с тем в языке нет синтаксически оформленного понятия класса, традиционного для ООП. Ada показывает, что виртуальные операции совершенно необязательны для обеспечения динамического полиморфизма, для этого вполне достаточно диспетчеризации, которая может оказаться более эффективной. И т.д. Подобное знание (а как еще может быть сделана хорошо известная мне вещь?) никогда не будет лишним.
Языки на самом деле беззастенчиво "воруют" идеи друг у друга. Сейчас об этом практически не говорят уже, но С++ списал свои классы с пакетов Ada -83.
Язык Ada превосходит С++ и Java
На самом деле пункт 4 – вранье. Ada умеет все, что умеют ее прямые конкуренты (С++, Java) – и еще много чего полезного и интересного, чего ее конкуренты не умеют в принципе. В частности:
- высокоуровневые средства управления асинхронными процессами (как конструкции языка, а не библиотечные вызовы!) с возможностью выбора процессом вариантов поведения в зависимости от ситуации;
- иерархическая модульность, позволяющая минимизировать перекомпиляции и, что еще возможно, развивать существующий код, не разрушая защищенные абстракции;
- система ПОДтипов и связанный с ней механизм исключений;
- исполняемые спецификации и контрактное программирование (Ada 2012 – все эти пре- и пост-условия и разнообразные инварианты).
Вы можете использовать различные технологии программирования
Ada позволяет легко выделять технологические подмножества в зависимости от решаемой задачи. Например, не нужно вам ООП – так и забудьте о нем! И это не будет вам стоить никаких дополнительных неудобств. При этом вы по-прежнему сможете создавать и использовать в своем коде надежные защищенные абстракции.
Легко ли в С++ программировать, не используя классы?
Язык Ada выражает, то, что думает программист
Несмотря на то, что Ada умеет существенно больше, чем конкуренты, сам язык устроен куда проще и понятнее конкурентов. Достаточно сравнить объемы стандартов Ada и С++. Более того, описание Ada "замкнуто" в том смысле, что не использует мифических понятий, подобных "пространству имен" в С++. Все особенности семантики языка описаны в терминах структурных компонент кода, то есть – синтаксиса.
Все предопределенное окружение Ada-программы также описывается в терминах языка – в виде набора спецификаций пакетов, написанных на Ada. Для языка Ada ответ на вопрос "А что такое Integer?" – ровно такой же, как и на вопрос о любом другом типе, можно пальцем показать то место, где Integer определен.
А что такое int в С++?
Много лет назад, на лекциях NATO Кристофер Страчи, один из авторов CPL сказал: «То, как люди учатся программировать, отвратительно. Они снова и снова учатся каламбурить. Они используют операции сдвига вместо умножения, запутывают код используя битовые маски и числовые литералы, и вообще говорят одно, когда имеют ввиду что-то совсем другое. Я думаю, у нас не будет инженерного подхода к разработке программного обеспечения до тех пор, пока у нас не закрепятся профессиональные стандарты о том, как писать программы. А добиться этого можно лишь начиная обучение программированию с того, как писать программы должным образом. Я убежден, что в первую очередь необходимо начать говорить именно то, что вы хотите сказать, а не что-то другое».
Мы должны научиться выражать, то, что мы думаем. И язык Ada позволяет нам выразить это ясно, и в этом, в конечном счете, его сила.
Безопасный синтаксис
У Ada – простой, понятный, легко читаемый синтаксис, который существенно снижает риск ситуаций, когда случайная опечатка приводит к тому, что код не становится формально неправильным, но существенно меняется его семантика.
Имеется GPL-версия системы программирования GNAT
Не сочтите за рекламу AdaCore, но если вы собрались попробовать программировать на языке Ada, то в вашем распоряжении – абсолютно бесплатно и легально находится GPL-версия системы программирования GNAT, которая является не демо-версией с обрезанной функциональностью, а практически той же версией что используется в то же самое время в индустрии. Более того, бесплатно можно попробовать даже кросс-компилятор для arm-elf (STM32F4DISCOVERY и тому подобные) и вариант адаптированный для Raspberry Pi 2.
Вы не будете одиноки в процессе изучения языка Ada
В Харьковском национальном университете имени В.Н.Каразина раз в два года проходит международная конференция «Компьютерное моделирование в наукоёмких технологиях». На секциях этой конференции можно выступить с докладом.
Также на Украине ежегодно проводится англоязычная международная конференция Dependable Systems, Services & Technologies (DESSERT). В DESSERT имеется секция посвящённая применению языка программирования Ada и других языков для критических к безопасности и надёжности приложениям Workshop on Ada Technology and Language Diversity (AdaLanD WS).
Компании AdaCore EU/USA для ВУЗов поддерживает программу GAP (The GNAT Academic Program. Encouraging the use of Ada in Academia). Имеется несколько англоязычных форумов.
KV.by благодарит участников ADA-RU, которые приняли активное участие в обсуждении темы статьи и поделились своим опытом практического применения языка Ada.
Как я люблю всегда читать комментарии Майка. К любому материалу суть комментария "это говно". Развлекательный материал - "подавайте технический", если технический - "написано не то, что хочу". При этом свои опусы почему-то никто тут вешать не спешит, чтобы не почитали не дай Бог, а вешают на "айтиквариат", который читают в основном его отцы-основатели. Молодец Майк, так держать, ты молодец, ты все правильно делаешь.
По сабжу: да какая разница, на чем писать? У Ады просто не было мега-корпорации, которая бы его продвигала и толкала в каждую дырку, вот и нет приличного инструментария (один несчастный GNAT), и нет 100500 книг и курсов для разрабов. Соответственно, манагеры его не выбирают из соображений лояльности к M$/Oracle/Apple и т.д., и разрабы его из-за этого не учат. А так всё придумали хорошо, забыли только, что придумать мало, надо ещё и "толкнуть" целевой аудитории.