10 причин выучить Аду

wiki:/graphics/10-reasons.jpg

Форма повествования может показаться странной потому, что этот текст просто выдержка из обсуждения на форуме. Но содержимое достойно быть отдельной страницей на нашем сайте.

Предисловие

Сначала отвечу на вопрос «почему лично Вы применяете язык Ada». Потому что практически у каждого, здесь присутствующего — ситуация нестандартная, со своим набором обстоятельств. У меня так получилось, что Ада оказалась первым языком, с которым я стал серьезно работать (причем не как программист — а как разработчик тестов для трансляторов), и после этого все остальные языки в меня просто не полезли. Уж больно бестолковыми и убогими они казались после Ады. В лихое время — в начало 90‐х — я попал в проект по разработке С++‐ного компилятора. Ухитрился успешно отработать руководителем команды тестировщиков, не зная практически ничего про С++. Тогда казалось, что у проекта были хорошие перспективы (иноземный заказчик), но для их реализации надо было таки изучить С++. Так он в меня не полез. Чисто физически. Мозг отказывался воспринимать этот кошмар. И это — в хреновейщей личной финансовой ситуации, когда было не до выпендривания.

Так что попробую именно про 10 причин. Не стреляйте в пианиста — играет как умеет

Причина 1

Всегда полезно знать и понимать историю развития своей профессиональной области. Ада в программной инженерии — явление уникальное. Это единственный язык, который:

    • был задуман как средство решения важной проблемы, причем существование и специфика этой проблемы были тщательно исследованы до того;
    • был разработан систематически, начиная с выработки детальных технических требований к языку;
    • был разработан в ходе тщательно и грамотно организованного международного конкурса;
    • сразу возник на свет в виде американского национального стандарта, который очень быстро был утвержден как стандарт ISO;
    • средства контроля соответствия реализаций стандарту были готовы раньше, чем возникла первая реализация нового языка;
    • в результате у Ады никогда не было, нет и не будет диалектов и версий, слово „Ада“ в каждый момент времени обозначала для всех одно и то же — то, что написано в стандарте языка, и каждый компилятор реализовывал (с точностью до ошибок) именно это;
    • Эволюция языка осуществляется путем пересмотра его международного стандарта с близкой к 100% процентов совместимостью (сохранение работоспособности существующего кода);

Какие‐то из перечисленных пунктов справедливы и для других языков, но все вместе — только для Ады,

Причина 2

Ада — это не столько язык программирования, сколько философия и идеология программирования, краеугольным камнем которых является забота о надежности программного обеспечения на всех этапах его жизненного цикла, включая многолетнее сопровождение и модификацию. Практика показала, что эта философия и идеология прекрасно себя проявляют на практике — время, проводимое в отладчике, для программиста, работающего на Аде, в разы меньше, чем для других языков.

Существенным элементом Адской философии является то, что с точки зрения Ады и Ада‐программиста разработка программы — это не создание кода, а определение набора абстракций подходящего уровня, которые соответствовали различным компонентам и аспектам решаемой задачи, с последующим использованием этих абстракций. Причем Ада нацеливает программиста на создание надежных и защищенных абстракций, то есть тех, которые обладают ровно теми и только теми свойствами, которые от них требуются, и не позволяют использовать себя некорректным образом. В результате большинство проблем, которые в случае других языков выявляются в результате мучительных часов, а то и дней, проведенных в отладчике, в случае Ады будут быстренько выявлены компилятором на ранних этапах создания кода.

Причина 3

С технической точки зрения с момента своего возникновения и для всех последующих ревизий стандарта Ада является уникальным объединением в рамках одного языка технических средств и возможностей, каждое из которых само по себе уникальным не является.

Причина 4

Все современные индустриальные языки программирования предоставляют более‐менее сопоставимые возможности, различаясь не столько тем, что они позволяют делать, сколько тем, как именно они это позволяют. Изучив Аду, вы получите знания о том, как еще может быть организована система типов, модульность и раздельная компиляция, как могут быть реализованы парадигмы ООП по сравнению с теми языками, что вы знаете. Так, например, Ада предоставляет полноценные возможности ООП, но вместе с тем в языке нет синтаксически оформленного понятия класса, традиционного для ООП. Ада показывает, что виртуальные операции совершенно необязательны для обеспечения динамического полиморфизма, для этого вполне достаточно диспетчеризации, которая может оказаться более эффективной. И т.д. Подобное знание (а как еще может быть сделана хорошо известная мне вещь?) никогда не будет лишним. Языки на самом деле беззастенчиво «воруют» идеи друг у друга. Сейчас об этом практически не говорят уже, но С++ списал свои классы с пакетов Ады-83.

Причина 5

На самом деле пункт 4 (про то, что все современные языки предоставляют более‐менее одинаковые наборы возможностей) — вранье. Ада умеет все, что умеют ее прямые конкуренты (С++, Java) — и еще много чего полезного и интересного, чего ее конкуренты не умеют в принципе. В частности:

    • высокоуровневые средства управления асинхронными процессами (как конструкции языка, а не библиотечные вызовы!) с возможностью выбора процессом вариантов поведения в зависимости от ситуации;
    • иерархическая модульность, позволяющая минимизировать перекомпиляции и, что еще возможно, развивать существующий код, не разрушая защищенные абстракции;
    • система ПОДтипов и связанный с ней механизм исключений;
    • исполняемые спецификации и контрактное программирование (Ада 2012 — все эти пре- и пост‐условия и разнообразные инварианты);

Причина 6

Ада позволяет легко выделять технологические подмножества в зависимости от решаемой задачи. Например, не нужно вам ООП — так и забудьте о нем! И это не будет вам стоить никаких дополнительных неудобств. При этом вы по‐прежнему сможете создавать и использовать в своем коде надежные защищенные абстракции.

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

Причина 7

Несмотря на то, что Ада умеет существенно больше, чем конкуренты, сам язык устроен куда проще и понятнее конкурентов. Достаточно сравнить объемы стандартов Ады и С++. Более того, описание Ады «замкнуто» в том смысле, что не использует мифических понятий, подобных «пространству имен» в С++. Все особенности семантики языка описаны в терминах структурных компонент кода, то есть — синтаксиса, определенного БНФ.

Все предопределенное окружение Ада‐программы также описывается в терминах языка — в виде набора спецификаций пакетов, написанных на Аде. Для Ады ответ на вопрос «А что такое Integer?» — ровно такой же, как и на вопрос о любом другом типе, можно пальцем показать то место, где Integer определен. А что такое int в С++?

Причина 8

У Ады — простой, понятный, легко читаемый синтаксис, который существенно снижает риск ситуаций, когда случайная опечатка приводит к тому, что код не становится формально неправильным, но существенно меняется его семантика (если нужны примеры таких ошибок в С — скажите).

Причина 9

Выбор индустрии. Да, Ада возникла по инициативе Пентагона для проектов Пентагона. Но это уже — далекая история. Сейчас никто никого не заставляет использовать Аду. Однако не случайно же многие проекты в областях, где цена ошибки может быть не просто высока, а неприемлемо высока, выбрали и продолжают выбирать Аду?

Причина 10

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

Причина 11

Не сочтите за рекламу, но если вы собрались попробовать Аду, то в вашем распоряжении — абсолютно бесплатно и абсолютно легально находится GPL‐версия системы программирования GNAT, которая является не демо‐версией с обрезанной функциональностью, а практически той же версией (с точки зрения реализованной версии языка и базового инструментария), что используется в то же самое время в индустрии. Более того, забесплатно можно попробовать даже кросс‐компилятор для ... вот забыл, как правильно платформа называется!