"Адское" программирование Ada-95 -Компилятор GNAT




Глава1. Сюрпризы переводной терминологии


    Пакет Ada.Text_IO
    Пакет Ada.Text_IO Основой организации текстового ввода/вывода Ады является пакет Ada.Text_IO и коллекция его дочерних пакетов.Этот пакет обеспечивает средства, которые позволяют манипулировать тек...
    Искючения ввода/вывода
    Искючения ввода/вывода Все средства организации ввода/вывода Ады полагаются на механизм исключений для сообщения об ошибках, которые возникли в процессе выполнения какой-либо операции ввода/вывода...
    Файлы ввода/вывода по умолчанию
    Файлы ввода/вывода по умолчанию В тех случаях, когда для осуществления ввода/вывода нет четкого указания внешних файлов используются файлы ввода/вывода по умолчанию.При этом, соответствующие файл...
    Настраиваемые пакеты текстового ввода/вывода
    Настраиваемые пакеты текстового ввода/вывода Для поддержки текстового ввода/вывода численных данных и данных перечислимых типов Ада предусматривает набор настраиваемых пакетов текстового ввода/выв...
    Ввод/вывод двоичных данных
    Ввод/вывод двоичных данных Как правило, современные производительные системы обработки больших объемов данных не используют текст для сохранения информации в своих файлах.Это значит, что вместо те...
    Пакет Ada.Sequential_IO
    Пакет Ada.Sequential_IO Стандартный настраиваемый пакет Ada.Sequential_IO позволяет нам создавать файлы, состоящие из компонентов любого типа.При этом, должно соблюдаться единственное условие: тип...
    Пакет Ada.Direct_IO
    Пакет Ada.Direct_IO Пакет Ada.Direct_IO построен поверх пакета Ada.Sequential_IO .Он предусматривает возможность прямого обращения к необходимой записи в файле, определения размера файла и определ...
    Потоки ввода/вывода
    Потоки ввода/вывода Стандарт Ada95 обогатил средства ввода/вывода Ады возможностью использования гетерогенных (состоящих из различных по составу, свойствам, происхождению частей) потоков ввода/выв...
    Параметры командной строки
    Параметры командной строки Во время выполнения программы существует возможность получения доступа к аргументам, которые указаны в командной строке запуска программы на выполнение.Такая возможность...
    Переменные окружения программы
    Переменные окружения программы Для поддержки организации взаимодействия с переменными окружения операционной системы, реализация компилятора GNAT содержит дополнительный пакет Ada.Command_Line.Env...
    Ссылочные типы (указатели)
    Ссылочные типы (указатели) До настоящего момента мы предполагали, что структуры данных и их размещение в пространстве памяти строго фиксировано и не изменно, то есть статично.Поэтому, такие данные...
    Ссылочные типы для динамической памяти
    Ссылочные типы для динамической памяти Ссылочные типы для динамической памяти известны со времен стандарта Ada-83 и благополучно поддерживаются в стандарте Ada-9Они могут быть использованы для ссы...
    Элементарные сведения: описание, создание, инициализация
    Элементарные сведения: описание, создание, инициализация Предположим, что у нас есть следующие описания: type Person_Name is new String (1 .. 4); type Person_Age is Integer range 1 .. 150; type Pe...
    Структуры данных со ссылками на себя
    Структуры данных со ссылками на себя В предыдущих примерах мы рассмотрели то как размещать обычные типы данных в динамической области памяти и выполнять их инициализацию.Однако, для того чтобы стр...
    Освобождение пространства динамической памяти
    Освобождение пространства динамической памяти После того как мы рассмотрели как распределять пространство динамической памяти и выполнять инициализацию объектов, осталось рассмотреть как осуществл...
    Пулы динамической памяти
    Пулы динамической памяти Обычно, все объекты ссылочного типа определенные пользователем, используют один, общий для всей программы, пул динамической памяти.Однако, согласно стандарта Ada95, допуск...
    Проблемы обусловленные применением ссылочных типов
    Проблемы обусловленные применением ссылочных типов Несмотря на то, что в сравнении с традиционными указателями ссылочные типы Ады обладают свойствами которые помогают обеспечить надежность разраба...
    Обобщенные ссылочные типы
    Обобщенные ссылочные типы Рассмотренные нами ссылочные типы могут быть использованы только как средство косвенного доступа к объектам которые размещаются в области динамической памяти.Однако, быва...
    Правила области видимости для обобщенных ссылочных типов
    Правила области видимости для обобщенных ссылочных типов В целях обеспечения надежности, на использование обобщенных ссылочных типов накладываются некоторые дополнительные ограничения.Так, область...
    Ссылочные типы для подпрограмм
    Ссылочные типы для подпрограмм Также как и обобщенные ссылочные типы, ссылочные типы для подпрограмм не доступны в стандарте Ada8Они являются нововведением, которое определил выход стандарта Ada9...
    Правила области видимости ссылочных типов для подпрограмм
    Правила области видимости ссылочных типов для подпрограмм Ссылочные типы для подпрограмм используют те же самые правила области видимости, что и обобщенные ссылочные типы.Таким образом, ссылочные...
    Низкоуровневая средства работы со ссылочными типами и физическими адресами памяти
    Низкоуровневая средства работы со ссылочными типами и физическими адресами памяти Для организации работы с динамическими данными и динамической памятью в большинстве приложений достаточно тех меха...
    Тэговые типы (tagged types)
    Тэговые типы ( tagged types ) Тэговые типы являются нововведением стандарта Ada9Они дополняют традиционную систему типов языка Ада, и позволяют обеспечить полную поддержку объектно-ориентированног...
    Механизмы наследования
    Механизмы наследования Согласно концепции производных типов Ады, которая известна со времен стандарта Ada-83, производный тип наследует структуру данных и операции типа-предка.Позже, для работы с...
    Расширение существующего типа данных
    Расширение существующего типа данных Как было сказано ранее, тэговые типы, в отличие от обычных не тэговых типов, позволяют осуществлять расширение структуры данных типа предка при наследовании.Ра...
    Описание переменных и преобразование типов
    Описание переменных и преобразование типов В отличие от других объектно-ориентированных языков программирования, Ада не использует каких либо специальных конструкторов, поэтому объекты (иначе пере...
    Примитивные и не примитивные операции над тэговыми типами Наследование операций
    Примитивные и не примитивные операции над тэговыми типами Наследование операций Концепция примитивной операции типа имеет важное значение в Аде.В общем случае, примитивная операция над типом T - э...
    "Пустые" записи (null record) и расширения
    "Пустые" записи ( null record ) и расширения Достаточно часто возникает необходимость создания типа который не имеет полей (атрибутов), а имеет только операции (методы). Как правило, подобный тип...
    Абстрактные типы и подпрограммы
    Абстрактные типы и подпрограммы В большинстве случаев, типы которые разрабатываются как родоначальники иерархий производных типов не предназначены для непосредственного описания объектов (переменн...
    Динамическое связывание и полиморфизм
    Динамическое связывание и полиморфизм Обеспечение полиморфности поведения объектов полагается на механизм который осуществляет связывание места вызова подпрограммы с конкретной реализацией (телом)...
    Надклассовые типы (wide class types)
    Надклассовые типы ( wide class types ) Все типы, производные и расширенные (прямо или косвенно) от определенного тэгового типа T, принадлежат одному иерархическому образованию класса, корнем котор...
    Проверка типа объекта во время выполнения программы
    Проверка типа объекта во время выполнения программы В процессе выполнения программы можно осуществить проверку объекта на принадлежность его к какому-либо индивидуальному типу путем использования...
    Динамическая диспетчеризация
    Динамическая диспетчеризация При внимательном рассмотрении показанной ранее реализации процедуры Show не трудно заметить, что хотя она и использует средства тэговых типов, позволяющие определить ф...
    Модель механизма диспетчеризации
    Модель механизма диспетчеризации Для лучшего понимания особенностей использования тэговых типов и свойств диспетчеризации вызовов операций, может оказаться полезным рассмотрение возможной модели р...
    Вызов переопределенной операции предка
    Вызов переопределенной операции предка Достаточно часто, реализация примитивной операции производного типа нуждается в вызове переопределенной примитивной операции предка.Предположим, что для типо...
    Динамическая передиспетчеризация
    Динамическая передиспетчеризация Известно, что производный тип всегда может переопределить примитивную операцию своего предка, то есть, предусмотреть свою собственную реализацию примитивной операц...
    Двойная диспетчеризация
    Двойная диспетчеризация Бывают случаи, когда при описании в одном пакете двух различных тэговых типов возникает желание описать подпрограмму которая принимает параметры обоих тэговых типов.В подоб...
    Стандартные низкоуровневые средства, пакет Ada.Tags
    Стандартные низкоуровневые средства, пакет Ada.Tags Стандартным низкоуровневым средством работы с тэговыми типами является пакет Ada.Tags .Спецификация этого пакета, согласно стандарта, имеет след...
    Общие сведения
    Общие сведения Для того чтобы обеспечить сохранение абстракции, при автоматическом распределении и освобождении системных ресурсов, Ada95 предусматривает контролируемые типы.Контролируемыми типами...
    Управление динамическими объектами
    Управление динамическими объектами Одним из широко распространенных случев использования объектов контролируемых типов являестя решение проблемы "утечки" памяти при работе с динамическими данными....
    Счетчик использования
    Счетчик использования Бывают случаи, когда при обработке множества объектов какого-либо типа данных необходимо использование определенного ресурса системы.Примером подобной ситуации может служить...
    Блокировка ресурса
    Блокировка ресурса Каноническим примером использования инициализации (Initialize) и очистки (Finalize) совместно со ссылочным дискриминантом может служить следующий пример организации монопольного...
    Отладка контролируемых типов Некоторые рекомендации
    Отладка контролируемых типов Некоторые рекомендации Сложность отладки и проверки контролируемых типов заключается в том, что процедуры Initialize, Finalize и Adjust вызываются автоматически, без к...
    Многозадачность
    Многозадачность Встроенная поддержка многозадачности является уникальной и широко известной особенностью языка программирования Ада, которая выгодно отличает его от большинства современных языков...
    Типы и объекты задач
    Типы и объекты задач Конструкция задачи обладает свойствами, которые характерны для пакетов, процедур и структур данных: Подобно пакетам, задача имеет спецификацию и тело, однако она не может быть...
    Инструкции задержки выполнения (delay statements)
    Инструкции задержки выполнения ( delay statements ) При внимательном рассмотрении исходного текста последнего примера можно обнаружить, что после инструкции вывода сообщения приветствия располагае...
    Динамическое создание объектов задач
    Динамическое создание объектов задач Ада предоставляет возможность динамически порождать объекты задач с помощью new , что может оказаться полезным, когда необходимо множество объектов задач одног...
    Принудительное завершение abort
    Принудительное завершение abort Ада позволяет принудительно завершать выполнения объекта задачи.Это может быть выполнено с помощью инструкции прекращения, которая может иметь следующий вид: abort...
    Приоритеты задач
    Приоритеты задач Каждая задача Ады может обладать своим собственным приоритетом выполнения, который задается с помощью директивы компилятора Priority: pragma Priority ( expression ); Непосредствен...
    Взаимодействие задач
    Взаимодействие задач Показанные ранее примеры многозадачных программ демонстрировали только способность задач выполняться одновременно.При этом организация взаимодействия различных задач между соб...
    Концепция рандеву
    Концепция рандеву Как один из механизмов обеспечения надежного межзадачного обмена данными и взаимной синхронизации работы задач, Ада предоставляет механизм рандеву.Основополагающая идея механизма...
    Описание входов
    Описание входов Чтобы некоторая задача-клиент могла инициировать рандеву с задачей-сервером, описание спецификации задачи-сервера должно содержать описание соответствующего входа.Следует заметить,...
    Простое принятие обращений к входам
    Простое принятие обращений к входам Для организации взаимодействия задач, кроме описаний входов, в спецификации задачи-сервера, тело задачи-сервера должно содержать инструкции принятия рандеву, ко...
    Простой вызов входа
    Простой вызов входа Задача-клиент осуществляет вызов входа задачи-сервера, идентифицируя как объект задачи-сервера, так и необходимый вход задачи-сервера.Для демонстрации описаний простых вызовов...
    Селекция принятия рандеву
    Селекция принятия рандеву Предположим, что нам необходима задача-сервер, которая будет обслуживать множество задач-клиентов.Предположим также, что задача-сервер должна иметь не один, а целое множе...
    Селекция вызова рандеву
    Селекция вызова рандеву Инструкции отбора select могут использоваться не только для селекции принятия рандеву в задаче-сервере, но и для селекции вызова рандеву в задаче-клиенте.В подобных случаях...
    Идентификация задач и атрибуты
    Идентификация задач и атрибуты Каждая задача (объект) Ады имеет свой собственный уникальный идентификатор, с помощью которого она может быть идентифицирована в других задачах.Механизм, с помощью к...
    Разделяемые (общие) переменные
    Разделяемые (общие) переменные Ада позволяет задачам совместно использовать разделяемые (общие) переменные (объекты, ресурсы), которые располагаются в общей памяти и могут быть необходимы как для...
    Защищенные модули (protected units)
    Защищенные модули ( protected units )...
    Проблемы механизма рандеву
    Проблемы механизма рандеву Несмотря на обилие возможностей, предоставляемых моделью механизма рандеву Ada83, который предусматривает развитый высокоуровневый подход для синхронизации задач, позвол...
    Защищенные типы и объекты Защищенные подпрограммы
    Защищенные типы и объекты Защищенные подпрограммы Защищенные модули (типы и объекты) Ады инкапсулируют данные и позволяют осуществлять доступ к ним с помощью защищенных подпрограмм или защищенных...
    Защищенные входы и барьеры
    Защищенные входы и барьеры По аналогии со входами задач, защищенный модуль может иметь защищенные входы.Действия, выполняемые при вызове защищенного входа, предусматриваются в его теле.Защищенные...
    Особенности программирования защищенных входов и подпрограмм
    Особенности программирования защищенных входов и подпрограмм При программировании действий, выполняемых в телах защищенных входов и подпрограмм, следует учитывать, что время выполнения кода внутри...
    Атрибуты входов защищенных объектов
    Атрибуты входов защищенных объектов Входы защищенных объектов имеют атрибуты, назначение которых подобно назначению атрибутов для входов задач: E ' Caller - Возвращает значение типа Task_ID, котор...
    Перенаправление requeue
    Перенаправление requeue...
    Проблема предпочтительного управления
    Проблема предпочтительного управления В процессе создания некоторого сложного сервера или планировщика для определения правил очередности предоставления сервиса, предусмотренного телом защищенного...
    Инструкция перенаправления очереди requeue
    Инструкция перенаправления очереди requeue С целью поддержки построения необходимых управляющих алгоритмов, позволяющих разделить обработку какого-либо сервиса на несколько (два и более) этапов и...
    Цикл жизни задачи
    Цикл жизни задачи До сих пор, во всех примерах, мы подразумевали только то, что создание задач осуществляется на этапе элаборации, и никак не рассматривали, что происходит с задачами в процессе их...
    Создание задачи
    Создание задачи Напомним, что тип задачи может рассматриваться как шаблон для создания реальных объектов-задач.Типы и объекты задач могут быть описаны в любой описательной части, включая тело зада...
    Активация задачи
    Активация задачи Для процесса активации задач приняты следующие правла: Для статических задач, активация начинается немедленно после окончания процесса элаборации описательной части в которой эти...
    Завершение задачи
    Завершение задачи Перед выходом, владелец ( master ) осуществляет выполнение конструкций, которые включают очистку ( finalization ) локальных объектов после их использования (и после ожидания всех...
    Прерывания
    Прерывания Ада позволяет программисту ассоциировать определяемые пользователем обработчики прерываний с некоторыми прерываниями системы.Хотя обработчик прерываний может быть защищенной процедурой...
    Модель прерываний Ады
    Модель прерываний Ады Стандарт описывает следующую модель прерывания: Прерывание представляет класс событий, которые детектируются оборудованием или системным программным обеспечением. Появление (...
    Защищенные процедуры обработки прерываний
    Защищенные процедуры обработки прерываний Ада предусматривает два стиля установки обработчиков прерываний: вложенный ( nested ) и не-вложенный ( non-nested ).При вложенном стиле, обработчик прерыв...
    Пакет Ada.Interrupts
    Пакет Ada.Interrupts Не-вложенная установка и удаление обработчиков прерываний полагается на дополнительные средства стандартного пакета Ada.Interrupts спецификация которого имеет следующий вид: p...
    Приоритеты
    Приоритеты Для установки приоритета защищенного объекта может быть использована директива компилятора Interrupt_Priority, которая имеет следующий вид: pragma Interrupt_Priority ( expression ); Отс...
    Интерфейс с другими языками
    Интерфейс с другими языками Обычно, не зависимо от того насколько хорош язык программирования, необходимо учитывать, что он должен сосуществовать с программным обеспечением которое написано с помо...
    Связь с другими языками в Ada83
    Связь с другими языками в Ada83 Стандартным средством взаимодействия с другими языками в Ada83 является директива компилятора Interface, которая позволяет вызывать подпрограммы написанные на други...
    Связь с другими языками в Ada95
    Связь с другими языками в Ada95 Стандарт Ada95 внес в средства взаимодействия Ады с другими языками программирования некоторые изменения, которые облегчают использование Ады совместно с программны...
    Директивы компилятора
    Директивы компилятора Стандарт Ada95 содержит следующее описание стандартных директив компилятора Import, Export, Convention и Linker_Options: pragma Import( [Convention =] идентификатор_соглашени...
    Интерфейсные пакеты
    Интерфейсные пакеты Стандарт Ada95 определяет интерфейс взаимодействия с языками программирования C , COBOL и Fortran .Для облегчения осуществления связи программ Ады с этими языками программирова...
    Взаимодействие с программами написанными на C
    Взаимодействие с программами написанными на C Обсуждение взаимодействия с программами написанными на C полагается на описания которые содержатся в стандартном пакете Interfaces.C .В частности, это...
    Численные и символьные типы
    Численные и символьные типы С помощью использования следующих типов, переменные или результаты выражений Ады могут быть конвертированы в форму, совместимую с языком C , и обратно: целочисленные ти...
    Строки языка C
    Строки языка C Описание массива символов языка C имеет следующий вид: type Char_Array is array (Size_T range ) of aliased Char; Для представления строк, в языке C используются массивы символов зак...
    Примеры организации взаимодействия с C
    Примеры организации взаимодействия с C Простым примером импорта C -функции может служить пример использования функции read системы UNIX в процедуре, написанной на Аде: procedure Read( File_descrip...
    Низкоуровневые средства для системного программирования
    Низкоуровневые средства для системного программирования Кроме богатого набора традиционных средств абстракции данных, Ада, в отличие от многих современных языков программирования, предоставляет ря...
    Спецификация внутреннего представления данных
    Спецификация внутреннего представления данных С помощью спецификации представления, для идентификаторов любого перечислимого типа можно указать специфические значения для внутреннего представления...
    Привязка объекта к фиксированному адресу памяти
    Привязка объекта к фиксированному адресу памяти В некоторых случаях может потребоваться выполнение чтения или записи по фиксированному абсолютному адресу памяти.Простым примером подобной ситуации...
    Организация доступа к индивидуальным битам
    Организация доступа к индивидуальным битам Организацию доступа к индивидуальным битам можно рассмотреть на примере операционной системы MS-DOS, в которой фиксированный адрес памяти 16#0417# содерж...








Начало    



Книжный магазин