File: AA-1-1-2.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 (451 lines) | stat: -rw-r--r-- 29,822 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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Structure</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-1-1-1.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-1-1-3.html">Next</A></P>
<HR>
<H1> 1.1.2 Structure</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;This International Standard contains thirteen
sections, fourteen annexes, and an index.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;<A NAME="I1004"></A>The
<I>core</I> of the Ada language consists of: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>Sections 1 through 13</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC><A HREF="AA-A.html">Annex A</A>, ``<A HREF="AA-A.html">Predefined
Language Environment</A>''</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC><A HREF="AA-B.html">Annex B</A>, ``<A HREF="AA-B.html">Interface
to Other Languages</A>''</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC><A HREF="AA-J.html">Annex J</A>, ``<A HREF="AA-J.html">Obsolescent
Features</A>'' </LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Wide" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;<A NAME="I1005"></A><A NAME="I1006"></A><A NAME="I1007"></A>The
following <I>Specialized Needs Annexes</I> define features that are needed
by certain application areas: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<UL Class="Bulleted"><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>9</FONT></DIV>
<UL Class="Bulleted"><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>10</FONT></DIV>
<UL Class="Bulleted"><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>11</FONT></DIV>
<UL Class="Bulleted"><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>12</FONT></DIV>
<UL Class="Bulleted"><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>13</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC><A HREF="AA-H.html">Annex H</A>, ``<A HREF="AA-H.html">Safety
and Security</A>'' </LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>14</FONT></DIV>
<DIV Class="Wide" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1008"></A><A NAME="I1009"></A>The
core language and the Specialized Needs Annexes are normative, except
that the material in each of the items listed below is informative: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>15</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>Text under a NOTES or Examples heading.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>16</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>Each clause or subclause whose title starts with the word
``Example'' or ``Examples''. </LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>17</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;All implementations shall conform to the core
language. In addition, an implementation may conform separately to one
or more Specialized Needs Annexes.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>18</FONT></DIV>
<DIV Class="Wide" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1010"></A><A NAME="I1011"></A><A NAME="I1012"></A>The
following Annexes are informative: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>19</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC><A HREF="AA-K.html">Annex K</A>, ``<A HREF="AA-K.html">Language-Defined
Attributes</A>''</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>20</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC><A HREF="AA-L.html">Annex L</A>, ``<A HREF="AA-L.html">Language-Defined
Pragmas</A>''</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>21</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC><A HREF="AA-M.html">Annex M</A>, ``<A HREF="AA-M.html">Implementation-Defined
Characteristics</A>''</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>22</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC><A HREF="AA-N.html">Annex N</A>, ``<A HREF="AA-N.html">Glossary</A>''</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>23</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC><A HREF="AA-P.html">Annex P</A>, ``<A HREF="AA-P.html">Syntax
Summary</A>'' </LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>23.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>The idea of
the Specialized Needs Annexes is that implementations can choose to target
certain application areas. For example, an implementation specifically
targeted to embedded machines might support the application-specific
features for Real-time Systems, but not the application-specific features
for Information Systems.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>23.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>The Specialized Needs Annexes
extend the core language only in ways that users, implementations, and
standards bodies are allowed to extend the language; for example, via
additional library units, attributes, representation items (see <A HREF="AA-13-1.html">13.1</A>),
<FONT FACE="Arial, Helvetica">pragma</FONT>s, and constraints on semantic
details that are left unspecified by the core language. Many implementations
already provide much of the functionality defined by Specialized Needs
Annexes; our goal is to increase uniformity among implementations by
defining standard ways of providing the functionality.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>23.c</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>We recommend that the validation
procedures allow implementations to validate the core language, plus
any set of the Specialized Needs Annexes. We recommend that implementations
<I>not</I> be allowed to validate a portion of one of the Specialized
Needs Annexes, although implementations can, of course, provide unvalidated
support for such portions. We have designed the Specialized Needs Annexes
assuming that this recommendation is followed. Thus, our decisions about
what to include and what not to include in those annexes are based on
the assumption that each annex is validated in an ``all-or-nothing''
manner.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>23.d</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>An implementation may, of course,
support extensions that are different from (but possibly related to)
those defined by one of the Specialized Needs Annexes. We recommend that,
where appropriate, implementations do this by adding library units that
are children of existing language-defined library packages.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>23.e</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>An implementation should not provide
extensions that conflict with those defined in the Specialized Needs
Annexes, in the following sense: Suppose an implementation supports a
certain error-free program that uses only functionality defined in the
core and in the Specialized Needs Annexes. The implementation should
ensure that that program will still be error free in some possible full
implementation of all of the Specialized Needs Annexes, and that the
semantics of the program will not change. For example, an implementation
should not provide a package with the same name as one defined in one
of the Specialized Needs Annexes, but that behaves differently, <I>even
if that implementation does not claim conformance to that Annex</I>.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>23.f</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>Note that the Specialized Needs
Annexes do not conflict with each other; it is the intent that a single
implementation can conform to all of them. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>24</FONT></DIV>
<DIV Class="Wide">&nbsp;&nbsp;&nbsp;&nbsp;Each section is divided into clauses and subclauses
that have a common structure. Each section, clause, and subclause first
introduces its subject. After the introductory text, text is labeled
with the following headings: </DIV>

<H4 ALIGN=CENTER>Language Design Principles</H4>
<DIV Class="Paranum"><FONT SIZE=-2>24.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>These are not rules of the language,
but guiding principles or goals used in defining the rules of the language.
In some cases, the goal is only partially met; such cases are explained.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>24.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>This is not part of the definition
of the language, and does not appear in the RM95. </FONT></DIV>

<H4 ALIGN=CENTER>Syntax</H4>
<DIV Class="Paranum"><FONT SIZE=-2>25</FONT></DIV>
<DIV Class="SyntaxIndented"><A NAME="I1013"></A><A NAME="I1014"></A><A NAME="I1015"></A><A NAME="I1016"></A><A NAME="I1017"></A>Syntax
rules (indented). </DIV>

<H4 ALIGN=CENTER>Name Resolution Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>26</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1018"></A><A NAME="I1019"></A><A NAME="I1020"></A>Compile-time
rules that are used in name resolution, including overload resolution.
</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>26.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>These rules
are observed at compile time. (We say ``observed'' rather than ``checked,''
because these rules are not individually checked. They are really just
part of the Legality Rules in Section 8 that require exactly one interpretation
of each constituent of a complete context.) The only rules used in overload
resolution are the Syntax Rules and the Name Resolution Rules.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>26.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>When dealing with non-overloadable
declarations it sometimes makes no semantic difference whether a given
rule is a Name Resolution Rule or a Legality Rule, and it is sometimes
difficult to decide which it should be. We generally make a given rule
a Name Resolution Rule only if it has to be. For example, ``The <FONT FACE="Arial, Helvetica">name</FONT>,
if any, in a <FONT FACE="Arial, Helvetica">raise_statement</FONT> shall
be the <FONT FACE="Arial, Helvetica">name</FONT> of an exception.'' is
under ``Legality Rules.'' </FONT></DIV>

<H4 ALIGN=CENTER>Legality Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>27</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1021"></A><A NAME="I1022"></A><A NAME="I1023"></A>Rules
that are enforced at compile time. <A NAME="I1024"></A><A NAME="I1025"></A>A
construct is <I>legal</I> if it obeys all of the Legality Rules. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>27.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>These rules
are not used in overload resolution.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>27.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>Note that run-time errors are
always attached to exceptions; for example, it is not ``illegal'' to
divide by zero, it just raises an exception. </FONT></DIV>

<H4 ALIGN=CENTER>Static Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>28</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1026"></A><A NAME="I1027"></A>A definition
of the compile-time effect of each construct. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>28.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>The most important
compile-time effects represent the effects on the symbol table associated
with declarations (implicit or explicit). In addition, we use this heading
as a bit of a grab bag for equivalences, package specifications, etc.
For example, this is where we put statements like so-and-so is equivalent
to such-and-such. (We ought to try to really mean it when we say such
things!) Similarly, statements about magically-generated implicit declarations
go here. These rules are generally written as statements of fact about
the semantics, rather than as a you-shall-do-such-and-such sort of thing.
</FONT></DIV>

<H4 ALIGN=CENTER>Post-Compilation Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>29</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1028"></A><A NAME="I1029"></A><A NAME="I1030"></A><A NAME="I1031"></A>Rules
that are enforced before running a partition. <A NAME="I1032"></A><A NAME="I1033"></A>A
partition is legal if its compilation units are legal and it obeys all
of the Post-Compilation Rules. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>29.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>It is not specified
exactly when these rules are checked, so long as they are checked for
any given partition before that partition starts running. An implementation
may choose to check some such rules at compile time, and reject <FONT FACE="Arial, Helvetica">compilation_unit</FONT>s
accordingly. Alternatively, an implementation may check such rules when
the partition is created (usually known as ``link time''), or when the
partition is mapped to a particular piece of hardware (but before the
partition starts running). </FONT></DIV>

<H4 ALIGN=CENTER>Dynamic Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>30</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1034"></A><A NAME="I1035"></A><A NAME="I1036"></A><A NAME="I1037"></A>A
definition of the run-time effect of each construct. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>30.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>This heading
describes what happens at run time. Run-time checks, which raise exceptions
upon failure, are described here. Each item that involves a run-time
check is marked with the name of the check -- these are the same check
names that are used in a <FONT FACE="Arial, Helvetica">pragma</FONT>
Suppress. Principle: Every check should have a name, usable in a <FONT FACE="Arial, Helvetica">pragma</FONT>
Suppress. </FONT></DIV>

<H4 ALIGN=CENTER>Bounded (Run-Time) Errors</H4>
<DIV Class="Paranum"><FONT SIZE=-2>31</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1038"></A><A NAME="I1039"></A>Situations
that result in bounded (run-time) errors (see <A HREF="AA-1-1-5.html">1.1.5</A>).
</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>31.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>The ``bounds''
of each such error are described here -- that is, we characterize the
set of all possible behaviors that can result from a bounded error occurring
at run time. </FONT></DIV>

<H4 ALIGN=CENTER>Erroneous Execution</H4>
<DIV Class="Paranum"><FONT SIZE=-2>32</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1040"></A><A NAME="I1041"></A>Situations
that result in erroneous execution (see <A HREF="AA-1-1-5.html">1.1.5</A>).
</DIV>

<H4 ALIGN=CENTER>Implementation Requirements</H4>
<DIV Class="Paranum"><FONT SIZE=-2>33</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1042"></A>Additional requirements for
conforming implementations. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>33.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>...as opposed
to rules imposed on the programmer. An example might be, ``The smallest
representable duration, Duration'Small, shall not be greater than twenty
milliseconds.''</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>33.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>It's really just an issue of how
the rule is worded. We could write the same rule as ``The smallest representable
duration is an implementation-defined value less than or equal to 20
milliseconds'' and then it would be under ``Static Semantics.'' </FONT></DIV>

<H4 ALIGN=CENTER>Documentation Requirements</H4>
<DIV Class="Paranum"><FONT SIZE=-2>34</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1043"></A>Documentation requirements
for conforming implementations. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>34.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>These requirements
are beyond those that are implicitly specified by the phrase ``implementation
defined''. The latter require documentation as well, but we don't repeat
these cases under this heading. Usually this heading is used for when
the description of the documentation requirement is longer and does not
correspond directly to one, narrow normative sentence. </FONT></DIV>

<H4 ALIGN=CENTER>Metrics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>35</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1044"></A>Metrics that are specified
for the time/space properties of the execution of certain language constructs.
</DIV>

<H4 ALIGN=CENTER>Implementation Permissions</H4>
<DIV Class="Paranum"><FONT SIZE=-2>36</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1045"></A>Additional permissions given
to the implementer. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>36.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>For example,
``The implementation is allowed to impose further restrictions on the
record aggregates allowed in code statements.'' When there are restrictions
on the permission, those restrictions are given here also. For example,
``An implementation is allowed to restrict the kinds of subprograms that
are allowed to be main subprograms. However, it shall support at least
parameterless procedures.'' -- we don't split this up between here and
``Implementation Requirements.'' </FONT></DIV>

<H4 ALIGN=CENTER>Implementation Advice</H4>
<DIV Class="Paranum"><FONT SIZE=-2>37</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1046"></A><A NAME="I1047"></A>Optional
advice given to the implementer. The word ``should'' is used to indicate
that the advice is a recommendation, not a requirement. It is implementation
defined whether or not a given recommendation is obeyed. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>37.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Implementation defined: </B>Whether
or not each recommendation given in Implementation Advice is followed.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>37.b/1</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>The advice
generally shows the intended implementation, but the implementer is free
to ignore it. The implementer is the sole arbiter of whether or not the
advice has been obeyed, if not, whether the reason is a good one, and
whether the required documentation is sufficient. <S><A NAME="I1048"></A><A NAME="I1049"></A></S>It
would be wrong for the <U>ACATS</U><S>ACVC</S> to enforce any of this
advice.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>37.c</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>For example, ``Whenever possible,
the implementation should choose a value no greater than fifty microseconds
for the smallest representable duration, Duration'Small.''</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>37.d</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>We use this heading, for example,
when the rule is so low level or implementation-oriented as to be untestable.
We also use this heading when we wish to encourage implementations to
behave in a certain way in most cases, but we do not wish to burden implementations
by requiring the behavior. </FONT></DIV>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>38</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>1&nbsp;&nbsp;<A NAME="I1050"></A>Notes
emphasize consequences of the rules described in the (sub)clause or elsewhere.
This material is informative. </FONT></DIV>

<H4 ALIGN=CENTER>Examples</H4>
<DIV Class="Paranum"><FONT SIZE=-2>39</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;Examples illustrate the possible forms of the
constructs described. This material is informative. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>39.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>&nbsp;<BR>
 <BR>
The next three headings list all language changes between Ada 83 and
Ada 95. Language changes are any change that changes the set of text
strings that are legal Ada programs, or changes the meaning of any legal
program. Wording changes, such as changes in terminology, are not language
changes. Each language change falls into one of the following three categories:
</FONT></DIV>

<H4 ALIGN=CENTER>Inconsistencies With Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>39.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><A NAME="I1051"></A>This heading
lists all of the upward inconsistencies between Ada 83 and Ada 95. Upward
inconsistencies are situations in which a legal Ada 83 program is a legal
Ada 95 program with different semantics. This type of upward incompatibility
is the worst type for users, so we only tolerate it in rare situations.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>39.c</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>(Note that the semantics of a
program is not the same thing as the behavior of the program. Because
of Ada's indeterminacy, the ``semantics'' of a given feature describes
a <I>set</I> of behaviors that can be exhibited by that feature. The
set can contain more than one allowed behavior. Thus, when we ask whether
the semantics changes, we are asking whether the set of behaviors changes.)</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>39.d</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>This is not part of the definition
of the language, and does not appear in the RM95. </FONT></DIV>

<H4 ALIGN=CENTER>Incompatibilities With Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>39.e</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><A NAME="I1052"></A>This heading
lists all of the upward incompatibilities between Ada 83 and Ada 95,
except for the ones listed under ``Inconsistencies With Ada 83'' above.
These are the situations in which a legal Ada 83 program is illegal in
Ada 95. We do not generally consider a change that turns erroneous execution
into an exception, or into an illegality, to be upwardly incompatible.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>39.f</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>This is not part of the definition
of the language, and does not appear in the RM95. </FONT></DIV>

<H4 ALIGN=CENTER>Extensions to Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>39.g</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><A NAME="I1053"></A>This heading
is used to list all upward compatible language changes; that is, language
extensions. These are the situations in which a legal Ada 95 program
is not a legal Ada 83 program. The vast majority of language changes
fall into this category.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>39.h</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>This is not part of the definition
of the language, and does not appear in the RM95.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>39.i</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>&nbsp;<BR>
 <BR>
As explained above, the next heading does not represent any language
change: </FONT></DIV>

<H4 ALIGN=CENTER>Wording Changes from Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>39.j</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><A NAME="I1054"></A>This heading
lists some of the non-semantic changes between RM83 and the RM95. It
is incomplete; we have not attempted to list all wording changes, but
only the ``interesting'' ones.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>39.k</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>This is not part of the definition
of the language, and does not appear in the RM95. </FONT></DIV>

<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-1-1-1.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-1-1-3.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>