The previous chapters have covered the intrinsic aspects of the Ada language; that is all the various syntactic forms. This chapter and the next two chapters describe the predefined library which comes with every implementation of Ada. As outlined in Chapter 4, the predefined library is structured as three packages: Ada, System and Interfaces with numerous child packages. These three packages are themselves (like all root library units) considered to be child units of Standard. This chapter is largely about the packages Standard and Ada, apart from the huge package Ada.Containers which is described in Chapter 24; System and Interfaces are discussed in Chapter 25.
The main facilities provided by the package Ada are string and character handling, the mathematical library including elementary functions and random number generation, various forms of input–output and communication with the operational environment.
As mentioned earlier, certain entities are predefined through their declaration in the special package Standard. It should not be thought that this package necessarily actually exists; it is just that the compiler behaves as if it does. Indeed, as we shall see, some entities notionally declared in Standard cannot be truly declared in Ada at all. The general effect of Standard is indicated by the outline specification below.
The predefined operators are given in comments since they are implicitly declared. Italics are used for identifiers not available to users (such as universal_real) and for implementation-defined information.
package Standard is
pragma Pure(Standard);
type Boolean is (False, True);
-- function “=” (Left, Right: Boolean'Base) return Boolean;
-- similarly “/=”, “<”, “<=”, “>”, “>=“
-- function “and” (Left, Right: Boolean'Base) return Boolean'Base;
-- similarly “or”, “xor“
-- function “not” (Right: Boolean'Base) return Boolean'Base;
-- The types root_integer and universal_integer are predefined.
type Integer is range implementation-defined;
subtype Natural is Integer range 0 .. Integer'Last;
subtype Positive is Integer range 1 .. Integer'Last;
-- function “=” (Left, Right: Integer'Base) return Boolean;
-- similarly “/=”, “<”, “<=”, “>”, “>=“
-- function “+” (Right: Integer'Base) return Integer'Base;
-- similarly “-”, “abs“
-- function “+” (Left, Right: Integer'Base) return Integer'Base;
-- similarly “-”, “*”, “/”, “rem”, “mod“
-- function “**” (Left: Integer'Base; Right: Natural) return Integer'Base;
-- And similarly for root_integer and any other predefined integer
-- types with Integer replaced by the name of the type.
-- The right operand of “**” remains as Natural.