Copyright (C) А.Гавва V-0.4w май 2004

1. Директивы компилятора (pragma).

В данном приложении приводится краткое описание директив компилятора. Более подробное описание использования этих директив содержится в справочных руководствах по языку программирования Ада и по реализации компилятора GNAT.

1.1 Стандартные директивы Ады

Список стандартных директив компилятора Ады приводится в приложении L (Annex L) руководства по языку программирования Ада (RM-95).

All_Calls_Remote[(library_unit_name)];  -  Для выполнения вызова подпрограмм пакета всегда использовать механизм RPC (Remote Procedure Call - вызов удаленной подпрограммы)
   
Asynchronous(local_name);  -  Вызов подпрограммы производится асинхронно. При этом, активируется выполнение удаленной подпрограммы и, не дожидаясь её завершения, происходит продолжение выполнения вызвавшей подпрограммы.
   
Atomic(local_name);  -  Чтение/запись указанного объекта должно выполняться без прерываний
   
Atomic_Components(array_local_name);  -  Чтение/запись указанного массива компонентов должно выполняться без прерываний
   
Attach_Handler(handler_name, expression);  -  Установить процедуру обработки прерывания
   
Controlled(first_subtype, local_name);  -  Отключает "сборку мусора" для указанного типа данных.
(не имеет эффекта в реализации компилятора gnat)
   
Convention(
 [Convention =>] convention_identifier,
 [Entity=>] local_name);
 -  Использовать соответствующие языковые соглашения для указанного объекта
   
Discard_Names[([On =>] local_name)];  -  Отказаться от ASCII-представления объекта, которое используется атрибутом 'Img
   
Elaborate(
 library_unit_name{, library_unit_name});
 -  Предварительно выполнить элаборацию указанного пакета
   
Elaborate_All(
 library_unit_name{, library_unit_name});
 -  Предварительно выполнить элаборацию всех спецификаций и тел пакетов от которых зависит указанный модуль
   
Elaborate_Body[(library_unit_name)];  -  Выполнить элаборацию тела указанного модуля сразу после элаборации его спецификации
   
Export(
 [Convention =>] convention_identifier,
 [Entity =>] local_name[,
  [External_name =>] string_expression]
 [, [Link_Name =>] string_expression]);
 -  Экспортировать объект из Ада-программы для использования в другом языке программирования
   
   
Import(
 [Convention =>] convention_identifier,
 [Entity =>] local_name[,
  [External_name =>] string_expression]
 [, [Link_Name =>] string_expression]);
 -  Импортирует объект, описанный средствами другого языка программирования, для использования его в Ада-программе
   
   
Inline(name{, name});  -  Указывает подпрограмму при обращении к которой должна осуществляться встроенная подстановка машинного кода этой подпрограммы вместо выполнения стандартного вызова этой подпрограммы (так называемая inline-подстановка).
   
Inspection_Point
 [(object_name{, object_name})];
 -  В данной точке программы должна быть обеспечена возможность чтения значения указанного объекта (необходимо для сертификации правильности кода).
Interrupt_Handler(handler_name);  -  Указывает процедуру-обработчик прерывания
   
Interrupt_Priority([expression]);  -  Определяет приоритет задачи и/или защищенного объекта для случаев возникновения блокировки
Linker_Options(string_expression);  -  Передает строку опций для компоновщика (linker).
   
List(identifier);  -  Вывести листинг исходного текста после компиляции.
   
Locking_Policy(policy_identifier);  -  Определяет как защищенный объект будет заблокирован при возникновении блокировки.
   
Normalize_Scalars;  -  Устанавливать, когда это возможно, значения скалярных переменных в недопустимое значение
   
Optimize(identifier);  -  Указать как должны быть оптимизированы инструкции
   
Pack(first_subtype_local_name);  -  Указывает, что тип данных должен быть упакован
   
Page;  -  Указывает на начало новой страницы в листинге программы
   
Preelaborate(library_unit_name);  -  Указывает на необходимость предварительной элаборации указаанного пакета
   
Priority(expression);  -  Определяет приоритет задачи
   
Pure[(library_unit_name)];  -  Указывает, что пакет "чистый" (pure).
   
Queuing_Policy(policy_identifier);  -  Определяет правило сортировки задач и/или защищенных объектов при постановке в очередь.
Remote_Call_Interface[(library_unit_name)];  -  Подпрограммы пакета могут вызываться с использованием механизма RPC (Remote Procedure Call - вызов удаленной подпрограммы)
   
Remote_Types[(library_unit_name)];  -  Пакет определяет типы, предназначенные для использования совместно с механизмом RPC (Remote Procedure Call - вызов удаленной подпрограммы)
   
Restrictions(restriction{, restriction});  -  Отключает некоторые языковые средства.
   
Reviewable;  -  Предусматривает профилирование во время выполнения (подобно gprof).
   
Shared_Passive[(library_unit_name)];  -  Используется для совместного использования глобальных данных между разными RPC-разделами распределенной программы.
   
Storage_Size(expression);  -  Указывает общий размер пространства стека для задачи.
   
Suppress(identifier[, [On =>] name]);  -  Отключает специфические проверки для общих исключений.
   
Task_Dispatching(policy_identifier);  -  Определяет, для задачи, правила сортировки вызовов при диспетчеризации (например, FIFO_Within_Priorities).
   
Volatile(local_name);  -  Указывает, что значение переменной может изменяться в непредсказуемые моменты, вне зависимости от работы программы.
   
Volatile_Components(array_local_name);  -  Указывает, что значение массива компонентов может изменяться в непредсказуемые моменты, вне зависимости от работы программы.

1.2 Директивы определенные в реализации компилятора GNAT

Abort_Defer;  -  откладывает принудительное завершение до конца блока инструкций (должна быть помещена в начале блока инструкций)
   
Ada_83;  -  использовать при компиляции исходного текста соглашения стандарта Ada83, даже если переключатели опций компилятора указывают обратное
   
Ada_95;  -  использовать при компиляции исходного текста соглашения стандарта Ada95, даже если переключатели опций компилятора указывают обратное
   
Annotate(
 identifier{, name|expression});
 -  Добавить дополнительную информацию для внешних инструментальных средств
   
Assert(
 boolean_expression
 [, static_string_expression]);
 -  Вставить условие контрольной проверки
   
Ast_Entry(entry_identifier);  -  Реализована только для OpenVMS
   
C_Pass_By_Copy(
 [Max_Size =>] static_integer_expression);
 -  При вызове функции Си, использовать передачу параметра по значению (не по ссылке), если это возможно
   
Comment(static_string_expression);  -  То же самое, что и Ident
   
Common_Object(
   [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Size =>] external_symbol] )
 -  Для Фортрана. Создать переменную, которая использует общее пространство
   
Complex_Representation(
 [Entity =>] local_name);
 -  Использовать формат комплексных чисел gcc (для повышения скорости вычислений)
   
Component_Alignment(
  [Form =>] alignment_choice
 [, [Name =>] type_local_name]);
 -  Указывает как должно осуществляться выравнивание компонентов записи
   
CPP_Class([Entity =>] local_name);  -  Трактовать запись или тэговую запись как класс Си++
   
CPP_Constructor(
 [Entity =>] local_name);
 -  Трактовать импортируемую функцию как конструктор класса Си++
   
CPP_Destructor(
 [Entity =>] local_name);
 -  Трактовать импортируемую функцию как деструктор класса Си++
   
CPP_Virtual(
  [Entity =>] entity,
 [, [Vtable_Ptr =>] vtable_entity,]
 [, [Position =>] static_integer_expression]);
 -  Импортировать виртуальную функцию Си++
   
CPP_Vtable(
  [Entity =>] entity,
 [, [Vtable_Ptr =>] vtable_entity,]
 [, [Entry_Count =>] static_integer_expression]);
 -  Определить таблицу виртуальных функций
   
Debug(procedure_call_statement);  -  Определить вызов отладочной процедуры
   
Eliminate([Unit_Name =>] identifier);  -  Указать объект который не используется программой. Создается утлитой gnatelim
   
Export_Exception(
  [Internal =>] local_name,
 [, [External =>] external_symbol,]
 [, [Form =>] Ada | VMS]
 [, [Code =>] static_integer_expression]);
 -  Реализована только для OpenVMS
   
Export_Function(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Parameter_Types =>] parameter_types]
 [, [Result_Type =>] result_subtype_mark]
 [, [Mechanism =>] mechanism]
 [, [Result_Mechanism =>] mechanism_name]);
 -  Экспортировать Ада-функцию с указанием дополнительной информации по отношению к информации представленной директивой Export
   
Export_Object(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Size =>] external_symbol]);
 -  Экспортировать тэговую запись Ады с указанием дополнительной информации по отношению к информации представленной директивой Export
   
Export_Procedure(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Parameter_Types =>] parameter_types]
 [, [Result_Type =>] result_subtype_mark]
 [, [Mechanism =>] mechanism]);
 -  Экспортировать Ада-процедуру с указанием дополнительной информации по отношению к информации представленной директивой Export
   
Export_Valued_Procedure(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Parameter_Types =>] parameter_types]
 [, [Result_Type =>] result_subtype_mark]
 [, [Mechanism =>] mechanism]);
 -  Экспортировать Ада-функцию обладающую побочными эффектами с указанием дополнительной информации по отношению к информации представленной директивой Export
   
Extend_System([Name =>] identifier);  -  устарела
   
External_Name_Casing(
 Uppercase | Lowercase
 [, Uppercase | Lowercase | As_Is]);
 -  Установить режим перевода в символы верхнего регистра для импорта в регистрозависимый язык. Может быть установлено в Uppercase, Lowercase или As_Is (по-умолчанию для gnst).
   
Finalize_Storage_Only(
 first_subtype_local_name);
 -  Не выполнять очистку (Finalize) для объектов описанных на уровне библиотеки. Изначально предназначено для внутреннего использования в реализации компилятора gnat.
   
Float_Representation(float_rep);  -  Реализована только для OpenVMS
   
Ident(static_string_expression);  -  Строка идентификации объектного файла (в Linux, значения не имеет)
   
Import_Exception(
  [Internal =>] local_name,
 [, [External =>] external_symbol,]
 [, [Form =>] Ada | VMS]
 [, [Code =>] static_integer_expression]);
 -  Реализована только для OpenVMS
   
Import_Function(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Parameter_Types =>] parameter_types]
 [, [Result_Type =>] result_subtype_mark]
 [, [Mechanism =>] mechanism]
 [, [Result_Mechanism =>] mechanism_name]
 [, [First_Optional_Parameter =>] identifier]);
 -  Импортирует функцию, описанную средствами другого языка программирования, для использования ее в Ада-программе. При этом указывает дополнительную информацию по отношению к информации представленной директивой Import.
   
Import_Object(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Size =>] external_symbol]);
 -  Импортирует объект, описанный средствами другого языка программирования, для использования его в Ада-программе. При этом указывает дополнительную информацию по отношению к информации представленной директивой Import.
   
Import_Procedure(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Parameter_Types =>] parameter_types]
 [, [Mechanism =>] mechanism]
 [, [First_Optional_Parameter =>] identifier]);
 -  Импортирует процедуру, описанную средствами другого языка программирования, для использования ее в Ада-программе. При этом указывает дополнительную информацию по отношению к информации представленной директивой Import.
   
Import_Valued_Procedure(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Parameter_Types =>] parameter_types]
 [, [Mechanism =>] mechanism]
 [, [First_Optional_Parameter =>] identifier]);
 -  Импортирует функцию обладающую побочными эффектами, которая описана средствами другого языка программирования, для использования ее в Ада-программе. При этом указывает дополнительную информацию по отношению к информации представленной директивой Import.
   
Inline_Always(name[, name]);  -  Указывает, на необходимость выполнения межмодульной inline-подстановки не зависимо от состояния переключателей опций компилятора.
   
Inline_Generic(generic_package_name);  -  Введена для совместимости с другими Ада-компиляторами
   
Interface(
  [Convention =>] convention_identifier,
  [Entity =>] local_name
 [, [External_Name =>] static_string_expression],
 [, [Link_Name =>] static_string_expression]);
 -  Введена для совместимости с другими Ада-компиляторами
   
Interface_Name(
  [Entity =>] local_name
 [, [External_Name =>] static_string_expression]
 [, [Link_Name =>] static_string_expression]);
 -  Введена для совместимости с другими Ада-компиляторами
   
Linker_Alias(
 [Entity =>] local_name
 [Alias =>] static_string_expression);
 -  Определяет альтернативный компоновщик (linker) для указанного пакета (или другого компонуемого модуля).
   
Linker_Section(
 [Entity =>] local_name
 [Section =>] static_string_expression);
 -  Указание компоновщику gcc использовать соответствующую секцию для указанного имени
   
Long_Float(float_format);  -  Реализована только для OpenVMS
   
Machine_Attribute(
 [Attribute_Name =>] string_expression,
 [Entity =>] local_name);
 -  Определяет атрибуты машины для gcc.
   
Main_Storage(
 main_storage_option [, main_storage_option]);
 -  Реализована только для OpenVMS
   
No_Run_Time;  -  Указать компилятору gnat не использовать библиотеку времени выполнения (например, в случае написания драйвера устройства).
   
No_Return(procedure_local_name);  -  Указывает процедуру, которая преднамеренно не возвращает управление. Предназначена для подавления предупреждающих сообщений компилятора.
   
Passive([Semaphore | No]);  -  Введена для совместимости с другими Ада-компиляторами
   
Polling(On | Off);  -  Если включена, то разрешает опрос исключений
   
Propagate_Exceptions(subprogram_local_name);  -  Определяет импортированную подпрограмму, которая будет обрабатывать исключения Ады (без потерь производительности).
   
Psect_Object(
  [Internal =>] local_name,
 [, [External =>] external_symbol]
 [, [Size =>] external_symbol]);
 -  То же самое, что и Common_Object.
   
Pure_Function([Entity =>] function_local_name);  -  Указывает, что функция не имеет побочных эффектов.
   
   
Ravenscar;  -  Устанавливает политику реального времени RAVENSCAR
   
Restricted_Run_Time;  -  Подобно директиве Ravenscar, устанавливает некоторые ограничения на программирование задач реального времени
   
Share_Generic(name {, name});  -  Введена для совместимости с другими Ада-компиляторами
   
Source_File_Name(
 [Unit_Name =>] unit_name,
 [FNAME_DESIG =>] string_literal);
 -  Переопределяет традиционные для реализации компилятора gnat правила именования файлов.
   
Source_Reference(
 integer_literal, string_literal);
 -  Применяется для совместного использования с утилитой gnatchop.
   
Stream_Convert(
 [Entity =>] type_local_name,
 [Read =>] function_name,
 [Write =>] function name);
 -  Упрощает создание подпрограмм потокового ввода/вывода для указанного типа данных
   
Style_Checks(
 string_literal | ALL_CHECKS |
 On | Off [, local_name]);
 -  Указывает реализации компилятора gnat выполнять проверку стиля оформления исходных текстов (если включено в процессе компиляции).
   
Subtitle([Subtitle =>] string_literal);  -  Введена для совместимости с другими Ада-компиляторами
   
Suppress_All;  -  Введена для совместимости с другими Ада-компиляторами
   
Suppress_Initialization([Entity =>] type_name);  -  Запретить инициализацию переменных указанного типа данных
   
Task_Info(expression);  -  Определяет информацию о задаче.
   
Task_Name(string_expression);  -  Определяет имя задачи.

Примечание: отсутствует в реализации GNAT V 3.13p.

   
Task_Storage(
 [Task_Type =>] local_name,
 [Top_Guard =>] static_integer_expression);
 -  Определяет "охранное" пространство для задачи.
   
Time_Slice(static_duration_expression);  -  Определяет квант времени задачи (tasking time slice) для главной программы
   
Title(titling_option [, titling option]);  -  Введена для совместимости с другими Ада-компиляторами
   
Unchecked_Union(first_subtype_local_name);  -  Трактовать запись как тип объединения (union) языка Си.
   
Unimplemented_Unit;  -  Предназначена для использования в не законченных модулях. Порождает генерацию ошибки при компиляции такого модуля.
   
Unreserve_All_Interrupts;  -  Позволяет переназначение прерываний, которые обычно обрабатываются реализацией компилятора gnat (например SIGINT).
   
Unsuppress(identifier [, [On =>] name]);  -  Обладает эффектом, противоположным директиве Suppress.
   
Use_VADS_Size  -  Для старого Ада-кода. атрибут 'Size эквивалентен атрибуту 'VADS_Size.
   
Warnings(On | Off [, local_name]);  -  Включает или выключает генерацию предупредительных сообщений компилятором.
   
Weak_External([Entity =>] local_name);  -  Определяет объект, который не должен распознаваться компоновщиком.


Copyright (C) А.Гавва V-0.4w май 2004