13.7 The Package System

From OC Systems Wiki!
Jump to: navigation, search

For each implementation there is a library package called System which includes the definitions of certain configuration-dependent characteristics.

Static Semantics

The following language-defined library package exists:

package System is 
    pragma Preelaborate(System);

    type Name is implementation-defined-enumeration-type; 
    System_Name : constant Name := implementation-defined;

    -- System-Dependent Named Numbers:

    Min_Int               : constant := root_integer'First; 
    Max_Int               : constant := root_integer'Last;

    Max_Binary_Modulus    : constant := implementation-defined; 
    Max_Nonbinary_Modulus : constant := implementation-defined;

    Max_Base_Digits       : constant := root_real'Digits; 
    Max_Digits            : constant := implementation-defined;

    Max_Mantissa          : constant := implementation-defined; 
    Fine_Delta            : constant := implementation-defined;

    Tick                  : constant := implementation-defined;

    -- Storage-related Declarations:

    type Address is implementation-defined; 
    Null_Address : constant Address;

    Storage_Unit : constant := implementation-defined; 
    Word_Size    : constant := implementation-defined * Storage_Unit; 
    Memory_Size  : constant := implementation-defined;

    -- Address Comparison:
    function "<" (Left, Right Address) return Boolean; 
    function "<="(Left, Right Address) return Boolean; 
    function ">" (Left, Right Address) return Boolean; 
    function ">="(Left, Right Address) return Boolean; 
    function "=" (Left, Right Address) return Boolean; 
    -- function "/=" (Left, Right : Address) return Boolean; 
    -- "/=" is implicitly defined
    pragma Convention(Intrinsic, "<");
    ... -- and so on for all language-defined subprograms in this package

    -- Other System-Dependent Declarations:    
    type Bit_Order is (High_Order_First, Low_Order_First); 
    Default_Bit_Order : constant Bit_Order;

    -- Priority-related declarations (see D.1): 
    subtype Any_Priority is Integer range implementation-defined; 
    subtype Priority is Any_Priority range Any_Priority'First .. 
    subtype Interrupt_Priority is Any_Priority range Priority'Last+1 .. 

    Default_Priority : constant Priority :=
           (Priority'First + Priority'Last)/2;

    ... -- not specified by the language
end System;

Name is an enumeration subtype. Values of type Name are the names of alternative machine configurations handled by the implementation. System_Name represents the current machine configuration.

The named numbers Fine_Delta and Tick are of the type universal_real; the others are of the type universal_integer.

The meanings of the named numbers are:

The smallest (most negative) value allowed for the expressions of a signed_integer_type_definition.
The largest (most positive) value allowed for the expressions of a signed_integer_type_definition.
A power of two such that it, and all lesser positive powers of two, are allowed as the modulus of a modular_type_definition.
A value such that it, and all lesser positive integers, are allowed as the modulus of a modular_type_definition.
The largest value allowed for the requested decimal precision in a floating_point_definition.
The largest value allowed for the requested decimal precision in a floating_point_definition that has no real_range_specification. Max_Digits is less than or equal to Max_Base_Digits.
The largest possible number of binary digits in the mantissa of machine numbers of a user-defined ordinary fixed point type. (The mantissa is defined in Annex G.)
The smallest delta allowed in an ordinary_fixed_point_definition that has the real_range_specification range -1.0 .. 1.0.
A period in seconds approximating the real time interval during which the value of Calendar.Clock remains constant.
The number of bits per storage element.
The number of bits per word.
An implementation-defined value that is intended to reflect the memory size of the configuration in storage elements.

Address is of a definite, nonlimited type. Address represents machine addresses capable of addressing individual storage elements. Null_Address is an address that is distinct from the address of any object or program unit.

See 13.5.3 for an explanation of Bit_Order and Default_Bit_Order.

Implementation Permissions

An implementation may add additional implementation-defined declarations to package System and its children. However, it is usually better for the implementation to provide additional functionality via implementation-defined children of System. Package System may be declared pure.

Implementation Advice

Address should be a private type.


14  There are also some language-defined child packages of System defined elsewhere.

Copyright © 1992,1993,1994,1995 Intermetrics, Inc.
Copyright © 2000 The MITRE Corporation, Inc. Ada Reference Manual