Ada Programming/Pragmas/Restrictions

From Wikibooks, open books for an open world
Jump to navigation Jump to search

Ada. Time-tested, safe and secure.
Ada. Time-tested, safe and secure.

Summary[edit | edit source]

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

List of language defined restrictions identifiers[edit | edit source]

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.

List of implementation defined restrictions identifiers[edit | edit source]

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.

"Hello, world!" with restrictions[edit | edit source]

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.

File: hello_world_restricted.adb, Crate: pragmas_restrictions (view, plain text, download with Alire, Alire crate info)

Code:

pragma Restrictions (
   Simple_Barriers,
   No_Abort_Statements,
   No_Asynchronous_Control,
   No_Calendar,
   No_Delay,
   No_Dynamic_Attachment,
   No_Dynamic_Priorities,
   No_Enumeration_Maps,
   No_Entry_Calls_In_Elaboration_Code,
   No_Entry_Queue,
   No_Exception_Registration,
   No_Initialize_Scalars,
   No_Local_Protected_Objects,
   No_Protected_Type_Allocators,
   No_Protected_Types,
   No_Relative_Delay,
   No_Requeue_Statements,
   No_Select_Statements,
   No_Streams,
   No_Task_Allocators,
   No_Task_Attributes_Package,
   No_Task_Hierarchy,
   No_Task_Termination,
   No_Tasking,
   No_Terminate_Alternatives,
   No_Wide_Characters,
   Static_Priorities,
   Static_Storage_Size,
   Immediate_Reclamation,
   No_Implementation_Restrictions,
   Max_Protected_Entries => 0,
   Max_Protected_Entries => 0,
   Max_Select_Alternatives => 0,
   Max_Task_Entries => 0,
   Max_Tasks => 0,
   Max_Asynchronous_Select_Nesting => 0);

with Ada.Text_IO;

procedure Hello_World_Restricted is
begin
   Ada.Text_IO.Put_Line ("Hello World!");
   Ada.Text_IO.New_Line;
   Ada.Text_IO.Put_Line ("This is a program with restricted runtime.");
end Hello_World_Restricted;

Output:

>alr run hello_world_restricted
ⓘ Building pragmas_restrictions=1.0.1/pragmas_restrictions.gpr...          
Compile
   [Ada]          hello_world_restricted.adb
Bind
   [gprbind]      hello_world_restricted.bexch
   [Ada]          hello_world_restricted.ali
Link
   [link]         hello_world_restricted.adb
✓ Build finished successfully in 0.83 seconds.
Hello World!

This is a program with restricted runtime.

See also[edit | edit source]

Wikibook[edit | edit source]

Ada Reference Manual[edit | edit source]

Ada Quality and Style Guide[edit | edit source]