Справочник Ada 95
H.4 Ограничения безопасности и защиты
Данный пункт определяет ограничения, которые могут быть использованы с pragma Restrictions (см. 13.12); они облегчают демонстрацию корректности программы, позволяя использовать настроенные версии систем выполнения.
Статическая семантика
Следующие ограничения, такие же, как в D.7, применяются в этом приложении: No_Task_Hierarchy, No_Abort_Statement, No_Implicit_Heap_Allocation, Max_Task_Entries равно 0, Max_Asynchronous_Select_Nesting равно 0, и Max_Tasks равно 0. Последние три ограничения проверяются до выполнения программы.
В этом приложении применяются следующие дополнительные ограничения.
Ограничения, связанные с задачами:
- No_Protected_Types
- Нет объявлений защищённых типов или защищённых объектов.
- Ограничения, связанные с управлением памятью:
- No_Allocators
- Нет случаев использования аллокатора.
- No_Local_Allocators
- Аллокаторы запрещены в подпрограммах, обобщённых подпрограммах, задачах и телах входов.
- No_Unchecked_Deallocation
- Семантическая зависимость от Unchecked_Deallocation запрещена.
- Immediate_Reclamation
- За исключением памяти, занятой объектами, созданными аллокаторами и не освобождёнными с помощью неявного освобождения, любая зарезервированная во время выполнения память для объекта немедленно освобождается, когда объект больше не существует.
- Ограничения, связанные с исключениями:
- No_Exceptions
- Оператор raise и обработчик исключений запрещены. Не генерируются никакие определённые языком проверки во время выполнения; однако разрешается проверка во время выполнения, выполняемая автоматически аппаратным обеспечением.
- Другие ограничения:
- No_Floating_Point
- Не разрешается использование предопределённых типов с плавающей точкой и операций, а также объявление новых типов с плавающей точкой.
- No_Fixed_Point
- Не разрешается использование предопределённых типов с фиксированной точкой и операций, а также объявление новых типов с фиксированной точкой.
- No_Unchecked_Conversion
- Семантическая зависимость от предопределённого обобщённого Unchecked_Conversion запрещена.
- No_Access_Subprograms
- Объявление типов доступа к подпрограммам не разрешено.
- No_Unchecked_Access
- Атрибут Unchecked_Access запрещён.
- No_Dispatch
- Использование T'Class запрещено для любого (меченного) подтипа T.
- No_IO
- Семантическая зависимость от каких-либо библиотек (модулей) Sequential_IO, Direct_IO, Text_IO, Wide_Text_IO или Stream_IO запрещена.
- No_Delay
- Оператор Delay и семантическая зависимость от пакета Calendar запрещены.
- No_Recursion
- В процессе выполнения подпрограммы не вызывается та же подпрограмма.
- No_Reentrancy
- Во время выполнения подпрограммы задачей, ни одна другая задача не вызывает ту же подпрограмму.
Требования к реализации
Если реализация поддерживает 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), и во время выполнения подпрограммы задачей другая задача вызывает ту же подпрограмму.