# Ada Programming/Pragmas/Restrictions
## Summary

The pragma Restrictions is used to forbid the utilization of some language features.

## List of language defined restrictions identifiers

Some restrictions are specially marked:

### Ada 2005

    This is a new Ada 2005 restrictions identifier.

### Ada 2012

    This is a new Ada 2012 restrictions identifier.
* Immediate_Reclamation
* Max_Asynchronous_Select_Nesting
* Max_Entry_Queue_Length (Ada 2005)
* Max_Protected_Entries
* Max_Select_Alternatives
* Max_Storage_At_Blocking
* Max_Task_Entries
* Max_Tasks
* No_Abort_Statements
* No_Access_Parameter_Allocators (Ada 2012)
* No_Access_Subprograms
* No_Allocators
* No_Anonymous_Allocators (Ada 2012)
* No_Asynchronous_Control
* No_Coextensions (Ada 2012)
* No_Delay
* No_Dependence (Ada 2005)
* No_Dispatch
* No_Dynamic_Attachment (Ada 2005)
* No_Dynamic_Priorities
* No_Exceptions
* No_Fixed_Point
* No_Floating_Point
* No_Implementation_Aspect_Specifications (Ada 2012)
* No_Implementation_Attributes (Ada 2005)
* No_Implementation_Identifiers (Ada 2012)
* No_Implementation_Pragmas (Ada 2005)
* No_Implementation_Units (Ada 2012)
* No_Implicit_Heap_Allocations
* No_IO
* No_Local_Allocators
* No_Local_Protected_Objects (Ada 2005)
* No_Local_Timing_Events (Ada 2005)
* No_Nested_Finalization
* No_Obsolescent_Features (Ada 2005)
* No_Protected_Type_Allocators (Ada 2005)
* No_Protected_Types
* No_Recursion
* No_Reentrancy
* No_Relative_Delay (Ada 2005)
* No_Requeue_Statements (Ada 2005)
* No_Select_Statements (Ada 2005)
* No_Specific_Termination_Handlers (Ada 2005)
* No_Specification_of_Aspect (Ada 2012)
* No_Standard_Allocators_After_Elaboration (Ada 2012)
* No_Task_Allocators
* No_Task_Hierarchy
* No_Task_Termination (Ada 2005)
* No_Terminate_Alternatives
* No_Unchecked_Access
* No_Unchecked_Conversion
* No_Unchecked_Deallocation
* No_Use_of_Attribute (Ada 2012)
* No_Use_of_Pragma (Ada 2012)
* Simple_Barriers (Ada 2005)

## List of implementation defined restrictions identifiers

The following restrictions are not available in all Ada compilers, only in those that had implemented them:

### GNAT

    This is an implementation defined restriction identifier of the GNAT compiler.
* No_Calendar (GNAT)
* No_Default_Initialization (GNAT)
* No_Direct_Boolean_Operators (GNAT)
* No_Dispatching_Calls (GNAT)
* No_Elaboration_Code (GNAT)
* No_Enumeration_Maps (GNAT)
* No_Entry_Calls_In_Elaboration_Code (GNAT)
* No_Entry_Queue (GNAT)
* No_Exception_Handlers (GNAT)
* No_Exception_Propagation (GNAT)
* No_Exception_Registration, previously named 'No_Exception_Streams' (GNAT)
* No_Implementation_Restrictions (GNAT)
* No_Implicit_Aliasing (GNAT)
* No_Implicit_Conditionals (GNAT)
* No_Implicit_Dynamic_Code (GNAT)
* No_Implicit_Loops (GNAT)
* No_Initialize_Scalars (GNAT)
* No_Secondary_Stack (GNAT)
* No_Select_Statements (GNAT)
* No_Standard_Storage_Pools (GNAT)
* No_Streams (GNAT)
* No_Task_Attributes_Package (GNAT)
* No_Tasking (GNAT)
* No_Wide_Characters (GNAT)
* SPARK (GNAT)
* Static_Priorities (GNAT)
* Static_Storage_Size (GNAT)

## "Hello, world!" with restrictions

The following sample demonstrates the use of pragma Restrictions. Note that on Windows, Linux and macOS the given restrictions won't change the generated code.
Code:
Output:

## See also
### Wikibook

* Ada Programming
* Ada Programming/Pragmas

### Ada Reference Manual

* 13.12 Pragma Restrictions (Annotated)
* D.7 Tasking Restrictions (Annotated)
* H.4 Safety and Security Restrictions (Annotated)

### Ada Quality and Style Guide

* 10.7.2 Pragma Restrictions