Руководство по Ada 2012
H.4 Ограничения высокой надёжности
Этот подпункт определяет ограничения, которые могут быть использованы с пragma Restrictions (см. 13.12); они облегчают демонстрацию правильности программы, позволяя использовать настроенные версии систем выполнения.
Статическая семантика
Этот абзац был удалён.
Следующие restriction_идентификаторы определены языком:
Ограничения, связанные с задачами:
No_Protected_Types
Нет объявлений защищённых типов или защищённых объектов.
Ограничения, связанные с управлением памятью:
No_Allocators
Нет случаев аллокатора.
No_Local_Allocators
Аллокаторы запрещены в подпрограммах, обобщённых подпрограммах, задачах и телах входов.
No_Anonymous_Allocators
Нет аллокаторов анонимных типов доступа.
No_Coextensions
Нет сорасширений. См. 3.10.2.
No_Access_Parameter_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, No_Standard_Allocators_After_Elaboration; и
- pragma Profile(Ravenscar); и
- следующее использование restriction_parameter_идентификаторов, определённых в 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, No_Specification_of_Aspect, No_Use_of_Attribute, No_Use_of_Pragma и эквивалентного использования No_Dependence, связанное ограничение применяется к системе выполнения.
Требования к документации
Если указан pragma Restrictions(No_Exceptions), реализация должна документировать последствия всех конструкций, где язык-определённые проверки всё ещё выполняются автоматически (например, проверка переполнения, выполняемая процессором).
Ошибочное выполнение
Выполнение программы является ошибочным, если указан pragma Restrictions(No_Exceptions) и возникают условия, при которых сгенерированная проверка языка во время выполнения должна была бы завершиться ошибкой.
Выполнение программы является ошибочным, если указан pragma Restrictions(No_Recursion) и подпрограмма вызывается в процессе собственного выполнения, или если указан pragma Restrictions(No_Reentrancy) и в процессе выполнения подпрограммы задачей другая задача вызывает ту же самую подпрограмму.
ПРИМЕЧАНИЯ
10 Используемые restriction_parameter_идентификаторы No_Dependence, определённые в 13.12.1: No_Dependence => Ada.Unchecked_Deallocation и No_Dependence => Ada.Unchecked_Conversion могут быть подходящими для систем высокой надёжности. Другие применения No_Dependence также могут быть подходящими для систем высокой надёжности.