10 причин освоить язык Ada, если вы уже знаете C++ или Java

Специалистов по Аде на постсоветстких просторах – единицы. А область применений этого языка в мире по "абсолютной величине" огромна (прим.автора: имеется ввиду в денежном эквиваленте), хотя в относительном измерении может казаться скромной. Это практически всё ПО критического назначения (не считая "войны") это авионика, атомная энергетика, управляющие системы в других промышленных отраслях, часто встроенные, к которым на 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.

Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 7
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!
Аватар пользователя mental

Как я люблю всегда читать комментарии Майка. К любому материалу суть комментария "это говно". Развлекательный материал - "подавайте технический", если технический - "написано не то, что хочу". При этом свои опусы почему-то никто тут вешать не спешит, чтобы не почитали не дай Бог, а вешают на "айтиквариат", который читают в основном его отцы-основатели. Молодец Майк, так держать, ты молодец, ты все правильно делаешь.

По сабжу: да какая разница, на чем писать? У Ады просто не было мега-корпорации, которая бы его продвигала и толкала в каждую дырку, вот и нет приличного инструментария (один несчастный GNAT), и нет 100500 книг и курсов для разрабов. Соответственно, манагеры его не выбирают из соображений лояльности к M$/Oracle/Apple и т.д., и разрабы его из-за этого не учат. А так всё придумали хорошо, забыли только, что придумать мало, надо ещё и "толкнуть" целевой аудитории.

+3

Комментарии

Страницы

Ну по качеству кода и надёжности те же Erlang / Haskell / Ocaml не уступают (ну каждый со своими заморочками)

+1
Аватар пользователя mike

Освоить Аda...

Совсем не о чем писать?

(Помню, помню статью Станкевича об Аде. :) В бумажных ещё "Вестях".)

-2
Аватар пользователя mike

Легко ли в С++ программировать, не используя классы?

ДА ЗАПРОСТО!

Автор утверждает, что идею классов C++ спёр к Ады. Анекдот! Даже обсуждать неохота. Все знают: класс -- это развитие структуры в C.

Ну и проч. галиматья.

Кол за безграмотную статью.

-2
Аватар пользователя mike

Вообще-то Ада легко учится. 

+1
Аватар пользователя savely

Если вы такие умные - что же строем-то не ходите? ;)

В плане: старый язык, старше С++, недостатков вообще нет (судя по статье) - что ж не пишут-то на нем все, что можно? 

Ладно я еще Java могу понять как конкурента (бинарная переносимость), но C++ уж давно умереть должен был. ;)

P.S. В принципе, даже просто в соотв. статье Вики есть ответы на такого рода вопросы. 

 

Аватар пользователя mental

Как я люблю всегда читать комментарии Майка. К любому материалу суть комментария "это говно". Развлекательный материал - "подавайте технический", если технический - "написано не то, что хочу". При этом свои опусы почему-то никто тут вешать не спешит, чтобы не почитали не дай Бог, а вешают на "айтиквариат", который читают в основном его отцы-основатели. Молодец Майк, так держать, ты молодец, ты все правильно делаешь.

По сабжу: да какая разница, на чем писать? У Ады просто не было мега-корпорации, которая бы его продвигала и толкала в каждую дырку, вот и нет приличного инструментария (один несчастный GNAT), и нет 100500 книг и курсов для разрабов. Соответственно, манагеры его не выбирают из соображений лояльности к M$/Oracle/Apple и т.д., и разрабы его из-за этого не учат. А так всё придумали хорошо, забыли только, что придумать мало, надо ещё и "толкнуть" целевой аудитории.

+3
Аватар пользователя mike

Какая разница на чём писать?

Люблю комментарии Майка ... Это говно...

Ментал, я же не писал, что Ада плохая. Наоборот, я на ней даже одно время писал. Механизм сигналов и слотов позаимствовал у неё Кьют. А проблема программирования синхронизации асинхронных потоков  в Аде решена аеликолепно. 

Ментал, я же не о том писал. Я писал о моментах, где автор ошибается в своих высказываниях. Зачем передёргиваете?

При всём уважении, Ментал, имхо Вы не правы. Кьют, например, кроме "Троллтеха" никто не продвигал, и разве мог сравниться "Троллтех" с Пентагоном? А Кьют намного живее Ады. Случайно не знаете почему?

+1
Аватар пользователя ksiminsk

mike пишет:

Легко ли в С++ программировать, не используя классы?

ДА ЗАПРОСТО!

Автор утверждает, что идею классов C++ спёр к Ады. Анекдот! Даже обсуждать неохота. Все знают: класс -- это развитие структуры в C.

Ну и проч. галиматья.

Кол за безграмотную статью.

Кол за оценку.

Все библиотеки и конструкции C++ построены на классах, остальное это C.

На C можно написать код который будет отображаться в память также как и класс в С++. Но это уже будет С. Это же можно сделать и на макро ассемблере, что в свое время я и делал на ЭВМ с архитектурой DEC.
 Класс - развитие типов языка, а не структур. Не надо путать форму отображения класса в памяти, с понятием класс.

Аватар пользователя mike

Класс -- развитие типов языка, а не структур.

Структура в С++ -- тоже тип. В C структура тоже м.б. типизирована через typedef. Да, структура в си и в "плюсах" -- не одно и то же, но всё имеет историю. На эту тему есть хорошая книга отца-основателя "плюсов".

Не могу отвлекаться -- работаю, сорри.

 

Аватар пользователя ksiminsk

mike пишет:

Класс -- развитие типов языка, а не структур.

Структура в С++ -- тоже тип. В C структура тоже м.б. типизирована через typedef. Да, структура в си и в "плюсах" -- не одно и то же, но всё имеет историю. На эту тему есть хорошая книга отца-основателя "плюсов".

Не могу отвлекаться -- работаю, сорри.

 


Все таки рекомендую почитать 2-х томник "Филасофия С++" Брюс Эккель и в особенности 2-ой том - практическое программирование в соавторстве с Чак Эллисон, что бы знать хоть приблизительно современное состояние с языком C++

 

Страницы