Язык программирования Ada принадлежит к числу модульных. Для него характерны строгая типизация, синтаксис, ведущий происхождение от языков Паскаль и Алгол. Назван в честь Ады Лавлейс, математика первой половины XIX в., которую часто называют первым в мире программистом в связи с ее работами по созданию алгоритмов для вычислительной машины Чарльза Бэббиджа.
Рисунок 1. Логотип языка Ada. Автор24 — интернет-биржа студенческих работ
История развития языка Ada
Ada появился в США на рубеже 1970-1980-х гг. как язык программирования для бортовых систем управления военными объектами. Он не принадлежит к числу самых популярных языков программирования, поскольку не рассчитана на создание эффектных пользовательских приложений. В этом языке слабо развиты такие стороны, как функционал, связанный с пользовательским интерфейсом, взаимодействие с базами данных. Тем не менее, язык Ada нельзя назвать устаревшим. На нем в США разрабатывается программное обеспечение для военной промышленности, авиации, энергетики и других инфраструктурных систем. Это нишевый, но, тем не менее, активно используемый продукт.
Язык Ada был создан для решения конкретных задач, причем предметная область его применения была заранее хорошо исследована и описана. Группа его разработчиков сформировалась на основе тщательно организованного международного конкурса.
Стабильный релиз Ada был принят в качестве национального стандарта, а затем был принят и соответствующий стандарт ISO. Высокая степень стандартизации, в частности, предопределила повсеместное единообразие языка, отсутствие диалектов, а также 100%-ю обратную совместимость кода при появлении новых версий.
Попытки включить Ada в систему ГОСТ предпринимались в конце 1980-х гг. и в СССР. На этом языке велась разработка ПО для лайнера Ил-96-300, амфибии Бе-200, космической станции Альфа. Он использовался и в некоторых других проектах государственного уровня. Ada довольно активно применяется для создания промышленных и транспортных систем во Франции (беспилотные поезда метро), Японии, Китае.
На сегодняшний день актуальной является версия Ada-2012.
Специфика Ada
Можно назвать следующие особенности Ada, многие из которых являются уникальными:
- асинхронность реализована на уровне синтаксиса;
- любые компиляторы Ada порождают идентичный бинарный код (стандарт языка предполагает, что каждый компилятор должен выдержать ряд тестов);
- полная совместимость версий поддерживается на протяжении всего времени существования языка.
Философия Ada исходит из того, что в ходе написания программы должен появиться устойчивый набор абстракций, адекватно описывающий предметную область и не позволяющий выполнять некорректные действия, причем соответствие этим требованиям должно выявляться не в момент отладки, а в момент компиляции.
Ada соответствует парадигме объектно-ориентированного программирования. Есть даже мнение, что идеи классов в C++ позаимствованы из реализации Ada-83. При этом спецификация языка Ada существенно компактнее, чем у конкурирующих продуктов.
Несмотря на то, что Ada появился как язык для корпоративных целей, существует его некоммерческая версия, распространяемая под свободной лицензией - полнофункциональная платформа GNAT.
Практика программирования на Ada
Рисунок 2. Разработка на зыке Ada в IDE Wind River. Автор24 — интернет-биржа студенческих работ
Программа "Hello, World!" выглядит на Ada следующим образом:
with Ada.Text_IO;
procedure HelloWorld is
begin
Ada.Text_IO.Put_Line("Hello, World!");
end HelloWorld;
Рассмотрим более сложную программу - функцию, сравнивающую две строки без учета регистра, т.е. строки "Привет!" и "ПрИвЕт!" считаются одинаковыми, а строка "Превед!!" - отличающейся от них.
-- Объявляем функцию, получающую в качестве аргументов сравниваемые строки
-- и возвращающую истинное или ложное значение, в зависимости от того,
-- одинаковы ли их буквы в соответствующих позициях.
-- Прописные буквы считаются равными строчным.
function Equal_Ignore_Case
(S : String; -- Сравниваемая строка 1
T : String) -- Сравниваемая строка 2
return Boolean
is
-- Находим разность между адресами начальных знаков сравниваемых строк.
O : constant Integer := S'First - T'First;
begin
if T'Length /= S'Length then
return False; -- Если длины строк не совпадают - дальнейшая проверка не имеет смысла.
else
for I in S'Range loop -- Сравниваем буквы в соответствующих позициях в цикле.
if To_Lower (S (I)) /= -- Стандартная функция To_Lower превращает любые буквы в строчные, чтобы можно было сравнивать.
To_Lower (T (I + O))
then
-- Если буквы в одной и той же позиции не равны даже после приведения к одинаковому регистру,
-- значит строки не равны.
return False;
end if;
end loop;
end if;
return True; -- Различающихся букв не найдено, возвращаем истинное значение.
end Equal_Ignore_Case;