1 / 44

Ада-технологии в 21 веке – не миф, а реальность

Ада-технологии в 21 веке – не миф, а реальность ( Язык Ада: технологии, применение, стандартизация, возможности для встроенных систем ). Сергей Рыбин rybin@adacore.com. Москва, 28 октября 2010 г. Еще одна попытка разорвать порочный круг….

Download Presentation

Ада-технологии в 21 веке – не миф, а реальность

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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) • Полезные «мелочи» procedureP1is ... procedureP2is ... begin ... endP2; begin ... Bl1 : begin ... Bl2 : begin ... endBl2; ... endBl1; endP1; record I : Integer; end record; ... ifCondition then for I in 1 .. 10loop caseValue 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. Язык программирования и надежность– практика.Строгая типизация в Аде:(«Если нельзя, но очень хочется, то можно!» ((С))) • Явное преобразование типа – использование объекта данных в другой (родственной) роли; • Иногда возникает необходимость преобразования типа между типами, вообще не имеющими друг к другу никакого отношения… • Это можно сделать, но для этого придется специально настроить вот такой шаблон: generictypeSource(<>)islimitedprivate;typeTarget(<>)islimitedprivate; functionAda.Unchecked_Conversion(S:Source)returnTarget; и применить результат настройки к нужным объектам (то есть, сделать такое случайно, «не заметив», невозможно).

  17. Язык программирования и надежность– практика. Подтипы и исключительные ситуации. • Тип данных – это: • концептуально - содержательная роль объектов данных в программе; • технически – множество значений + совокупность операций; • Подтип – это ограничение множества значений в рамках той же содержательной роли; • Реализация сама проверяет, что присваиваемое значение попадает в подтип, определенный для данного объекта данных (принадлежит подтипу); • В случае нарушения подтипового ограничения при выполнении программы возбуждается предопределенное ограничение Constraint_Error; 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 Автопилот;

  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; Язык программирования и надежность– практика. Проблемы при сборке программы package P2 is function F2 return Integer; end P2; with P2; package body P1 is X1 : Integer := P2.F2; function F1 return Integer is begin return X1; end F1; end P1; Реализация Ады обязана определить, что не существует корректного порядка включения кода, порождаемого модулями 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Terminating 1with 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

  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; -- Использование буфера: -- * возможно только в режиме -- взаимного исключения; -- * тупики исключены; My_Buffer : Bounded_Buffer;... My_Buffer.Put (Something);...My_Buffer.Get (To_Something); protected body Bounded_Buffer isentry Put (X : in Item) when Count < MaxisbeginA (I) := X; I := I mod Max + 1; Count := Count + 1;end Put;entry Get (X : out Item) when Count > 0isbeginX := A(J); J := J mod Max + 1; Count := Count - 1;end Get; end Bounded_Buffer;

  26. GNAT – реализация Ады 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); версии, подготовленные, собранные и распространяемые другими людьми, сообществами, организациями…

  27. 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 GNAT Pro – поддерживаемые платформы

  28. Список клиентов (фрагмент): 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 – встроенное ПО для компонент международной космической станции; GNAT Pro – индустриальное использование Вся информация – сhttp://www.adacore.com/home/company/customers и http://www.adacore.com/home/company/customers/featured-projects

  29. GNAT Pro - компилятор Ada front-end (реализован на 95% на Аде + 5% Си-кода) + общий кодогенератор GNU GCC; общий кодогенератор существенно облегчает работу над мультиязыковыми проектами; GNAT Pro – среда разработки на Аде/Си/Си++ Существует как в обычном (native), так и в кросс-вариантах; Удовлетворяет (как минимум!) стандартным индустриальным требованиям (ресурсоемкость, скорость компиляции, качество кода): косвенное доказательство эффективности – использование метода «раскрутки» при (регулярном) построении компилятора;

  30. GNAT Pro – компилятор / GUI Полная поддержка всех редакций стандарта Ады; Полезные расширения стандарта (в рамках, определяемых стандартом языка) прагмы и атрибуты для «тонкого» управления связью модулей, реализованных на разных языках, доступа к машинно-зависимым характеристикам и т.п.; Богатый набор параметров компиляции управление уровнем оптимизации, тонкая настройка механизма генерации предупреждений и контроля стиля кодирования и др. Исчерпывающая документация Два варианта GUI на выбор (Ада/Си/Си++): GPS (реализована на базе GtkAda); GNATbench (Ada plug-in для Eclipse); Многоплатформность интерфейс и функциональность среды одинаковы на всех платформах, где среда реализована

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

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

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

  34. Сортировка массива с доказательством корректности (из книги 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; SPARK – пример

  35. 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; SPARK – пример (окончание)

  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;

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

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

  42. GNAT – если не 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. Итак: • Ада является существенным компонентом мировой программной индустрии; • Ада активно и успешно используется в том числе и для разработки встроенных систем с критическими требованиями к надежности; • Отечественные специалисты по ИТ должны иметь достаточно информации о современном состоянии Ада технологий, чтобы принимать осознанные решения относительно их использования или неиспользования в тех или иных проектах;

More Related