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

Комментарии

Страницы

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

mike пишет:

 повторю вопрос: почему же Ада не раскрутилась, а Кьют широко распространён?

В 70е годы по контракту Пентагона использовалось порядка 450 языков программирования общего назначения. Исследования показали, что можно получить огромную экономию средств на программное обеспечение ), если министерство обороны воспользуется единым языком программирования для решения всех своих задач вместо примерно 450 языков программирования и несовместимых диалектов, используемых программистами. Мотивы создания нового языка программирования первоначально были чисто экономическими. Эта монополия на используемый язык сыграла в конечном итоге злую шутку: стоимость контрактов была очень высокой, участвовало ограниченное число фирм, компиляторы и программисты дороги, подготовкой специалистов практически никто не занимался. Остальные ниши были быстро заняты более дешевыми в применении языками, время было упущено. Таким образом язык Ada остался в своей первоначальной нише - разработка ПО для критически важных объектов информатизации. На современном этапе в связке с системами моделирования, автоматической генерацией кода и статической и динамической системой поиска ошибок и формального доказательства правильности работы ПО - требование для проведения сертификационных испытаний.

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

Нет, не так. Ада всегда была доступна. Не надо кивать на закрытость. Фишка в том, что язык изначально разрабатывался для ВСТРАИВАЕМЫХ систем. Отсюда -- неразвитость Ады по части GUI и СУБД. А раз с этим у неё туго -- зачем она вкалывающим за зарплату программистам? ) Ведь ~99% пользовательских приложений нуждаются в GUI и СУБД.

Написал бы больше, да трясёт в маршрутке; сорри, в командировке.

 

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

mike пишет:

 язык изначально разрабатывался для ВСТРАИВАЕМЫХ систем. Отсюда -- неразвитость Ады по части GUI и СУБД.

Отчасти согласен, но это было очень давно, в прошлом веке в прямом и переносном смысле. Сейчас есть пакеты "Матрешка" - типа Qt но все свое (Linux, Windows), OEM-2015 - чистый Win32 + COM, AdaGtk, Qt5Ada version 5.8.0 (539 packages)  release 01/02/2017 free edition, OpenGL for Ada , VTKAda version 7.1.0 is based on VTK 7.1.0 (OpenGL2) is fully compatible with Qt5Ada 5.8.0, Ada .NET (MS VS2005 в начале называлась A#), расширения для PL/SQL  и много еще всего. Плюс Дополнения к стандарту для СУБД, сетевого взаимодействия, систем реального времени и др. За деньги - вообще любой каприз.

 

mike пишет:

Нет, не так. Ада всегда была доступна. Не надо кивать на закрытость. Фишка в том, что язык изначально разрабатывался для ВСТРАИВАЕМЫХ систем. Отсюда -- неразвитость Ады по части GUI и СУБД. А раз с этим у неё туго -- зачем она вкалывающим за зарплату программистам? ) Ведь ~99% пользовательских приложений нуждаются в GUI и СУБД.

ksiminsk пишет:

mike пишет:

 язык изначально разрабатывался для ВСТРАИВАЕМЫХ систем. Отсюда -- неразвитость Ады по части GUI и СУБД.

Отчасти согласен

Не согласен. Java аналогично разрабатывался для написание программ для пульта TV.

Потом случился веб и про пульт временно забыли (но Java вернулась во всевозможные встраиваемые системы) .

Потом аплеты выкинули из броузера, но Java переползла уже в Энтерпрайз и стала там покрываться пылью.

Неисповедимы пути языков. (С)

 

 

 

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

> Сейчас есть ... любой каприз.

И? Что ж строем-то не ходим? 

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

СУБД -- совсем не та поддержка, что для др. языков. Про гуи промолчу. И про веб я хотел сказать, но ... постеснялся. :)

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

savely пишет:

> Сейчас есть ... любой каприз.

И? Что ж строем-то не ходим? 


В нише критических к безопасности ПО , Вы не поверите - ходят строем. Там где игнорируют это получают как в этом URL:

http://www.wired.com/2015/07/hackers-remotely-kill-jeep-highway/

 

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

А НЕ в нише? Повторю себя:

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

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

 

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

savely пишет:

А НЕ в нише? Повторю себя:

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

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

Языки Python, Java, C++, C# и Visual Basic и др.  действительно позволяют очень быстро писать программный код. Это и привлекает бизнес. Тем не менее, в попытке достижения универсальности для охвата всего рынка программного обеспечения вышеупомянутые языки стали малопригодными для работы с системами, имеющими высокие требования к надежности и безопасности. В некоторых областях информационных технологий имеет смысл использовать другие языки, для которых существуют специфические библиотеки или среды разработки. Например, C++ и Java считаются хорошим выбором для разработки приложений для ПК или приложений, где уменьшение времени разработки является главной целью. В других областях, таких как веб-программирование или системное администрирование, предпочтение отдают другим формальным системам, таким как скриптовые и интерпретируемые языки. Когда заказчик за "бугром" главным фактором является временной фактор и количество  доступных программистов. Такое мое мнение.

 

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

Языки, языки, языки... Повторюсь: писать на Аде не сложнее, чем на упомянутых Вами языках.

Таково моё мнение

"Расшифровка" Вашего мнения: в большинстве случаев Ада не имеет достаточно средств для современного программирования. Собственно, выше Вам на это и было указано. Давайте обходиться без тавтологии.

 

+1

Страницы