АДА – ИДЕАЛЬНЫЙ БАЗОВЫЙ ЯЗЫК ОБРАЗОВАНИЯ В ОБЛАСТИ НФОРМАЦИОННЫХ ТЕХНОЛОГИЙ В.О.Мищенко, Харьковский национальный университет (mischenko@univer. Kharkov.ua) С.И.Рыбин, Московский Государственный Университет / AdaCore (rybin@adacore.com) 1 О чем пойдет речь: Ада в университетах: Первый язык обучения - 117: US-62, Europe-46. Программрование для продолж.- 33. Участие в GNAT Academic Program - 109: Europe-60,US-32, PostSov-6,else-11 • Базовый язык образования для специальностей, связанных с ИнфТех – здесь язык – не столько цель,сколько важнейший инструмент обучения – учтём, однако, быстрый рост армии разработчиков встроенного ПО и СРВ • Три больших «почему» доклада: – ПОЧЕМУ у «нас» начинают с языков коммерческих систем программирования в среде коммерческой ОС? – ПОЧЕМУ у«них» университет ставит лицензионные бесплатно ОС и такие же системы программир.( GNU, GNAT), нередко предпочитая Аду? • ПОЧЕМУ мы предлагаем отечественным университетам язык Ада? 2 Варианты выбора базовых языков • MS С/С++ /C#, Pascal-Delphi, Java (Windows 95/XP) • Хороши ли эти языки в качестве базовых? – основы алгоритмов и структур данных на базе С? – параллельное программирование на базе Java? – проектирование, реализация и сопровождение больших систем на базе Паскаля? – надежность программного обеспечения на базе ??? • Но почему же они используются??? – сиюминутный запрос «рынка» (недоразвитого внутреннего и плохо понятого внешнего); – правовой нигилизм, вера в неистребимость халявы и у студентов, и у преподавателей; – традиции учебной и методической литературы на русском языке; – часто ли преподаватель занят в индустрии или в большом программном проекте? 3 Знакомьтесь – Lady Ada! • Ада разработана международными усилиями ок. 1980 по заказу правительства США как единый язык для военных встроенных систем; • Язык стандартизован в 1983 году на уровне ANSI, в 1987 – ISO (ISO/IEC 8652), а затем стандарт Ады дважды пересматривался с полным сохранением совместимости; • С 1997г.Аду освободили от опеки Пентагона, и, будучи универсальным языком, она от этого значительно выиграла ! • Ада одновременно предоставляет и прозрачный код и ряд уникальных (отсутствующих в других языках) возможностей. • Любой из современных индустриальных языков эквивалентен технологическому подмножеству Ады; • Учебный язык Паскаль целиком «вкладывается» в Аду не только функционально, но и синтаксически ! 4 Адская альтернатива • • • • • • Обучение азам программирования на Аде сохраняет все методики Паскаля. Но Ада – современная индустриальная технология, и позже даёт выигрыш в курсах профессиональной ориентации; В частности, Ада-технологии платформонезависимы (одинаково выглядят и работают в платных MS Windows, в бесплатном Linux’е или в модном Solaris’е) Использование в Вашем университете ведущей системы Адапрограммирования - GNAT может быть бесплатным да ещё и с фирменной техподдержкой (!!!) в рамках проекта AdaCore GAP; http://www.adacore.com/home/academia/) Для квалифицированных преподавателей переход на Аду проще и дешевле, чем можно думать! Непараллельная часть языка осваивается зрелым программистом за 3 дня. За последние годы ликвидирован дефицит в оригинальных учебниках на русском языке. Методические Ада-материалы, посвящен. стилю, графическим средствам, связям с БД и т.п.– см. http://www.ada-ru.org 5 Функциональные обязанности базового языка состоят в том, что он --гарантируя прозрачность организации ввода-вывода, with Text_IO, Ada.Integer_Text_IO; use Text_IO, Ada.Integer_Text_IO; --обеспечивает должную абстракцию алгоритма, procedure Hi_Students (N: Natural) is --абстракцию даных, type Student is (Ann, Ben, Dic, Val, Vic); List : array (1..N) of Student; -- 0..5 --модульность (хорошо б, с раздельной компиляцией!) function Num_In_List (S: Student) return Natural is separate; 6 обязанности базового языка в обучении (прод.) --предлагает понятную нотацию, традиционные типы, K, Num: Integer; Str: String(1..3); OK: Character; --включает классический набор операторов, begin K:= 1; while K<=N loop Get (Num); if Num in 0..10 then List (K):= Student'Val(Num); end if; end loop; K:= K+1; --полный набор средств форматирования в/в на консоль, for L in 1..N Loop New_Line; Put("Hi, "); Get (Str); Put ("Your number is "); Put ( Num_in_List (Student'Value(Str) ), 1); end loop; New_Line; Put("OK? "); Get(OK); 7 --обеспечивает средства надёжного программирования. exception when Constraint_Error => Put("? Bad Name Error "); end Hi_Students; Get(OK); --В общем, надёжно поддерживает алгоритмическую --мысль, не запутывая её лишними --«наворотами» и исключениями из правил. with Hi_Students; procedure Demo is begin Hi_Students (7); end Demo; Требования эти обеспечивает непринуждённо леди Ада, восприемница сэра Паскаля, устраняя его недочёты. И выглядит она всегда не старше 10 лет! 8 Язык Ада (в честь Ады Лавлейс), • разрешите познакомиться ближе? 9 Классические структуры данных в Аде Массивы (регулярные типы): type My_Arr is array (Integer range <>) of Integer; ... Записи (комбинированные типы): type Big_Ind is range 0 .. 1024; subtype Ind is Big_Ind range 1 .. Big_Ind’Last; function “+” ( L, R : My_Arr ) return My_Arr is Res : My_Arr (L’Range); Move : constant Integer := R’First - L’First; begin if L’Length /= R’Length then raise Constraint_Error; type Big_Str is array (Ind range <>) of Character; type Var_String (Len : Big_Ind := 0) is record Str : Big_Str (1 .. Len ); end record; else for J in L’Range loop Res (J) := L (J) + R (J + Move); end loop; end if; Str1 : Var_String; ... Str1 := (Len => 3, Str => “Ada”); Str1 := (Len => 6, Str => “Pascal”); Str := (Len => 10, Str => “C++”); return Res; end “+”; ... Arr1 : My_Arr (1 .. 10) := (1 .. 5 => 1, 6 .. 10 => 2); Arr2 : My_Arr (101 .. 110) := (others => 13); Arr3 : My_Arr := Arr1 + Arr2; 10 NewПараллелизм и системы реального времени • Ада – единственный индустриальный язык, предоставляющий высокоуровневые средства работы с асинхронными процессами: – программные модули, описывающие асинхронные процессы; – структуры данных, доступ к которым возможен только в режиме взаимного исключения; – конструкции, обеспечивающие синхронизацию процессов и обмен данными; – конструкции, позволяющие процессу выбирать варианты своего поведения в зависимости от ситуации; • Все это реализовано языковыми конструкциями, а не библиотечными вызовами! 11 Два асинхронных процесса на 20 строк кода with Ada.Text_IO; 2 procedure Tasking_Example is 3 Finished : Boolean := False; 4 pragma Atomic(Finished); процесс Tasking_Example 5 6 task Outputter; -- task specification 7 8 task body Outputter is -- task body 9 Count : Integer := 1; 10 begin 11 while not Finished loop 12 Ada.Text_IO.Put_Line(Integer'Image(Count)); 13 Count := Count + 1; 14 delay 1.0; -- one second 15 end loop; 16 Ada.Text_IO.Put_Line("Terminating"); 17 end Outputter; 18 19 begin 20 delay 20.0; -- twenty seconds процесс 21 Finished := True; Outputter 22 end Tasking_Example; 1 12 Надежный разделяемый буфер в Аде -- определение -- реализация: protected type Bounded_Buffer is entry Put (X: in Item); entry Get (X: out Item); private A : Item_Array(1 .. Max); I, J : Integer range 1 .. Max := 1; Count : Integer range 0 .. Max := 0; end Bounded_Buffer; protected body Bounded_Buffer is -- использование: My_Buffer : Bounded_Buffer; ... My_Buffer.Put (Some_Data); .. My_Buffer.Get (Some__Other_Data); entry Put (X: in Item) when Count < Max is begin A(I) := X; I := I mod Max + 1; Count := Count + 1; end Put; entry Get (X: out Item) when Count > 0 is begin X := A (J); J := J mod Max + 1; Count := Count - 1; end Get; end Bounded_Buffer; 13 Что еще в Аде есть такого, чего больше нет нигде: • «Максимальная» модель модульности; • Действительно строгая и тотальная типизация; • Механизм подтипов и динамический контроль определяемых ими ограничений; • «Активная и пассивная безопасность» - борьба языковых механизмов за надежность создаваемого кода; • Полноценная поддержка объектно-ориентированного программирования, не использующая нарочито оформленную конструкцию «класс» или «объект»; • Отсутствие диалектов и параллельных стандартов; • ASIS как основа инструментов анализа исходного текста; 14 Русскоязычная учебная литература • Оригинальные учебники 1. Гавва. А.Е. Адское программирование. Ада-95. GNAT. http://ada-ru.org/V-0.4/index.html Жуков И.,Корочкин А. "Параллельные и распределенные вычисления«. - Киев, Корнейчук, 2005, - 226 с. (ISВN 966-7599-36-1) Корочкин А. "Ada 95. Введение в программирование" - Киев, Век, 1998 - 226 с. (ISВN 966-952-82-0-8) 2. 3. • 1. 2. • 1. 2. Переводные книги, не утратившие актуальность Василеску Ю. Прикладное програмирование на языке Ада.- М.: Мир. 1990.- 348 с. Бар Р. Язык Ада в проектировании систем.- М.: "Мир.-1988. Некоторые учебно-методические тексты (http://ada-ru.org) Ада 95.Качество и стиль.[Ada 95 Quality and Style Guide.-1995], главы 1-4, перевод с англ. А.Огородника.-2006 Руководство пользователя GtkAda [GtkAda User's Guide. Version 1.2.12.2001], Перевод Copyright (C) 2003 А.Гавва 15 Пример из учебного плана специальность «Информ.упр.системы и технологии» в Харьковском национальном университете им.В.Н. Каразина Основы программир. и алгоритмич. языки Сем. 1-2 , 162 час Базов.ЯП Базов.ЯП это Ада ? ! Объектно-ориент. программирование Сем. 2-3 , 162 час Базов.ЯП, С++ Технологии программирования и сздания программн.продуктов Сем. 4 , 108 час. Базов.ЯП, Средства разработ.интерфейсов Системн.программир. и ОС Сем. 5-6 , 216 час Базов.ЯП, ассемблер, С/С++ Языки программ. Сем. 7, 189 ч. Лисп, Java, PHP срав.с Базов.ЯП Параллельные выч.процессы Сем. 8, 106 ч. Ада/GLADE Компьютерное обеспечение наукоёмких технологий, С. 9, 108 ч. Предмет-ориент.системы и ЯП Организация БД изнаний, Сем. 6, 108 час SQL, Пролог Практикум по моделир. систем, С. 8, 135ч. Базов.ЯП Тестирование и верификация ПО Сем. 8, 81 ч. Базов.ЯП Разработка больших программных … систем, С. 9-10, 216 ч., Ада, Средства разработки интерфейсов 16 Эксперимент с проверкой заменимости Паскаля на Аду в существующем учебном практикуме фта ВМК МГУ Студенческое выполнение заданий на двух языках со сравнительной оценкой преимуществ (Кошелева И.И, гр.324, 2006 ) № Содержание задания Преимущества/Недостатки 1 1D-массивы, арифметические операции при разработке Ада-версии отмечается больше мелких удобств 2 2D-массивы в Ада-версия проще использовать функции 3 синтаксический разбор средства Ады работы со ссылками выше по уровню 4 поиск и множества в Паскаль встроен механизм работы с множествами, в Аде-2005 добавлены контейнеры-множества 5 простейшая база данных эквивалентные версии 17 Выводы • Ада-технологии - неотъемлемая часть современных индустриальных ИТ, и в то же время они заняли в мире устойчивый сектор в образовании, как начальном, так и профессионально ориентированном • Индустрия и университеты постсоветстких стран вскоре выйдут на этот уровень. Это коснется классических, авиационных, отчасти, технических вузов и колледжей • Сложились условия вводить Аду как базовый язык обучения без риска и денежных затрат • Стоит продумать и пробовать! 18