- (1)
- This clause defines restrictions that can be used with a pragma Restrictions
(see 13.12) to facilitate the construction of highly
efficient tasking run-time systems.
Static Semantics
- (2)
- The following restriction_identifiers are language defined:
- (3)
- No_Task_Hierarchy
All (nonenvironment) tasks depend directly on the environment
task of the partition.
- (4)
- No_Nested_Finalization
Objects with controlled parts and access types that designate
such objects shall be declared only at library level.
- (5)
- No_Abort_Statements
There are no abort_statements, and there are no calls on
Task_Identification.Abort_Task.
- (6)
- No_Terminate_Alternatives
There are no selective_accepts with terminate_alternatives.
- (7)
- No_Task_Allocators
There are no allocators for task types or types containing
task subcomponents.
- (8)
- No_Implicit_Heap_Allocations
There are no operations that implicitly require heap storage
allocation to be performed by the implementation. The
operations that implicitly require heap storage allocation
are implementation defined.
- (9)
- No_Dynamic_Priorities
There are no semantic dependences on the package Dynamic_Priorities.
- (10)
- No_Asynchronous_Control
There are no semantic dependences on the package
Asynchronous_Task_Control.
- (11)
- The following restriction_parameter_identifiers are language defined:
- (12)
- Max_Select_Alternatives
Specifies the maximum number of alternatives in a selective_accept.
- (13)
- Max_Task_Entries
Specifies the maximum number of entries per task. The bounds
of every entry family of a task unit shall be static, or
shall be defined by a discriminant of a subtype whose
corresponding bound is static. A value of zero indicates
that no rendezvous are possible.
- (14)
- Max_Protected_Entries
Specifies the maximum number of entries per protected type.
The bounds of every entry family of a protected unit shall be
static, or shall be defined by a discriminant of a subtype
whose corresponding bound is static.
Dynamic Semantics
- (15)
- If the following restrictions are violated, the behavior is
implementation defined. If an implementation chooses to detect such a
violation, Storage_Error should be raised.
- (16)
- The following restriction_parameter_identifiers are language defined:
- (17)
- Max_Storage_At_Blocking
Specifies the maximum portion (in storage elements) of a
task's Storage_Size that can be retained by a blocked task.
- (18)
- Max_Asynchronous_Select_Nesting
Specifies the maximum dynamic nesting level of asynchronous_selects. A value of zero prevents the use of any
asynchronous_select.
- (19)
- Max_Tasks
Specifies the maximum number of task creations that may be
executed over the lifetime of a partition, not counting the
creation of the environment task.
- (20)
- It is implementation defined whether the use of pragma Restrictions
results in a reduction in executable program size, storage requirements, or
execution time. If possible, the implementation should provide quantitative
descriptions of such effects for each restriction.
Implementation Advice
- (21)
- When feasible, the implementation should take advantage of the specified
restrictions to produce a more efficient implementation.
-
- (22)
(29) The above Storage_Checks can be suppressed with pragma Suppress.
-- Email comments, additions, corrections, gripes, kudos, etc. to:
Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12