[Ada Information Clearinghouse]
Ada '83 Rationale: Detailed Table of Contents

"Rationale for the Design of the
Ada® Programming Language"

[Ada '83 Rationale, HTML Version]

Copyright ©1986 owned by the United States Government. All rights reserved.
Direct inquiries to the Ada Information Clearinghouse at adainfo@sw-eng.falls-church.va.us.

Detailed Table of Contents

About This Document
CHAPTER 1: Introduction and Preface
1.1 Goals
1.2 Structure
1.3 Acknowledgements
CHAPTER 2: Lexical and Textual Structure
2.1 Lexical Structure
2.2 Textual Structure
CHAPTER 3: Classical Programming
3.1 Simple Declarations: Variables and Constants
3.2 Declarative Parts - Linear Reading
3.3 Multiple Declarations
3.4 Names
3.5 Aggregates
3.6 Expressions
3.7 Statements
3.8 Assignment Statements - The Ada Model of Time
3.9 If Statements
3.10 Short-Circuit Control Forms
3.11 Case Statements
3.12 Loop Statements
CHAPTER 4: Types
4.1 Introduction
4.2 The Concept of Type
4.3 Type Equivalence
4.4 Constraints and Subtypes
4.4.1 Constraints
4.4.2 Subtypes
4.4.3 Evaluation of Constraints
4.5 Array Types
4.5.1 Slices and Sliding
4.5.2 Array Aggregates
4.5.3 Equivalence and Explicit Conversions
4.6 Record Types
4.6.1 Equivalence
4.6.2 Default Initialization of Record Components
4.7 Discriminants
4.7.1 Record Types with Variants
4.7.2 Discriminant Constraints - Record Subtypes
4.7.3 Denoting Components of Variants
4.7.4 Initialization of Discriminants
4.7.5 Discriminants and Type Composition
4.8 Mutability
4.8.1 The Case Against Static Mutability
4.8.2 Implementation Considerations
CHAPTER 5: Numeric Types
5.1 Introduction
5.1.1 Floating Point: The Problems
5.1.2 Fixed Point: The Problems
5.1.3 Overview of Numerics in Ada
5.2 The Integer Types
5.3 The Real Types
5.3.1 Floating Point Types
5.3.2 Fixed Point Types
5.3.3 A Semantic Model for Approximate Computation
5.4 Implementation Considerations
5.5 Conclusion
CHAPTER 6: Access Types
6.1 Introduction
6.2 Overview of the Issues
6.2.1 Conceptual Aspects
6.2.2 Reliability, Efficiency, and Implementation Issues
6.2.3 Goals for a Formulation of Access Types
6.3 Presentation of Access Types
6.3.1 Declaration of Access Types and Subtypes
6.3.2 Collections of Dynamically Allocated Objects
6.3.3 Access Variables, Allocators, and Access Constants
6.3.4 Component Selection, Indexed Components, and Value Assignments
6.3.5 Recursive Access Types
6.3.6 Access Objects as Parameters
6.3.7 Storage Management for Access Types
CHAPTER 7: Derived Types
7.1 Introduction
7.2 Informal Introduction to Derived Types
7.3 Simple Strong Typing
7.4 The Explanation of Numeric Types
7.5 The Ability to Inherit Literals
7.6 The Construction of Private Types
7.7 Achieving Transitivity of Visibility
7.8 Change of Representation
7.9 Conclusion - Achieving Copies in Ada
CHAPTER 8: Subprograms
8.1 Subprogram Declarations and Subprogram Bodies
8.2 Parameter Modes
8.2.1 Efficiency Issues of Parameter Passing Mechanisms
8.2.2 The Effect of Parameter Passing Mechanisms for Access Types
8.2.3 The Effect of Parameter Passing Mechanisms for Composite Types
8.2.4 The Ada Solution for Parameter Passing
8.3 Parameter Passing Notations
8.4 Function Subprograms
CHAPTER 9: Packages
9.1 Motivation
9.2 Informal Introduction to Packages
9.2.1 Named Collections of Entities
9.2.2 Groups of Related Subprograms
9.2.3 Private Types
9.3 Technical Issues
9.3.1 Visibility Control and Information Hiding
9.3.2 Guaranteeing Software Components
9.3.3 Influence of Separate Compilation on the Design of Packages
9.3.4 Initialization of Packages
9.3.5 Note on Visibility
9.3.6 Availability of the Properties of Types Defined Within Packages
9.3.7 Initialization of Objects of Private Types
9.3.8 Private Types with Discriminants
9.4 Summary and Conclusion
CHAPTER 10: Separate Compilation and Libraries
10.1 Introduction
10.2 Presentation of the Separate Compilation Facility
10.2.1 Bottom-Up Program Development
10.2.2 Hierarchical Program Development
10.2.3 Compilation Order
10.2.4 Recompilation Order
10.2.5 Execution of a Main Program
10.2.6 The Pragma ELABORATE
10.3 Methodological Impact of Separate Compilation
10.4 The Program Library
10.5 The Implementation of Separate Compilation
10.5.1 Principle of Separate Compilation
10.5.2 Details of the Actions Performed by the Compiler
10.5.3 Treatment of Package Bodies
10.5.4 Summary of the Information Contained in a Library File
10.6 Summary and Conclusion
CHAPTER 11: General Program Structure - Visibility and Overloading
11.1 Introduction
11.2 Program Structure
11.3 Visibility Rules
11.3.1 Basic Visibility Model
11.3.2 Naming Conventions: Expanded Names and Use Clauses
11.3.3 Visibility Rules for Record Types
11.3.4 Renaming
11.4 Overloading
11.4.1 Overloading of Operators
11.4.2 Overloading of Names
11.4.3 Overloading of Literals
11.5 Overload Resolution
11.5.1 Context of Overload Resolution
11.5.2 Information Used to Resolve Overloading
11.5.3 Ambiguity
CHAPTER 12: Generic Units
12.1 Introduction
12.2 Informal Presentation of Generic Units
12.2.1 Generic Formal Parts
12.2.2 Generic Instantiations
12.2.3 Private Types as Generic Formal Types
12.2.4 Other Forms of Generic Formal Types
12.2.5 Default Parameters
12.3 The Use of Generic Units
12.3.1 Examples of Generic Functions
12.3.2 An Example of a Generic Package
12.3.3 A Generic Package with Tasks
12.3.4 A More Complicated Example
12.4 Rationale for the Formulation of Generic Units
12.4.1 Explicit Instantiation of Generic Units
12.4.2 Generic Formal Parameters: The Contract Model
12.4.3 Default Generic Parameters
CHAPTER 13: Tasking
13.1 Introduction
13.2 Presentation of the Tasking Facility
13.2.1 Tasks: Textual Layout
13.2.2 Task Execution
13.2.3 Visibility Rules
13.2.4 Entries and the Accept Statement
13.2.5 The Select Statement
13.2.6 Timing
13.2.7 Timed and Conditional Communication
13.2.8 Interrupts
13.2.9 Task Types
13.2.10 The Terminate Alternative
13.2.11 Families, Entries and Scheduling
13.3 Rationale for the Design of the Rendezvous Facilities
13.3.1 Early Primitives
13.3.2 The Rendezvous Concept
13.4 Packages and Tasks
CHAPTER 14: Exception Handling
14.1 Introduction
14.2 Presentation of Exception Handling in Ada
14.2.1 Declaration of Exceptions
14.2.2 Exception Handlers
14.2.3 The Raise Statement
14.2.4 Association of Handlers with Exceptions
14.2.5 Raising the Same Exception Again
14.2.6 Suppressing Checks
14.2.7 Order of Exceptions
14.3 Examples
14.3.1 Matrix Inversion
14.3.2 Division
14.3.3 A File Example
14.3.4 A Package Example
14.3.5 Example of Last Wishes
14.4 Tasks and Exceptions
14.4.1 Exceptions During Task Activation
14.4.2 Exceptions Raised During Communication Between Tasks
14.4.3 Abnormal Situations in an Accept Statement
14.4.4 Example of Exceptions in a Rendezvous
14.5 Technical Issues
14.5.1 Exceptions Raised During the Elaboration of Declarations
14.5.2 Propagation of an Exception Beyond its Scope
14.5.3 Suppression of Checks
14.5.4 Implementation of Exception Handling
14.5.5 The Case Against Asynchronous Exceptions
14.5.6 Proving Programs with Exceptions
CHAPTER 15: Representation Clauses and Machine Dependences
15.1 The Separation Principle
15.2 Types and Data Representation
15.3 Multiple Representations and Change of Representation
15.3.1 A Canonical Example of Changes of Representation
15.3.2 One Type - One Representation Principle
15.3.3 Explicit Type Conversion and Change of Representation
15.3.4 Implementation of Representation Changes
15.4 Presentation of the Data Representation Facility
15.4.1 Representation Pragmas
15.4.2 Length Clauses
15.4.3 Record Representation Clauses
15.4.4 Address Clauses
15.4.5 Enumeration Representation Clauses
15.5 Enumeration Types with Noncontiguous Representations
15.5.1 Assignment and Comparison with Noncontiguous Enumeration Types
15.5.2 Indexing and Case Statements with Noncontiguous Enumeration Types
15.5.3 Iteration Over Noncontiguous Enumeration Types
15.5.4 Character Types
15.6 Configuration Specification and Environment Enquiries
15.6.1 The Package SYSTEM
15.6.2 Pragmas for Configuration Specification
15.6.3 Representation Attributes
15.6.4 Configuration Specification and Conditional Compilation
15.7 Interface with Other Languages
15.8 Unchecked Conversions
CHAPTER 16: Input-Output
16.1 Introduction
16.2 Basic Requirements
16.3 Designation of Files
16.3.1 Access Control
16.3.2 Default Files
16.4 Indexed and Sequential Files
16.5 Text Files
16.5.1 Overloading PUT and GET
16.5.2 Generic Treatment of Numeric and Enumeration Types
16.5.3 Use of Default Parameters for Formatting
16.6 Exceptions and Renaming
16.7 Low Level Input-Output
16.8 Conclusion
Bibliography

Index


NEXTPREVIOUSUPTOCINDEX
Address any questions or comments to adainfo@sw-eng.falls-church.va.us.