понедельник, 15 июня 2009 г.

[comp.prog] Safe and Secure Software: An invitation to Ada 2005

На linux.org.ru в последние дни появилось две новости, касающиеся языка Ada:

Вышел GNAT GPL 2009 – о выходе FOSS версии компилятора языка Ada (есть еще и платная версия).
Вышел релиз связки библиотеки Qt и языка Ada - QtAda-3.0.0 – о создании связки Ada и Qt.

Язык Ada я пытался изучать где-то в 1994-95. У меня дома даже книжка валяется “Язык программирования Ада”. Но то была Ada 83 (если не ошибаюсь с годом принятия первого стандарта). С тех пор утекло много воды. Сначала появилась Ada 95 с поддержкой объектно-ориентированного программирования. Затем Ada 2005. Поэтому при появлении обсуждений на linux.org.ru захотелось восстановить в памяти приблизительные знания о языке. Что удалось сделать с помощью электронной книги Safe and Secure Software: An invitation to Ada 2005.

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

Мне в ней понравились сравнения некоторых конструкций в C/C++ и Ada. Благодаря этому становится хорошо видно, как программирование на одном нативном языке может быть безопаснее программирования на другом нативном языке. Но, что поразительно, из данной книги вовсе не складывается впечатления, что Ada на порядок лучше и удобнее C++. С другой стороны, это может объясняться моей ангажированностью, а с другой стороны – уж очень большой многословностью Ada.

Из того, что меня поразило, я бы отметил:

  • оказывается, в Ada реализована эффективная передача массивов переменной длины через стек. Что, по словам автора книги существенно уменьшает количество операций с динамической памятью в программе. А это не маловажно, т.к. в нативном варианте Ada не предоставляет механизмов сборки мусора;
  • оказывается, в Ada для объектов так же можно определять собственные операции инициализации, копирования и уничтожения (аналогично C++ным конструкторам, операторам копирования и деструктором). Так что в Ada можно, похоже, использовать замечательную идиому RAII;
  • оказывается, в Ada есть специальные директивы компилятора, которые запрещают использование “позднего связывания” (т.е. вызовов виртуальных функций в терминологии C++) в коде. Что используется при разработке критически важных фрагментов кода, в которых все ветви исполнения кода должны быть строго определены;
  • оказывается, что “избыточный” синтаксис для завершающих конструкций end (например, end if, end loop и т.д.) существенно повышает читабельность кода с распечатки. Я этого не ожидал и был удивлен. Но, действительно, когда в рамках примера объявляется пакет с несколькими типами и функциями, то именованные end-ы четко указывают, к чему именно они относятся. Что удобно.

Резюмируя. Если есть поверхностные знания Ada и хочется чуть углубить и расширить их, или если просто есть желание понять, за счет чего Ada позволяет писать надежное ПО, то эту книгу имеет смысл просмотреть.

PS. Интересный список ссылок по Ada-ресурсам: Resources on Ada: Managing Complexity.

Отправить комментарий