Справочник по Ada 95
D.7 Ограничения по задачам
Этот пункт определяет ограничения, которые могут быть использованы с помощью директивы Restrictions (см. 13.12), чтобы облегчить создание высокоэффективных систем выполнения задач.
Статическая семантика
Следующие restriction_идентификаторы определены языком:
- No_Task_Hierarchy
- Все задачи (кроме задач среды) напрямую зависят от задачи среды раздела.
- No_Nested_Finalization
- Объекты с управляемыми, защищенными или задачными частями и типами доступа, которые обозначают такие объекты, должны быть объявлены только на уровне библиотеки.
- No_Abort_Statements
- Нет операторов abort_statement, и нет вызовов Task_Identification.Abort_Task.
- No_Terminate_Alternatives
- Нет операторов selective_accept с terminate_alternative.
- No_Task_Allocators
- Нет аллокаторов для типов задач или типов, содержащих задачные подкомпоненты.
- No_Implicit_Heap_Allocations
- Нет операций, которые неявно требуют выделения памяти в куче от реализации. Операции, которые неявно требуют выделения памяти в куче, определяются реализацией.
- No_Dynamic_Priorities
- Нет семантических зависимостей от пакета Dynamic_Priorities.
- No_Asynchronous_Control
- Нет семантических зависимостей от пакета Asynchronous_Task_Control.
Следующие restriction_parameter_идентификаторы определены языком:
- Max_Select_Alternatives
- Указывает максимальное количество альтернатив в selective_accept.
- Max_Task_Entries
- Указывает максимальное количество входов на задачу. Границы каждой семейства входов задачи должны быть статическими или быть определены дискриминантой подтипа, соответствующая граница которого является статической. Значение ноль указывает, что переходы на взаимосвязь невозможны.
- Max_Protected_Entries
- Указывает максимальное количество входов на защищенный тип. Границы каждой семейства входов защищенного блока должны быть статическими или быть определены дискриминантой подтипа, соответствующая граница которого является статической.
Динамическая семантика
Этот абзац был удален.
Следующие restriction_parameter_идентификаторы определены языком:
- Max_Storage_At_Blocking
- Указывает максимальную часть (в элементах памяти) размера памяти Storage_Size задачи, которая может быть сохранена заблокированной задачей. Если реализация выбирает обнаруживать нарушение этого ограничения, Storage_Error должно быть поднято; в противном случае поведение определяется реализацией.
- Max_Asynchronous_Select_Nesting
- Указывает максимальный динамический уровень вложенности asynchronous_selectов. Значение ноль предотвращает использование любого asynchronous_select, и если программа содержит asynchronous_select, это является незаконным. Если реализация выбирает обнаруживать нарушение этого ограничения для значений, отличных от нуля, Storage_Error должно быть поднято; в противном случае поведение определяется реализацией.
- Max_Tasks
- Указывает максимальное количество созданий задач, которые могут быть выполнены за время существования раздела, не считая создания задачи среды. Значение ноль предотвращает создание любой задачи, и если программа содержит создание задачи, это является незаконным. Если реализация выбирает обнаруживать нарушение этого ограничения, Storage_Error должно быть поднято; в противном случае поведение определяется реализацией.
Определяется реализацией, приводит ли использование директивы Restrictions к уменьшению размера исполняемой программы, потребностям памяти или времени выполнения. При возможности реализация должна предоставить количественные описания таких эффектов для каждого ограничения.
Рекомендации для реализации
При возможности реализация должна использовать указанные ограничения для создания более эффективной реализации.
ПРИМЕЧАНИЯ
29 Вышеупомянутые Storage_Checks могут быть подавлены с помощью pragma Suppress.