Неполный и несистематический обзор языка программирования

advertisement
АДА – ИДЕАЛЬНЫЙ БАЗОВЫЙ ЯЗЫК
ОБРАЗОВАНИЯ В ОБЛАСТИ
НФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
В.О.Мищенко,
Харьковский национальный университет
(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
Download