Справочник Ada 2005
H.4 Ограничения высокой надёжности
Этот пункт определяет ограничения, которые могут использоваться с пragma Restrictions (см. 13.12); они облегчают демонстрацию корректности программы, позволяя использовать настраиваемые версии систем времени выполнения.
Статическая семантика
Этот абзац был удалён.
Следующие ограничения_идентификаторы определены языком:
Ограничения, связанные с выполнением задач:
No_Protected_Types
Нет объявлений защищённых типов или защищённых объектов.
Ограничения, связанные с управлением памятью:
No_Allocators
Нет случаев аллокатора.
No_Local_Allocators
Аллокаторы запрещены в подпрограммах, обобщённых подпрограммах, задачах и телах входов.
Этот абзац был удалён.
Immediate_Reclamation
За исключением памяти, занимаемой объектами, созданными аллокаторами и не освобождённой с помощью неявного освобождения, любая резервируемая во время выполнения память для объекта немедленно освобождается, когда объект больше не существует.
Ограничения, связанные с исключениями:
No_Exceptions
Оператор_вызова и обработчик_исключений запрещены. Не генерируются никакие проверка языка времени выполнения; однако разрешается проверка времени выполнения, выполняемая аппаратно.
Другие ограничения:
No_Floating_Point
Запрещено использование предопределённых типов и операций с плавающей точкой, а также объявление новых типов с плавающей точкой.
No_Fixed_Point
Запрещено использование предопределённых типов и операций с фиксированной точкой, а также объявление новых типов с фиксированной точкой.
Этот абзац был удалён.
No_Access_Subprograms
Запрещено объявление типов указателей на подпрограммы.
No_Unchecked_Access
Атрибут Unchecked_Access запрещён.
No_Dispatch
Запрещено использование T'Class, для любого (меченного) подтипа T.
No_IO
Запрещена семантическая зависимость от любых библиотных модулей Sequential_IO, Direct_IO, Text_IO, Wide_Text_IO, Wide_Wide_Text_IO или Stream_IO.
No_Delay
Оператор_задержки и семантическая зависимость от пакета Calendar запрещены.
No_Recursion
В ходе выполнения подпрограммы не вызывается та же подпрограмма.
No_Reentrancy
Во время выполнения подпрограммы задачей, никакая другая задача не вызывает ту же подпрограмму.
Требования к реализации
Реализация данного Приложения должна поддерживать:
- ограничения, определённые в данном подпункте; и
- следующие ограничения, определённые в D.7: No_Task_Hierarchy, No_Abort_Statement, No_Implicit_Heap_Allocation; и
- pragma Profile(Ravenscar); и
- следующие использования ограничение_параметра_идентификаторов, определённых в D.7, которые проверяются до запуска программы:
- Max_Task_Entries => 0,
- Max_Asynchronous_Select_Nesting => 0, и
- Max_Tasks => 0.
Если реализация поддерживает pragma Restrictions для определённого аргумента, то за исключением ограничений No_Unchecked_Deallocation, No_Unchecked_Conversion, No_Access_Subprograms и No_Unchecked_Access, соответствующее ограничение применяется к системе времени выполнения.
Требования к документации
Если указан pragma Restrictions(No_Exceptions), реализация должна документировать влияние всех конструкций, где выполняются проверки языка времени выполнения (например, проверка переполнения, выполняемая процессором).
Ошибочное выполнение
Выполнение программы является ошибочным, если указан pragma Restrictions(No_Exceptions) и возникают условия, при которых произошла бы проверка языка времени выполнения.
Выполнение программы является ошибочным, если указан pragma Restrictions(No_Recursion), и подпрограмма вызывается в ходе собственного выполнения, или если указан pragma Restrictions(No_Reentrancy), и в ходе выполнения подпрограммы задачей другая задача вызывает ту же подпрограмму.
ПРИМЕЧАНИЯ
10 Использование ограничение_параметра_идентификатор No_Dependence, определённого в 13.12.1: No_Dependence => Ada.Unchecked_Deallocation и No_Dependence => Ada.Unchecked_Conversion могут быть подходящими для систем высокой надёжности. Другие использования No_Dependence также могут быть уместными для систем высокой надёжности.