Введение

История

В 1970-х годах Министерство обороны Соединенных Штатов (МО) столкнулось с серьезной проблемой резкого увеличения числа языков программирования, заметив, что различные проекты использовали разные и нестандартные диалекты, языковые подмножества и расширения языков. Что бы решить эту проблему, Министерство обороны запустило конкурс на разработку нового современного языка программирования общего назначения. Победителем вышло предложение, представленное Жаном Ичбией из CII Honeywell-Bull.

Первый стандарт языка Ада был выпущен в 1983 году; впоследствии он был пересмотрен и усовершенствован в 1995, 2005 и 2012 годах, причем каждый пересмотр приносил новые полезные функции.

Этот учебник посвящен Ада 2012 в целом и не освещает различия прошлых версий языка.

Ада сегодня

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

  • Встроенные системы с ограниченным объёмом памяти (сборщик мусора не допускается).

  • Прямое взаимодействие с оборудованием.

  • Мягкие или жесткие системы реального времени.

  • Низкоуровневое системное программирование.

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

Это неполный список, который, надеюсь, прольет свет на то, в каких сферах программирования хорош этот язык.

С точки зрения современных языков, наиболее близкими с точки зрения целей и уровня абстракции, вероятно, являются C++ и Rust.

Философия

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

  • Удобочитаемость важнее краткости. Синтаксически это проявляется в том, что ключевые слова предпочтительнее символов, что ни одно ключевое слово не является аббревиатурой и т.д.

  • Очень строгая типизация. В Аде очень легко вводить новые типы, что позволяет предотвратить ошибки использования данных.

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

  • Явное действие лучше, чем неявное. Хотя это заповедь языка Python, Ада идет дальше, чем любой известный нам язык:

    • В большинстве случаев структурная типизация отсутствует, и программист должен явно именовать большинство типов.

    • Как уже говорилось ранее, в основном нет вывода типов.

    • Семантика очень чётко определена, а неопределенное поведение сведено к абсолютному минимуму.

    • Обычно программист может предоставить компилятору (и другим программистам) много информации о свойствах его программы. Это позволяет компилятору быть чрезвычайно полезным (читай: строгим) программисту.

В ходе этого курса мы объясним отдельные языковые особенности, которые являются строительными блоками этой философии.

SPARK

Хотя этот курс посвящен исключительно языку Ада, стоит упомянуть, что существует еще один язык, чрезвычайно близкий к Аде и совместимый с ней: язык SPARK.

SPARK — это подмножество языка Ада, разработанное таким образом, что код, написанный на SPARK, поддается автоматической проверке. Это обеспечивает гораздо более высокий уровень уверенности в правильности вашего кода, чем при использовании обычного языка программирования.

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