File: AA-0-3.html

package info (click to toggle)
ada-reference-manual 20021112web-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny, sarge
  • size: 18,652 kB
  • ctags: 8,921
  • sloc: makefile: 52; sh: 20
file content (515 lines) | stat: -rw-r--r-- 36,651 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Introduction</TITLE>
    <META NAME="Author" CONTENT="JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor">
    <META NAME="GENERATOR" CONTENT="Arm_Form.Exe, Ada Reference Manual generator">
    <STYLE type="text/css">
    DIV.paranum {position: absolute; font-family: Arial, Helvetica, sans-serif; left: 0.5 em; top: auto}
    TT {font-family: "Courier New", monospace}
    DT {display: compact}
    DIV.Normal {font-family: "Times New Roman", Times, serif; margin-bottom: 0.6em}
    DIV.Wide {font-family: "Times New Roman", Times, serif; margin-top: 0.6em; margin-bottom: 0.6em}
    DIV.Annotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
    DIV.WideAnnotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0.6em; margin-bottom: 0.6em}
    DIV.Index {font-family: "Times New Roman", Times, serif}
    DIV.SyntaxSummary {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
    DIV.Notes {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.6em}
    DIV.NotesHeader {font-family: "Times New Roman", Times, serif; margin-left: 2.0em}
    DIV.SyntaxIndented {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
    DIV.Indented {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-bottom: 0.6em}
    DIV.CodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
    DIV.SmallIndented {font-family: "Times New Roman", Times, serif; margin-left:  10.0em; margin-bottom: 0.6em}
    DIV.SmallCodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-bottom: 0.6em}
    DIV.Examples {font-family: "Courier New", monospace; margin-left: 2.0em; margin-bottom: 0.6em}
    DIV.SmallExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left: 7.5em; margin-bottom: 0.6em}
    DIV.IndentedExamples {font-family: "Courier New", monospace; margin-left: 8.0em; margin-bottom: 0.6em}
    DIV.SmallIndentedExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left:  15.0em; margin-bottom: 0.6em}
    UL.Bulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SmallBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SmallNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.IndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.CodeIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.CodeIndentedNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SyntaxIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NotesBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NotesNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    DL.Hanging {font-family: "Times New Roman", Times, serif; margin-top: 0em; margin-bottom: 0.6em}
    DD.Hanging {margin-left: 6.0em}
    DL.IndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.IndentedHanging {margin-left: 2.0em}
    DL.HangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.HangingInBulleted {margin-left: 4.0em}
    DL.SmallHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.SmallHanging {margin-left: 7.5em}
    DL.SmallIndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.SmallIndentedHanging {margin-left: 2.0em}
    DL.SmallHangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.SmallHangingInBulleted {margin-left: 5.0em}
    DL.Enumerated {font-family: "Times New Roman", Times, serif; margin-right: 0.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.Enumerated {margin-left: 2.0em}
    DL.SmallEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.SmallEnumerated {margin-left: 2.5em}
    DL.NestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    DL.SmallNestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    </STYLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFF0" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<P><A HREF="AA-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-2.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-1.html">Next</A></P>
<HR>
<H1>Introduction</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;This is the Annotated Ada Reference Manual. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;Other available
Ada documents include: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>Rationale for the Ada Programming Language -- 1995 edition,
which gives an introduction to the new features of Ada, and explains
the rationale behind them. Programmers should read this first.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>4/1</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC><FONT SIZE=-1><I>This paragraph was deleted.</I></FONT><S>Changes
to Ada -- 1987 to 1995. This document lists in detail the changes made
to the 1987 edition of the standard.</S></LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>The Ada Reference Manual (RM). This is the International
Standard -- ISO/IEC 8652:1995. </LI></UL>
<DIV Class="Wide"><FONT FACE="Arial, Helvetica"><B><FONT SIZE=+2>Design
Goals</B></FONT></FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;Ada was originally designed with three overriding
concerns: program reliability and maintenance, programming as a human
activity, and efficiency. This revision to the language was designed
to provide greater flexibility and extensibility, additional control
over storage management and synchronization, and standardized packages
oriented toward supporting important application areas, while at the
same time retaining the original emphasis on reliability, maintainability,
and efficiency.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;The need for languages that promote reliability
and simplify maintenance is well established. Hence emphasis was placed
on program readability over ease of writing. For example, the rules of
the language require that program variables be explicitly declared and
that their type be specified. Since the type of a variable is invariant,
compilers can ensure that operations on variables are compatible with
the properties intended for objects of the type. Furthermore, error-prone
notations have been avoided, and the syntax of the language avoids the
use of encoded forms in favor of more English-like constructs. Finally,
the language offers support for separate compilation of program units
in a way that facilitates program development and maintenance, and which
provides the same degree of checking between units as within a unit.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;Concern for the human programmer was also stressed
during the design. Above all, an attempt was made to keep to a relatively
small number of underlying concepts integrated in a consistent and systematic
way while continuing to avoid the pitfalls of excessive involution. The
design especially aims to provide language constructs that correspond
intuitively to the normal expectations of users.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;Like many other human activities, the development
of programs is becoming ever more decentralized and distributed. Consequently,
the ability to assemble a program from independently produced software
components continues to be a central idea in the design. The concepts
of packages, of private types, and of generic units are directly related
to this idea, which has ramifications in many other aspects of the language.
An allied concern is the maintenance of programs to match changing requirements;
type extension and the hierarchical library enable a program to be modified
while minimizing disturbance to existing tested and trusted components.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;No language can avoid the problem of efficiency.
Languages that require over-elaborate compilers, or that lead to the
inefficient use of storage or execution time, force these inefficiencies
on all machines and on all programs. Every construct of the language
was examined in the light of present implementation techniques. Any proposed
construct whose implementation was unclear or that required excessive
machine resources was rejected. </DIV>
<DIV Class="Wide"><FONT FACE="Arial, Helvetica"><B><FONT SIZE=+2>Language
Summary</B></FONT></FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;An Ada program is composed of one or more program
units. Program units may be subprograms (which define executable algorithms),
packages (which define collections of entities), task units (which define
concurrent computations), protected units (which define operations for
the coordinated sharing of data between tasks), or generic units (which
define parameterized forms of packages and subprograms). Each program
unit normally consists of two parts: a specification, containing the
information that must be visible to other units, and a body, containing
the implementation details, which need not be visible to other units.
Most program units can be compiled separately.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>12</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;This distinction of the specification and body,
and the ability to compile units separately, allows a program to be designed,
written, and tested as a set of largely independent software components.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>13</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;An Ada program will normally make use of a library
of program units of general utility. The language provides means whereby
individual organizations can construct their own libraries. All libraries
are structured in a hierarchical manner; this enables the logical decomposition
of a subsystem into individual components. The text of a separately compiled
program unit must name the library units it requires.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>14</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<I>Program Units</I></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>15</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;A subprogram is the basic unit for expressing
an algorithm. There are two kinds of subprograms: procedures and functions.
A procedure is the means of invoking a series of actions. For example,
it may read data, update variables, or produce some output. It may have
parameters, to provide a controlled means of passing information between
the procedure and the point of call. A function is the means of invoking
the computation of a value. It is similar to a procedure, but in addition
will return a result.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;A package is the basic unit for defining a collection
of logically related entities. For example, a package can be used to
define a set of type declarations and associated operations. Portions
of a package can be hidden from the user, thus allowing access only to
the logical properties expressed by the package specification.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>17</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Subprogram and package units may be compiled
separately and arranged in hierarchies of parent and child units giving
fine control over visibility of the logical properties and their detailed
implementation.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>18</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;A task unit is the basic unit for defining a
task whose sequence of actions may be executed concurrently with those
of other tasks. Such tasks may be implemented on multicomputers, multiprocessors,
or with interleaved execution on a single processor. A task unit may
define either a single executing task or a task type permitting the creation
of any number of similar tasks.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>19</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;A protected unit is the basic unit for defining
protected operations for the coordinated use of data shared between tasks.
Simple mutual exclusion is provided automatically, and more elaborate
sharing protocols can be defined. A protected operation can either be
a subprogram or an entry. A protected entry specifies a Boolean expression
(an entry barrier) that must be true before the body of the entry is
executed. A protected unit may define a single protected object or a
protected type permitting the creation of several similar objects.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>20</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<I>Declarations and Statements</I></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>21</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;The body of a program unit generally contains
two parts: a declarative part, which defines the logical entities to
be used in the program unit, and a sequence of statements, which defines
the execution of the program unit.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>22</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;The declarative part associates names with declared
entities. For example, a name may denote a type, a constant, a variable,
or an exception. A declarative part also introduces the names and parameters
of other nested subprograms, packages, task units, protected units, and
generic units to be used in the program unit.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>23</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;The sequence of statements describes a sequence
of actions that are to be performed. The statements are executed in succession
(unless a transfer of control causes execution to continue from another
place).</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>24</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;An assignment statement changes the value of
a variable. A procedure call invokes execution of a procedure after associating
any actual parameters provided at the call with the corresponding formal
parameters.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>25</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Case statements and if statements allow the selection
of an enclosed sequence of statements based on the value of an expression
or on the value of a condition.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>26</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;The loop statement provides the basic iterative
mechanism in the language. A loop statement specifies that a sequence
of statements is to be executed repeatedly as directed by an iteration
scheme, or until an exit statement is encountered.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>27</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;A block statement comprises a sequence of statements
preceded by the declaration of local entities used by the statements.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>28</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Certain statements are associated with concurrent
execution. A delay statement delays the execution of a task for a specified
duration or until a specified time. An entry call statement is written
as a procedure call statement; it requests an operation on a task or
on a protected object, blocking the caller until the operation can be
performed. A called task may accept an entry call by executing a corresponding
accept statement, which specifies the actions then to be performed as
part of the rendezvous with the calling task. An entry call on a protected
object is processed when the corresponding entry barrier evaluates to
true, whereupon the body of the entry is executed. The requeue statement
permits the provision of a service as a number of related activities
with preference control. One form of the select statement allows a selective
wait for one of several alternative rendezvous. Other forms of the select
statement allow conditional or timed entry calls and the asynchronous
transfer of control in response to some triggering event.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>29</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Execution of a program unit may encounter error
situations in which normal program execution cannot continue. For example,
an arithmetic computation may exceed the maximum allowed value of a number,
or an attempt may be made to access an array component by using an incorrect
index value. To deal with such error situations, the statements of a
program unit can be textually followed by exception handlers that specify
the actions to be taken when the error situation arises. Exceptions can
be raised explicitly by a raise statement.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>30</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<I>Data Types</I></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>31</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Every object in the language has a type, which
characterizes a set of values and a set of applicable operations. The
main classes of types are elementary types (comprising enumeration, numeric,
and access types) and composite types (including array and record types).</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>32</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;An enumeration type defines an ordered set of
distinct enumeration literals, for example a list of states or an alphabet
of characters. The enumeration types Boolean, Character, and Wide_Character
are predefined.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>33</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Numeric types provide a means of performing exact
or approximate numerical computations. Exact computations use integer
types, which denote sets of consecutive integers. Approximate computations
use either fixed point types, with absolute bounds on the error, or floating
point types, with relative bounds on the error. The numeric types Integer,
Float, and Duration are predefined.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>34</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Composite types allow definitions of structured
objects with related components. The composite types in the language
include arrays and records. An array is an object with indexed components
of the same type. A record is an object with named components of possibly
different types. Task and protected types are also forms of composite
types. The array types String and Wide_String are predefined.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>35</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Record, task, and protected types may have special
components called discriminants which parameterize the type. Variant
record structures that depend on the values of discriminants can be defined
within a record type.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>36</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Access types allow the construction of linked
data structures. A value of an access type represents a reference to
an object declared as aliased or to an object created by the evaluation
of an allocator. Several variables of an access type may designate the
same object, and components of one object may designate the same or other
objects. Both the elements in such linked data structures and their relation
to other elements can be altered during program execution. Access types
also permit references to subprograms to be stored, passed as parameters,
and ultimately dereferenced as part of an indirect call.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>37</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Private types permit restricted views of a type.
A private type can be defined in a package so that only the logically
necessary properties are made visible to the users of the type. The full
structural details that are externally irrelevant are then only available
within the package and any child units.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>38</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;From any type a new type may be defined by derivation.
A type, together with its derivatives (both direct and indirect) form
a derivation class. Class-wide operations may be defined that accept
as a parameter an operand of any type in a derivation class. For record
and private types, the derivatives may be extensions of the parent type.
Types that support these object-oriented capabilities of class-wide operations
and type extension must be tagged, so that the specific type of an operand
within a derivation class can be identified at run time. When an operation
of a tagged type is applied to an operand whose specific type is not
known until run time, implicit dispatching is performed based on the
tag of the operand.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>39</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;The concept of a type is further refined by the
concept of a subtype, whereby a user can constrain the set of allowed
values of a type. Subtypes can be used to define subranges of scalar
types, arrays with a limited set of index values, and records and private
types with particular discriminant values.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>40</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<I>Other Facilities</I></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>41</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Representation clauses can be used to specify
the mapping between types and features of an underlying machine. For
example, the user can specify that objects of a given type must be represented
with a given number of bits, or that the components of a record are to
be represented using a given storage layout. Other features allow the
controlled use of low level, nonportable, or implementation-dependent
aspects, including the direct insertion of machine code.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>42</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;The predefined environment of the language provides
for input-output and other capabilities (such as string manipulation
and random number generation) by means of standard library packages.
Input-output is supported for values of user-defined as well as of predefined
types. Standard means of representing values in display form are also
provided. Other standard library packages are defined in annexes of the
standard to support systems with specialized requirements.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>43</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Finally, the language provides a powerful means
of parameterization of program units, called generic program units. The
generic parameters can be types and subprograms (as well as objects and
packages) and so allow general algorithms and data structures to be defined
that are applicable to all types of a given class. </DIV>
<DIV Class="Wide"><FONT FACE="Arial, Helvetica"><B><FONT SIZE=+2>Language
Changes</B></FONT></FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>44</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;This International
Standard replaces the first edition of 1987. In this edition, the following
major language changes have been incorporated: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>45</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>Support for standard 8-bit and 16-bit character sets. See
Section 2, <A HREF="AA-3-5-2.html">3.5.2</A>, <A HREF="AA-3-6-3.html">3.6.3</A>,
<A HREF="AA-A-1.html">A.1</A>, <A HREF="AA-A-3.html">A.3</A>, and <A HREF="AA-A-4.html">A.4</A>.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>46</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>Object-oriented programming with run-time polymorphism.
See the discussions of classes, derived types, tagged types, record extensions,
and private extensions in clauses <A HREF="AA-3-4.html">3.4</A>, <A HREF="AA-3-9.html">3.9</A>,
and <A HREF="AA-7-3.html">7.3</A>. See also the new forms of generic
formal parameters that are allowed by <A HREF="AA-12-5-1.html">12.5.1</A>,
``<A HREF="AA-12-5-1.html">Formal Private and Derived Types</A>'' and
<A HREF="AA-12-7.html">12.7</A>, ``<A HREF="AA-12-7.html">Formal Packages</A>''.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>47</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>Access types have been extended to allow an access value
to designate a subprogram or an object declared by an object declaration
(as opposed to just a heap-allocated object). See <A HREF="AA-3-10.html">3.10</A>.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>48</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>Efficient data-oriented synchronization is provided via
protected types. See Section 9.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>49</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>The library units of a library may be organized into a
hierarchy of parent and child units. See Section 10.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>50</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>Additional support has been added for interfacing to other
languages. See <A HREF="AA-B.html">Annex B</A>.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>51</FONT></DIV>
<UL Class="Bulleted" Style="margin-bottom: 0.3em"><LI TYPE=DISC>The Specialized Needs Annexes have been added to provide
specific support for certain application areas: </LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>52</FONT></DIV>
<UL Class="NestedBulleted"><LI TYPE=DISC><A HREF="AA-C.html">Annex C</A>, ``<A HREF="AA-C.html">Systems
Programming</A>''</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>53</FONT></DIV>
<UL Class="NestedBulleted"><LI TYPE=DISC><A HREF="AA-D.html">Annex D</A>, ``<A HREF="AA-D.html">Real-Time
Systems</A>''</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>54</FONT></DIV>
<UL Class="NestedBulleted"><LI TYPE=DISC><A HREF="AA-E.html">Annex E</A>, ``<A HREF="AA-E.html">Distributed
Systems</A>''</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>55</FONT></DIV>
<UL Class="NestedBulleted"><LI TYPE=DISC><A HREF="AA-F.html">Annex F</A>, ``<A HREF="AA-F.html">Information
Systems</A>''</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>56</FONT></DIV>
<UL Class="NestedBulleted"><LI TYPE=DISC><A HREF="AA-G.html">Annex G</A>, ``<A HREF="AA-G.html">Numerics</A>''</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>57</FONT></DIV>
<UL Class="NestedBulleted"><LI TYPE=DISC><A HREF="AA-H.html">Annex H</A>, ``<A HREF="AA-H.html">Safety
and Security</A>'' </LI></UL>
<P><BR><BR></P>
<HR>
<P><BR></P>
<DIV Class="Wide"><FONT FACE="Arial, Helvetica"><B><FONT SIZE=+2>Instructions
for Comment Submission</B></FONT></FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>58/1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1001"></A><A NAME="I1002"></A>Informal
comments on this International Standard may be sent via e-mail to <U><B>ada-comment@ada-auth.org</B></U><S><B>ada-comment@sw-eng.falls-church.va.us</B></S>.
If appropriate, the Project Editor will initiate the defect correction
procedure.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>59</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Comments should use the following format: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>60</FONT></DIV>
<DIV Class="SyntaxIndented">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>!topic</B>&nbsp;<I>Title&nbsp;summarizing&nbsp;comment</I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>!reference</B>&nbsp;RM95-<I>ss.ss(pp)</I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>!from</B>&nbsp;<I>Author&nbsp;Name&nbsp;yy-mm-dd</I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>!keywords</B>&nbsp;<I>keywords&nbsp;related&nbsp;to&nbsp;topic</I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>!discussion</B><BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>text&nbsp;of&nbsp;discussion</I></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>61</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;where <I>ss.ss</I> is the section, clause or
subclause number, <I>pp</I> is the paragraph number where applicable,
and <I>yy-mm-dd</I> is the date the comment was sent. The date is optional,
as is the <B>!keywords</B> line.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>62/1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<S>Multiple comments per e-mail message are
acceptable.</S> Please use a descriptive ``Subject'' in your e-mail message<U>,
and limit each message to a single comment.</U><S>.</S></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>63</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;When correcting typographical errors or making
minor wording suggestions, please put the correction directly as the
topic of the comment; use square brackets [ ] to indicate text to be
omitted and curly braces { } to indicate text to be added, and provide
enough context to make the nature of the suggestion self-evident or put
additional information in the body of the comment, for example: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>64</FONT></DIV>
<DIV Class="SyntaxIndented">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>!topic</B>&nbsp;[c]{C}haracter<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>!topic</B>&nbsp;it[']s&nbsp;meaning&nbsp;is&nbsp;not&nbsp;defined</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>65</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Formal requests for interpretations and for reporting
defects in this International Standard may be made in accordance with
the ISO/IEC JTC1 Directives and the ISO/IEC JTC1/SC22 policy for interpretations.
National Bodies may submit a Defect Report to ISO/IEC JTC1/SC22 for resolution
under the JTC1 procedures. A response will be provided and, if appropriate,
a Technical Corrigendum will be issued in accordance with the procedures.</DIV>
<P><BR><BR></P>
<HR>
<P><BR></P>
<DIV Class="Wide"><FONT FACE="Arial, Helvetica"><B><FONT SIZE=+2>Acknowledgements</B></FONT></FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>66</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;This International Standard was prepared by the
Ada 9X Mapping/Revision Team based at Intermetrics, Inc., which has included:
W. Carlson, Program Manager; T. Taft, Technical Director; J. Barnes (consultant);
B. Brosgol (consultant); R. Duff (Oak Tree Software); M. Edwards; C.
Garrity; R. Hilliard; O. Pazy (consultant); D. Rosenfeld; L. Shafer;
W. White; M. Woodger.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>67</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;The following consultants to the Ada 9X Project
contributed to the Specialized Needs Annexes: T. Baker (Real-Time/Systems
Programming -- SEI, FSU); K. Dritz (Numerics -- Argonne National Laboratory);
A. Gargaro (Distributed Systems -- Computer Sciences); J. Goodenough
(Real-Time/Systems Programming -- SEI); J. McHugh (Secure Systems --
consultant); B. Wichmann (Safety-Critical Systems -- NPL: UK).</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>68</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;This work was regularly reviewed by the Ada 9X
Distinguished Reviewers and the members of the Ada 9X Rapporteur Group
(XRG): E. Ploedereder, Chairman of DRs and XRG (University of Stuttgart:
Germany); B. Bardin (Hughes); J. Barnes (consultant: UK); B. Brett (DEC);
B. Brosgol (consultant); R. Brukardt (RR Software); N. Cohen (IBM); R.
Dewar (NYU); G. Dismukes (TeleSoft); A. Evans (consultant); A. Gargaro
(Computer Sciences); M. Gerhardt (ESL); J. Goodenough (SEI); S. Heilbrunner
(University of Salzburg: Austria); P. Hilfinger (UC/Berkeley); B. K&auml;llberg
(CelsiusTech: Sweden); M. Kamrad II (Unisys); J. van Katwijk (Delft University
of Technology: The Netherlands); V. Kaufman (Russia); P. Kruchten (Rational);
R. Landwehr (CCI: Germany); C. Lester (Portsmouth Polytechnic: UK); L.
M&aring;nsson (TELIA Research: Sweden); S. Michell (Multiprocessor Toolsmiths:
Canada); M. Mills (US Air Force); D. Pogge (US Navy); K. Power (Boeing);
O. Roubine (Verdix: France); A. Strohmeier (Swiss Fed Inst of Technology:
Switzerland); W. Taylor (consultant: UK); J. Tokar (Tartan); E. Vasilescu
(Grumman); J. Vladik (Prospeks s.r.o.: Czech Republic); S. Van Vlierberghe
(OFFIS: Belgium). </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>69</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Other valuable feedback influencing the revision
process was provided by the Ada 9X Language Precision Team (Odyssey Research
Associates), the Ada 9X User/Implementer Teams (AETECH, Tartan, TeleSoft),
the Ada 9X Implementation Analysis Team (New York University) and the
Ada community-at-large.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>70</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Special thanks go to R. Mathis, Convenor of ISO/IEC
JTC1/SC22 Working Group 9. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>71</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;The Ada 9X Project was sponsored by the Ada Joint
Program Office. Christine M. Anderson at the Air Force Phillips Laboratory
(Kirtland AFB, NM) was the project manager.</DIV>
<P><BR><BR></P>
<HR>
<P><BR></P>
<DIV Class="Wide"><FONT FACE="Arial, Helvetica"><B><FONT SIZE=+2>Changes</B></FONT></FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>72</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;The International
Standard is the same as this version of the Reference Manual, except:
</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>73</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>This list of Changes is not included in the International
Standard.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>74</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>The ``Acknowledgements'' page is not included in the International
Standard.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>75</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>The text in the running headers and footers on each page
is slightly different in the International Standard.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>76</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>The title page(s) are different in the International Standard.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>77</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>This document is formatted for 8.5-by-11-inch paper, whereas
the International Standard is formatted for A4 paper (210-by-297mm);
thus, the page breaks are in different places.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>77.1/1</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC><U>The ``Foreword to this version of the Ada Reference
Manual'' clause is not included in the International Standard.</U> </LI></UL>

<HR>
<P><A HREF="AA-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-9.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>