Foreword vii
Preface ix
Part 1 An Overview 1
1 Introduction3
1.1 Standard development 3
1.2 Software engineering 4
1.3 Evolution and abstraction 6
1.4 Structure and objectives of this book 8
1.5 References 10
2 Simple Concepts 11
2.1 Key goals 11
2.2 Overall structure 12
2.3 The scalar type model 17
2.4 Arrays and records 19
2.5 Access types 22
2.6 Errors and exceptions 23
2.7 Terminology 26
3 Abstraction 27
3.1 Packages and private types 27
3.2 Objects and inheritance 30
3.3 Classes and polymorphism 34
3.4 Genericity 39
3.5 Object oriented terminology 41
3.6 Tasking42
4 Programs and Libraries 45
4.1 The hierarchical library 45
4.2 Input output 47
4.3 Numeric library50
4.4 Running a program 52
P1 Magic Moments 57
Part 2 Algorithmic Aspects 61
5 Lexical Style 63
5.1 Syntax notation 63
5.2 Lexical elements 64
5.3 Identifiers 65
5.4 Numbers 67
5.5 Comments 69
5.6 Pragmas
6 Scalar Types 71
6.1 Object declarations and assignments 71
6.2 Blocks and scopes 74
6.3 Types 76
6.4 Subtypes 77
6.5 Simple numeric types 80
6.6 Enumeration types 86
6.7 The type Boolean 88
6.8 Categories of types 92
6.9 Expression summary 94
7 Control Structures99
7.1 If statements 99
7.2 Case statements 103
7.3 Loop statements 107
7.4 Goto statements and labels 113
7.5 Statement classification 113
8 Arrays and Records 115
8.1 Arrays 115
8.2 Array types 120
8.3 Array aggregates 125
8.4 Characters and strings 131
8.5 Arrays of arrays and slices 134
8.6 One-dimensional array operations 137
8.7 Records 141
9 Subprograms 147
9.1 Functions 147
9.2 Operators 154
9.3 Procedures 156
9.4 Named and default parameters 162
9.5 Overloading 164
9.6 Declarations, scopes and visibility 165
10 Access Types 171
10.1 Flexibility versus integrity 171
10.2  p; Pool specific access types 172
10.3 Null exclusion and constraints 180
10.4 General access types 183
10.5 Anonymous access types
10.6 Accessibility 187
10.7 Access parameters 189
10.8 Access to subprograms 193
P2 Sylvan Sorter 199
Part 3 The Big Picture 203
11 Packages and Private Types 205
11.1 Packages 205
11.2 Private types 210
11.3 Primitive operations and derived types 216
11.4 Equality 222
11.5 Limited types 226
11.6 Resource management 230
12 Overall Structure 235
12.1 Library units 235
12.2 Subunits 239
12.3 Child library units 240
12.4 Private child units 245
12.5 Mutually dependent units
12.6 Scope, visibility and accessibility250
12.7 Renaming 253
12.8 Programs, partitions and elaboration 257
P3 Rational Reckoner261
13 Object Oriented Programming 265
13.1 Type extension 265
13.2 Polymorphism 271
13.3 Abstract types and interfaces 279
13.4 Primitive operations and tags 282
13.5 Views and redispatching 288
13.6 Private types and extensions 294
13.7 Controlled types 300
13.8 Multiple inheritance
13.9 Multiple implementations 305
14 Exceptions 311
14.1 Handling exceptions 311
14.2 Declaring and raising exceptions315
14.3 Checking and exceptions 320
14.4 Exception occurrences 322
14.5 Exception pragmas
14.6 Scope of exceptions 326
15 Numeric Types 331
15.1 Signed integer types 332
15.2 Modular types 338
15.3 Real types 340
15.4 Floating point types 341
15.5 Fixed point types 344
15.6 Decimal types 349
16 Parameterized Types 351
16.1 Discriminated record types 351
16.2 Default discriminants 356
16.3 Variant parts 361
16.4 Discriminants and derived types366
16.5 Access types and discriminants 369
16.6 Private types and discriminants 375
16.7 Access discriminants 376
17 Generics 381
17.1 Declarations and instantiations 381
17.2 Type parameters 386
17.3 Subprogram parameters395
17.4 Package parameters 401
17.5 Generic library units 406
18 Tasking 409
18.1 Parallelism 409
18.2 The rendezvous412
18.3 Timing and scheduling 416
18.4 Protected objects 420
18.5 Simple select statements 427
18.6 Timed and conditional calls 431
18.7 Concurrent types and activation 434
18.8 Termination, exceptions and ATC 440
18.9 Signalling and scheduling 446
18.10 Summary of structure 453
19 Object Oriented Techniques 463
19.1 Extension and composition 463
19.2 Examples of interfaces 466
19.3 Mixin inheritance
19.4 Containers 468
19.5 Iterators 472
19.6 Object factories479
19.7 Controlling abstraction 491
20 Tasking Techniques
20.1 Dynamic tasks
20.2 Multiprocessors
20.3 Synchronized interfaces
20.4 Discriminants
20.5 Task termination
20.6 Clocks and timers
20.7 The Ravenscar profile
P4 Super Sieve497
Part 4 Completing the Story 501
21 Predefined Library503
21.1 The package Standard 503
21.2 The package Ada 506
21.3 Characters and strings 508
21.4 Numerics 522
21.5 Input and output 526
21.6 Text input output 531
21.7 Streams 541
21.8 Environment commands545
P5 Wild Words 547
22 Container Library
22.1 Organization of library
22.2 Doubly linked lists
22.3 Vectors
22.4 Maps
22.5 Sets
22.6 Indefinite containers
22.7 Sorting
22.8 Summary table
23 Interfacing 551
23.1 Representations551
23.2 Unchecked programming 556
23.3 The package System 558
23.4 Storage pools 560
23.5 Other languages 563
P6 Playing Pools 565
24 The Specialized Annexes 569
24.1 Systems Programming 569
24.2 Real-Time Systems 571
24.3 Distributed Systems 573
24.4 Information Systems 575
24.5 Numerics 575
24.6 High Integrity Systems 578
25 Finale579
25.1 Names and expressions579
25.2 Type equivalence 582
25.3 Overall program structure 585
25.4 Portability 594
25.5 Final thoughts 597
Appendices601
A1 Reserved Words, Attributes and Pragmas 601
A1.1 Reserved words 601
A1.2 Predefined attributes 602
A1.3 Predefined pragmas 608
A2 Glossary 611
A3 Syntax 615
A3.1 Syntax rules 615
A3.2 Syntax index 629
Answers to Exercises 637
Bibliography 685
Index 687