Есть что улучшить? Предложите правку.
В издании Ada Programming · страница 38 из 44
Computing » Computer Science » Computer Programming » Ada Programming
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.
File: hello_world_restricted.adb, Crate: pragmas_restrictions (view, plain text, download with Alire, Alire crate info)

(Image: Varnent, CC BY-SA 3.0)
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
Wikibook
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
Where this page came from
This page was imported from Wikibooks. From “Ada Programming” on Wikibooks, by its contributors, under CC BY-SA 4.0. Changed here: set as a page; navigation and edit links left out; each image under its own licence, credited in its caption.
Nobody has written it yet — it is the source material at a new address, which is why search engines are asked to skip it and why no one earns from it. It is up for grabs: take it on, and it is yours to rewrite and to earn from.
В изданияхAda Programming
Лицензия: CC BY-SA 4.0 · По материалам en.wikibooks.org
1
0
0
0

Комментарии






