Ада-технологии в 21 веке – не миф, а реальность (Язык Ада: технологии, применение, стандартизация, возможности для встроенных систем ). презентация

Содержание

Еще одна попытка разорвать порочный круг… Ада (практически) отсутствует в современном ИТ-образовании в ВУЗах СНГ Ада (практически) отсутствует в современной ИТ-индустрии в странах СНГ ИТ-специалисты не знакомы с

Слайд 1Ада-технологии в 21 веке – не миф, а реальность
(Язык Ада:

технологии, применение, стандартизация, возможности для встроенных систем ).

Сергей Рыбин rybin@adacore.com

Москва, 28 октября 2010 г.




Слайд 2Еще одна попытка разорвать порочный круг…
Ада (практически) отсутствует в современном ИТ-образовании в ВУЗах

СНГ

Ада (практически) отсутствует в современной ИТ-индустрии в
странах СНГ

ИТ-специалисты не знакомы с
Ада-технологиями и инструментарием

Отсутствует «заказ» на подготовку специалистов, владеющих Ада-технологиями


Слайд 3И это в ситуации, когда Ада используется
в таких областях, как:
организация воздушного

движения
авионика (военная и гражданская)
средства связи и телекоммуникаций
энергетика
банковские системы
медицинские системы
военные системы (наземного, морского и авиакосмического базирования)
космические технологии
телевидение
транспорт
электроника

Такими компаниями, как:
Alenia
Alstom Transport
Ansaldo STS
BAE Systems
Boeing
EADS
European Space Agency
Eurocontrol
IPESOFT
JEOL
Lockheed Martin
MBDA
Philips Semiconductor
Raytheon
Rockwell Collins
SAAB
General Electric
Thales
Thales Alenia Space
...


Слайд 4Ада – язык, ориентированный на создание надежного кода.
Современные индустриальные языки сопоставимы

по предоставляемым возможностям, различаясь в том, как именно эти возможности предоставляются.

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

Ада предоставляет возможности, отсутствующие в языках-конкурентах (С/С++, Java):
высокоуровневые языковые абстракции и соответствующие конструкции для программирования асинхронных процессов


Слайд 5“Hello, World!”
Язык был разработан в конце 80-х годов по заказу МО

США как единый язык для разработки встроенных программных систем;

Стандарт ANSI (1983), стандарт ISO/IEC 8652 (1987/1995/2007/2012);

Ада – прямой потомок Паскаля:

with Ada.Text_IO; use Ada.Text_IO;
procedure Hello_World is
begin
Put_Line (“Hello, World!”);
-- Это комментарий
end Hello_World;

Слайд 6Язык программирования и надежность - философия (1).

Создание программы (программной услуги) –

не написание кода, а определение и использование моделей и абстракций, соответствующих объектам и процессам в решаемой задаче или проблемной области.

Уровень и разнообразие базовых абстракций должен соответствовать уровню и разнообразию решаемых задач («принцип сундука»)
готовые и удобные решения для часто встречающихся технологических потребностей;
удобные средства создания проблемно-ориентированных абстракций;
высокая производительность на полном жизненном цикле программной услуги;


Слайд 7Язык программирования и надежность - философия (2).

«Все, что не разрешено –

запрещено!» Язык реализует жесткую дисциплину прогнозирования (определения свойств абстракции при ее создании) и контроля * (использования абстракции в соответствии с определенными для нее свойствами);


Чем раньше обнаружится ошибка (несоответствие использования абстракции определенным для нее свойствам), тем проще, быстрее и дешевле оказывается ее устранение;



---------------------------------------------------------------
* Кауфман В.Ш - Языки программирования. Концепции и принципы М.:Радио и связь, 1993

Слайд 8Язык программирования и надежность - философия (3).

Программист в основном занят сопровождением

и модификацией чужого кода, а не созданием своего
ясность и хорошая структурированность кода многократно важнее возможности быстро его написать!

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

Все, что может быть определено – должно быть явно определено!
умолчания и надежда на «здравый смысл» - один из основных источников недоразумений и ошибок!
определение Ады «замкнуто». По сравнению с Си/Си++, например:
правила видимости не требуют привлечения мифического понятия «пространства имен», а вполне обходятся синтаксическими конструкциями языка;
правила модульности и раздельной компиляции не требуют привлечения внеязыкового понятия «файл», а также обходятся синтаксическими конструкциями языка;

Слайд 9Язык программирования и надежность - философия (4).
Опережающая стандартизация
Ада возникла и развивалась

как стандарт языка программирования;
Средства контроля стандарта Ады были разработаны к моменту принятия первого стандарта языка – все индустриальные реализации Ады достаточно точно соответствуют той или иной версии стандарта, диалектов Ады в индустрии не было и нет;

Классификация ошибок в программе на уровне стандарта языка. Стандарт четко подразделяет все содержащиеся в нем требования на следующие группы:
проверяемые во компиляции отельного модуля (нарушение требования означает, что компиляция не является успешной, в ее результате не будет создан объектный код);
проверяемые при сборке программы из успешно скомпилированных модулей (нарушение требования означает, что исполняемый файл создан не будет);
проверяемые при выполнении программы (нарушение требования приводит к возбуждению предопределенного исключения);
правила, нарушение которых реализация проверять не обязана.
Средства контроля стандарта проверяют, что поведение реализации соответствует этой классификации!

Слайд 10Язык программирования и надежность – практика. О пользе ясного синтаксиса (1)
Опасность

ошибиться и не заметить:

Си - правильный код:
if (the_signal == clear)
{
open_gates (...);
start_train (...);
}
Но если перепутать “= “и “==“, получим формально корректный код:
if (the_signal = clear)
{
open_gates (...);
start_train (...);
}

В Аде такое невозможно:
if The_Signal = Clear then
Open_Gates (...);
Start_Train (...);
end if;
В Аде присваивание “:=“ никогда не может оказаться частью конструкции, являющейся условием и быть перепутано со сравнением “=“. В Аде операторы четко отделены от выражений.


Слайд 11Язык программирования и надежность – практика. О пользе ясного синтаксиса (2)
Опасность

ошибиться и не заметить:

Си - правильный код:
if (the_signal == clear)
{
open_gates (...);
start_train (...);
}
Если случайно поставить «лишнюю» точку с запятой, получим формально корректный код:
if (the_signal == clear) ;
{
open_gates (...);
start_train (...);
}

В Аде такое невозможно:
if The_Signal = Clear then ;
Open_Gates (...);
Start_Train (...);
end if;
В Аде не бывает неявных пустых операторов, которые «вдруг» появляются перед “;”. Данный код будет отвергнут как синтаксически некорректный


Слайд 12Язык программирования и надежность – практика. О пользе ясного синтаксиса (3)
Полезные

«мелочи»

procedure P1 is
...
procedure P2 is
...
begin
...
end P2;
begin
...
Bl1 : begin
...
Bl2 : begin
...
end Bl2;
...
end Bl1;
end P1;

record
I : Integer;
end record;
...
if Condition then
for I in 1 .. 10 loop
case Value is
...
end case;
end loop;
end if;


Слайд 13Язык программирования и надежность – практика. Строгая типизация в Аде (1).
Прогнозирование

и контроль свойств элементов программы - основное средство обеспечения надежности:
каждая используемая в программе сущность должна быть объявлена;
объявление полностью определяет свойства сущности;
каждая сущность может использоваться только в соответствии с ее свойствами, заданными в объявлении;
никакие неявные преобразования или изменения свойств сущности недопустимы;
Все, что не разрешено (объявлением сущности), запрещено (при использовании сущности);

Что такое тип данных в языке программирования?
множество значений + набор применимых операций
или все-таки
отражение содержательной роли объектов данных в проблемной области?
Типы данных и надежность программ - философия Ады:
надежность программы возрастает, если программа максимально точно и подробно отражает модель проблемной области;
для каждого объекта данных важно определить его роль в (модели) проблемной области и проконтролировать, что каждый объект используется только в своей роли;
Концепция строгой типизации: тип данных = содержательная роль объектов данных в модели проблемной области;

Слайд 14Язык программирования и надежность – практика. Строгая типизация в Аде (2)
Все типы

данных явно определены (объявлены) в программе, все они имеют имена и определения;
Все объекты данных (и все их компоненты) имеют ровно один тип. Этот тип известен при объявлении объекта. Этот тип должен быть задан путем указания имени ранее объявленного типа данных;
Все операции объявлены в тексте программы, все они имеют явно определенные типы параметров и результата (если он есть) Эти типы также должны быть заданы путем указания имен ранее объявленных типов данных.
При вызове любой операции (присваивание тоже считается операцией!) проверяется, что типы операндов соответствуют заявленным типам параметров операции;
Соответствие типов есть не соответствие структур значений, а совпадение имен (объявлений) типов;
Все типы должны определяться статически (это никак не связано и никак не препятствует динамическому полиморфизму как части объектно-ориентированного программирования)
Неявные преобразования типов недопустимы.

Слайд 15Язык программирования и надежность – практика. Строгая типизация в Аде – классический

пример

type Фрукты is new Integer; -- тип с теми же свойствами, что
-- Integer, но ДРУГОЙ!!!
type Яблоки is new Фрукты;
type Апельсины is new Фрукты;
...
Я1, Я2 : Яблоки;
А1, А2 : Апельсины;
Ф : Фрукты;
...
Я1 := 5; -- можно
Я1 := Я1 + Я2; -- можно
А1 := Я1 + А2; -- нельзя - нет такого «+»!
Ф := Я1; -- нельзя - разные типы источника и получателя «:=»!

if Я1 + Я2 > Ф then -- и это недопустимо! Нет такого “>”

end if;

-- А вот так – можно! Явное указание на то, что объект (временно)
-- меняет свою содержательную роль (явное преобразование типа):

Ф := Фрукты (Я1) + Фрукты (А1);


Слайд 16Язык программирования и надежность – практика. Строгая типизация в Аде: («Если нельзя, но

очень хочется, то можно!» ((С)))

Явное преобразование типа – использование объекта данных в другой (родственной) роли;

Иногда возникает необходимость преобразования типа между типами, вообще не имеющими друг к другу никакого отношения…

Это можно сделать, но для этого придется специально настроить вот такой шаблон:
generic type Source(<>) is limited private; type Target(<>) is limited private;
function Ada.Unchecked_Conversion(S : Source) return Target;
и применить результат настройки к нужным объектам (то есть, сделать такое случайно, «не заметив», невозможно).


Слайд 17Язык программирования и надежность – практика. Подтипы и исключительные ситуации.
procedure Автопилот

is
type Скорость is digits 8 range 0.0 .. 500.0;
function Данные_Спидометра return Скорость is
...
end Данные_Спидометра;
subtype Безопасная_Скорость is Скорость range 0.0 .. 200.0;
Текущая_Скорость : Безопасная_Скорость;
...
begin
...
loop
Текущая_Скорость := Данные_Спидометра;
...
end loop;
...
exception
when Constraint_Error =>
Включить_Аварийный_Сигнал;
Нажать_На_Тормоз;
...
end Автопилот;

Тип данных – это:
концептуально - содержательная роль объектов данных в программе;
технически – множество значений + совокупность операций;
Подтип – это ограничение множества значений в рамках той же содержательной роли;
Реализация сама проверяет, что присваиваемое значение попадает в подтип, определенный для данного объекта данных (принадлежит подтипу);
В случае нарушения подтипового ограничения при выполнении программы возбуждается предопределенное ограничение Constraint_Error;


Слайд 18Язык программирования и надежность – практика. Полезные «мелочи»…
Все намерения программиста должны

быть явно обозначены
type Week_Day is
(Mon, Tue, Wen, Thu, Fri,
Sat, Sun);
Day : Week_Day;
...
case Day is
when Mon .. Thu =>
Working_Like_Dog;
when Sat =>
Drinking;
when Sun =>
Fishing;
end case;
-- Но что происходит в пятницу???
-- Такой код не будет скомпилирован!

Статическая борьба с «дохлыми» ссылками:

package P is
type T is ...;
type T_Ptr is access all T;
Global : T_Ptr;
end P;
...
procedure Q is
X : aliased T;
Local : T_Ptr := X'Access; -- Так нельзя!
-- Local может быть присвоен чему угодно,
-- в т.ч. и Global
begin
Global := X'Access; -- Нельзя!
Global := Local; -- Нельзя!
Global := X’Unchecked_Access;
-- Можно, но под личную
-- ответственность автора
...
end Q;


Слайд 19Язык программирования и надежность – практика. Проблемы при сборке программы
package P1

is
function F1 return Integer;
end P1;

with P1;
package body P2 is
X2 : Integer := P1.F1;
function F2 return Integer is
begin
return X2;
end F2;
end P2;

with P2;
package body P1 is
X1 : Integer := P2.F2;
function F1 return Integer is
begin
return X1;
end F1;
end P1;

package P2 is
function F2 return Integer;
end P2;

Реализация Ады обязана определить, что не существует корректного порядка включения кода, порождаемого модулями P1 и P2, в исполняемый код, а потому никогда не будет создан исполняемый код для программы, в состав которой входят эти модули.


Слайд 20На обеспечение надежности работают и такие языковые механизмы, как:
Разделение спецификации (интерфейса)

и реализации (тела) для каждого программного модуля и невозможность доступа к телам со стороны клиентов модуля;

Приватные типы;

Правила видимости имен;

Правила раздельной компиляции;

Контрактная модель настройки шаблонов;


Слайд 21Чего стоят такие меры обеспечения надежности?
Статический контроль (как при раздельной компиляции

модулей, так и при сборке программ) приводит только лишь к утяжелению транслятора, никак не сказываясь на размерах и быстродействии исполняемого кода;

Динамический контроль (подтиповые ограничения) незначительно утяжеляют исполняемый код, при необходимости они могут быть (выборочно) отключены;

Зато шансов, что до исполнения будет допущен код с «дурными» ошибками, которые к тому же не будут сразу обнаружены, намного меньше!

Слайд 22И что они дают?
IEEE Software, 1987, #1, pp40-44:
производительность разработчиков на полном

цикле (>= 20_000 SLOC):
Ада - 12 строк/день
другие языки - 10 строк/день

распределение затрат в проекте:




Слайд 23Асинхронные процессы в Аде
Наш мир состоит из взаимодействующих асинхронных процессов, взаимодействующих

друг с другом и конкурирующих за использование разделяемых ресурсов;
Программы, встроенные в реальный мир, должны уметь работать с асинхронными процессами и разделяемыми ресурсами;
Программы с асинхронными процессами существенно сложнее последовательных программ;
Чем может помочь язык программирования?
Предоставление высокоуровневых средств описания асинхронных процессов и управления ими;
Данные средства должны быть согласованы с привычными нам моделями взаимодействия асинхронных процессов;
Данные средства должны быть ориентированы на устойчивые к ошибкам парадигмы и технологии работы с асинхронными процессами;
Ада – единственный индустриальный язык, который это умеет.

Слайд 24Два асинхронных процесса на 19 строк кода (by B. Brosgol, http://www.embedded.com/story/OEG20021211S0034

)

1 with Ada.Text_IO;
2 procedure Tasking_Example is
3 Finished : Boolean := False;
4 pragma Atomic(Finished);
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;
22 end Tasking_Example;

процесс Tasking_Example

процесс Outputter

результат работы этой программы:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Terminating


Слайд 25«Умный» буфер
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 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;

-- Использование буфера:
-- * возможно только в режиме
-- взаимного исключения;
-- * тупики исключены;
My_Buffer : Bounded_Buffer; ...
My_Buffer.Put (Something); ... My_Buffer.Get (To_Something);


Слайд 26GNAT – реализация Ады 83/95/2005/2012 в семействе компиляторов GNU GPL
Компилятор переднего

плана для Ады + кодогенератор GCC + GUI + набор инструментов + набор технологических решений для основных областей применения;

Распространяется под лицензиями GPL/GMGPL:
все исходные коды всех компонент бесплатно доступны любому, получившему компилятор законным образом;
в версии GNAT Pro отсутствует проблема GPL-инфицирования;

Разрабатывается и сопровождается с 1995 года компанией AdaCore (www.adacore.com).

Распространяется как:
GNAT Pro (AdaCore);
GAP (AdaCore);
GNAT GPL (AdaCore);
версии, подготовленные, собранные и распространяемые другими людьми, сообществами, организациями…

Слайд 27GNAT Pro – поддерживаемые платформы
Linux: x86 GNU Linux (32 bits)
Linux:

x86-64 GNU Linux (64 bits)
Linux: HP Integrity Itanium GNU Linux
Linux: SGI Altix Itanium GNU Linux
Solaris: SPARC Solaris (32 bits)
Solaris: SPARC Solaris (64 bits)
Solaris: x86 Solaris/Trusted Solaris (32 bits)
Windows: x86 Windows (32 bits, 64 bits)
Windows: .NET on Windows
Mac OS X: x86-64 Mac OS X (64 bits)
Mac OS X: PowerPC Mac OS X
HP-UX: PA-Risc HP-UX
HP-UX: Itanium HP-UX
Tru64: Alpha Tru64
OpenVMS: Alpha OpenVMS
OpenVMS: Itanium OpenVMS
IRIX: MIPS IRIX
AIX: PowerPC AIX (32 bits)
LynxOS: x86 LynxOS 4.x

Кросс-компилятры для :
Embedded Linux
PikeOS
Nucleus OS
LynxOS
VxWorks


Слайд 28GNAT Pro – индустриальное использование
Список клиентов (фрагмент):
ABB
Alcatel Space
Air Traffic Control Netherlands
BNP

Paribas
Boeing
BAE Systems
Ericsson Microwave System
Eurocontrol
Eurocopter
Eurotunnel
General Dynamics
Havelsan
Hewlett-Packard
Honeywell
Indra
Lockheed Martin
MBDA
Ministry of Defense, the Netherlands
NATO
Paranor
Philips Semiconductors ITEC
PostFinance
Raytheon
Rockwell Collins
Saab
Siemens Transportation Systems
SGI
Sema Group
Thales

Проекты:
Lockheed Martin – модернизация транспортного самолета C-130J;
Thales – система определения положения в пространстве для Airbas A350;
Thales – встроенное ПО для перископов подводных лодок;
Lockheed Martin – система предупреждения конфликтов при управлении воздушным движением;
Raytheon – боевое корабельное ПО;
Boeing - 787 Dreamliner
BAE Systems – бортовое ПО для европейского истребителя (Eurofighter Typhoon )
MBDA – встроенное ПО для компонент международной космической станции;

Вся информация – с http://www.adacore.com/home/company/customers
и
http://www.adacore.com/home/company/customers/featured-projects


Слайд 29GNAT Pro - компилятор
Ada front-end (реализован на 95% на Аде +

5% Си-кода) + общий кодогенератор GNU GCC;
общий кодогенератор существенно облегчает работу над мультиязыковыми проектами;
GNAT Pro – среда разработки на Аде/Си/Си++

Существует как в обычном (native), так и в кросс-вариантах;

Удовлетворяет (как минимум!) стандартным индустриальным требованиям (ресурсоемкость, скорость компиляции, качество кода):
косвенное доказательство эффективности – использование метода «раскрутки» при (регулярном) построении компилятора;

Слайд 30GNAT Pro – компилятор / GUI
Полная поддержка всех редакций стандарта Ады;
Полезные

расширения стандарта (в рамках, определяемых стандартом языка)
прагмы и атрибуты для «тонкого» управления связью модулей, реализованных на разных языках, доступа к машинно-зависимым характеристикам и т.п.;
Богатый набор параметров компиляции
управление уровнем оптимизации, тонкая настройка механизма генерации предупреждений и контроля стиля кодирования и др.

Исчерпывающая документация

Два варианта GUI на выбор (Ада/Си/Си++):
GPS (реализована на базе GtkAda);
GNATbench (Ada plug-in для Eclipse);

Многоплатформность
интерфейс и функциональность среды одинаковы на всех платформах, где среда реализована

Слайд 31GNAT Pro – инструментарий (1)
CodePeer – статический анализ графа потока данных

и потока управления программы, позволяющий обнаруживать такие (потенциально) опасные ситуации, как:
использование неинициализированных переменных;
переполнения (численные и переполнения структур данных);
некорректное использование указателей;
недоступный код и др.
gnatstack – статический анализ размера стека:
определение максимального стека размера для каждой точки входа;
выявление потенциально опасных вызовов, которые могут привести к неограниченному росту стека;
gnatelim – выявление неиспользуемых подпрограмм:
список неиспользуемых подпрограмм передается компилятору, что приводит к уменьшению размера исполняемого кода;

Слайд 32GNAT Pro – инструментарий (2)
gnatpp – конфигурируемый инструмент реформатирования Ада-кода;
gnatmetric –

инструмент подсчета метрик:
классические метрики (число строк, объявлений, операторов…);
метрики сложности;
объектно-ориентированные метрики;
gnatprep – препроцессор для Ада-кода;
gnatmem – выявление ситуаций, приводящих к «утечкам памяти»;
gnatcheck – контролер стиля кодирования, содержит более 60 правил, расширяемый по запросам пользователей;
gnathtml – конвертация Ада-кода в формат HTML;

возможность использования стандартного инструментария gcc (gcov, gprof);


Слайд 33SPARK – корректность программы «по построению»
(Основанная на Аде) практическая технология доказательного

программирования:
язык, объединяющий исполняемый код (подмножество Ады) и логические утверждения, позволяющие формулировать утверждения о свойствах исполняемого кода (пре- и пост-условия, инварианты циклов и др.);
Spark Examiner: инструмент проверки корректности SPARK-кода;
успешное применение в ряде индустриальных проектов;

Слайд 34SPARK – пример
Сортировка массива с доказательством корректности (из книги John Barnes,

High Integrity Software. The Spark Approach to Safety and Security. Addison-Wesley, 2003):

package Array_Utilities is
Max_Table_Size : constant := 100;
type Base_Index_Type is range 0..Max_Table_Size;
subtype Index_Type is Base_Index_Type range 1..Max_Table_Size;
type Contents_Type is range -1000 .. 1000;
type Array_Type is array (Index_Type) of Contents_Type;

--# function Ordered(A : Array_Type; L,U : Index_Type)
--# return Boolean;
--# function Perm (A, B : Array_Type) return Boolean;

procedure Sort (Table : in out Array_Type);
--# derives Table from Table;
--# post Ordered (Table, 1, Max_Table_Size) and
--# Perm (Table,Table~);
end Array_Utilities;

package body Array_Utilities is
--# function Partitioned(A : Array_Type;
--# L, M, U : Index_Type) return Boolean;

procedure Sort (Table : in out Array_Type) is
Key : Index_Type;

--# function The_Smallest (A : Array_Type;
--# L,U : Index_Type) return Index_Type;

function Find_Smallest (Arr : Array_Type; L,U: Index_Type)
return Index_Type
--# pre 1 <= L and L <= U and U <= Max_Table_Size;
--# return The_Smallest(Arr,L,U);
is
K : Index_Type;
begin
K := L;
for I in Index_Type range L + 1..U loop
if Arr (I) < Arr (K) then
K := I;
end if;
--# assert 1 <= L and L+1 <= I and
--# I <= U and U <= Max_Table_Size and
--# K in Index_Type and
--# K = The_Smallest(Arr,L,I);
end loop;
return K;
end Find_Smallest;


Слайд 35SPARK – пример (окончание)
package body Array_Utilities is
...

procedure

Swap_Elements (T : in out Array_Type;
I, J : in Index_Type)
--# derives T from T,I,J;
--# post T = T~[I => T~(J); J => T~(I)] and Perm(T,T~);
is
Temp : Contents_Type;
begin
Temp := T(I); T(I) := T(J); T(J) := Temp;
end Swap_Elements;

begin -- Sort
for Low in Index_Type range 1 .. Max_Table_Size - 1 loop
Key := Find_Smallest(Table,Low,Max_Table_Size);
if Key /= Low then
Swap_Elements(Table,Low,Key);
end if;
--# assert 1 <= Low and Low <= Max_Table_Size-1 and
--# Ordered(Table,1,Low) and
--# Partitioned(Table,1,Low,Max_Table_Size) and
--# Perm(Table,Table~);
end loop;
end Sort;
end Array_Utilities;

Слайд 36Специализированные библиотеки
AWS – Ada Web Services
библиотека для создания Web-приложений на Аде;
поддержка

протоколов SOAP, SMTP, LDAP, Jabber;
поддержка HTTPS/SSL;
PolyORB – набор решений для построения распределенных приложений;
основан на технологии CORBA;
предлагает различные решения для обеспечения безопасности коммуникаций;
позволяет создавать приложения для работы в реальном времени;
XML Ada:
анализатор текстов на XML;
Поддержка SAX 2.0 и DOM 2.0;
Поддержка Unicode (UTF-8 и UTF-16);
GtkAda – библиотека для построения графических пользовательских интерфейсов;
ASIS – Ada Semantic Interface Specification:
доступ к синтаксису и семантике программных модулей на языке Ада;
позволяет быстро разрабатывать инструменты статического анализа Ада-кода;


Слайд 37Поддержка сертификации разрабатываемых программ (1)
Многие проекты, выполняемые на основе GNAT-технологии, предполагают

сертификацию в рамках стандарта DO-178B;

Конфигурируемые библиотеки периода исполнения:
Zero Foot Print (ZFP) – минимальная библиотека, не содержащая исполняемого кода;
Certified Profile – сертифицированное расширение ZFP, достаточное для многих аэрокосмических приложений;
Ravenscar Profile – расширение ZFP, позволяющее создавать сертифицируемые многопроцессные приложения;

обоснование отсутствия переполнения стека при выполнении программы (gnatstack);

Слайд 38Поддержка сертификации разрабатываемых программ (2)
поддержка тестирования (DO 178B, уровни С, В,

А) – couverture:
контроль выполнения критериев полноты структурного тестирования разного уровня;
выполнение тестирования встраиваемого кода на инструментальной машине в режиме эмуляции;
проверка выполнения критериев полноты без инструментирования (изменения) тестируемого кода;
traceability: когда покрытие исходного кода гарантирует эквивалентное покрытие объектного кода?
контроль стиля кодирования:
gnatcheck:
набор правил, расширяемый по запросу пользователей;
квалифицированные версии для конкретных стилей кодирования;
помощь в оптимизации требований стиля кодирования;

Слайд 39Условия распространения GNAT Pro
Распространяется методом подписки на услуги AdaCore;

Подписка включает в

себя:
доступ к версии GNAT-технологии, распространяемой под лицензией GPL/GMGPL (позволяющей разрабатывать продукты, которые уже не обязаны удовлетворять GPL!);
доступ к исходным текстам всех компонент GNAT Pro, на которые распространяется подписка;
возможность регулярно получать новые релизы всех компонент технологии;
возможность пользоваться оперативной технической поддержкой в режиме 24х7х365;

Слайд 40GNAT Pro – техническая поддержка
Оперативность:
вопросы задаются по электронной почте или через

специализированный web-интерфейс (GNAT Tracker);
гарантированное время ответа – 2 рабочих дня, на практике 80% запросов получают ответ в течение одного рабочего дня.
Техническая поддержка включает:
ответы на вопросы по языкам и стандартам, реализуемым компонентами GNAT Pro (Ада, ASIS, SPARK, ...);
помощь в установке и настройке программных компонент GNAT Pro;
помощь в выборе наиболее эффективных способов использования GNAT Pro в том или ином проекте;
в случае обнаружения дефекта в технологии:
помощь в нахождении оперативных решений, позволяющих обойти дефект (workaround);
если это невозможно – предоставление версий компонент технологии с исправленными дефектами (wavefronts), такие компоненты всегда проходят стандартную процедуру контроля качества;
Стоимость годовой подписки зависит от набора компонент и решений GNAT Pro, стоимость базового годового контракта сопоставима с годовой зарплатой одного разработчика.

Слайд 41GNAT – если не Pro, то что (1)?
Кроме GNAT Pro, AdaCore

предлагает GNAT GPL:
набор основных компонент GNAT-технологии без каких-либо ограничений по функциональности;
проходит ту же процедуру контроля качества, что и GNAT Pro;
доступен (абсолютно бесплатно) для MS Windows, Microsoft .NET, Linux Mac OS, Solaris;
включает GNAT-on-MINDSTORMS (среда программирования роботов Lego MINDSTORMS)
распространяется полностью под GPL (позволяет создавать только GPL-программы);
GAP (GNAT Academic Program): версия GNAT для университетов
GNAT GPL + (ограниченная) техническая поддержка + обмен информацией между участниками программы;
более 150 университетов из 25 стран;
Белоруссия – Высший государственный колледж связи;
РФ - Московский, Ярославский, Томский университеты;
Украина – Национальный технический университет (Киев), Черновицкий и Харьковский университеты);

Слайд 42GNAT – если не Pro, то что (2)?
GNAT из других источников?


Исходные тексты основных компонентов GNAT-технологии доступны;
Помимо AdaCore, GNAT собирается и распространяется другими людьми и организациями (в частности, FSF);
этим может заняться любой желающий ☺;
существуют модификации, разработанные вне AdaCore (например, есть реализации для архитектур, не поддерживаемых AdaCore);
На ваш страх и риск…
мы ничего не знаем о согласованности версий используемых компонент, процедуре сборки, применяемой процедуре контроля качества и т.п.
и поэтому мы не в состоянии не только осуществлять техническую поддержку подобных продуктов, но даже отвечать на какие-либо вопросы по ним
но мы принимаем к сведению и анализируем сообщения об обнаруженных ошибках…


Слайд 43Хотите узнать больше:
http://www.ada-ru.org/index.html , http://ru.ada-community.org :
все по-русски, включая книгу по

языку Ада-95;
много полезных ссылок;
http://www.adacore.com
помимо описания GNAT-технологии, богатый набор справочных материалов по языку и практических советов по его использованию;
http://www.adaic.com
стандарт Ады (все редакции + версии с комментариями), сопутствующие стандарты (ASIS), обоснование проектных решений, ссылки на учебники;

Слайд 44Итак:
Ада является существенным компонентом мировой программной индустрии;

Ада активно и успешно используется

в том числе и для разработки встроенных систем с критическими требованиями к надежности;

Отечественные специалисты по ИТ должны иметь достаточно информации о современном состоянии Ада технологий, чтобы принимать осознанные решения относительно их использования или неиспользования в тех или иных проектах;

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика