
                              




                              




                           Introducing Ada 9X



                          Ada 9X Project Report 



                             February 1993


        Office of the Under Secretary of Defense for Acquisition 

                         Washington, DC  20301

         Approval for public release; distribution is unlimited


                   Copyright 1993 Intermetrics, Inc.
           Reprinting permitted if accompanied by this statement 
                              

This work is sponsored by the Ada 9X Project Office under contract
F08635-90-C-0066.






                     Executive Summary



Modern society  is becoming  very dependent  upon  software.
Our transport  systems, financial  systems, medical  systems
and defense  systems all  depend to a very large degree upon
software.   As a  consequence the safety of many human lives
and much  property now depends upon the reliable functioning
of software.  Moreover, the fall in the cost of hardware has
now made possible the development of large software systems.
   Ada is  a programming  language of  special value  in the
development of  large programs  which  must  work  reliably.
This  applies  to  most  defense  applications  (from  which
background Ada  evolved) and  extends  to  many  application
domains.   Indeed over  half  the  Ada  programs  now  being
developed are for non-defense applications.
   This document  introduces Ada  9X, the  revised  standard
which increases  the  flexibility  of  Ada  thus  making  it
applicable  to   wider  domains  but  retains  the  inherent
reliability for  which Ada  has  become  noted.    Important
aspects of Ada 9X include

*    Object Oriented  Programming.  Ada 9X includes full OOP
     facilities giving  the flexibility  of  programming  by
     extension which  enables programs  to be  extended  and
     maintained at lower cost.

*    Hierarchical Libraries.    The  library  mechanism  now
     takes a  hierarchical form  which is  valuable for  the
     control and decomposition of large programs.

*    Protected Objects.   The  tasking features  of Ada  are
     enhanced to  incorporate a very efficient mechanism for
     multitask synchronized  access to shared data.  This is
     of special value for hard realtime systems.
   
   These enhancements  to Ada  make Ada  9X  an  outstanding
language.   It adds the flexibility of languages such as C++
to the  reliable Software Engineering framework provided and
proven by Ada 83 over the past ten years.
   Ada  9X   is  a   natural  evolution  of  Ada  83.    The
enhancements have  been made without disturbing the existing
investment in  Ada 83  programs  and  programmers.    Upward
compatibility has been a prime goal and has been achieved.
   This document  contains four  chapters.   Chapter 1 gives
the background  to the  development  process  including  the
capture of  the requirements  from the  existing and  future
user community.   Chapter 2 introduces the highlights of the
language,  especially  the  three  topics  mentioned  above,
Objected Oriented  Programming, Hierarchical  Libraries  and
Protected Objects;  it is  in a  tutorial style.   Chapter 3
gives an  overview of the whole language showing how the new
facilities fit into the overall framework.  Finally, Chapter
4 addresses  the issue  of upward  compatibility with Ada 83
and shows that for normal programs the goal of compatibility
has been  achieved.   This document will be of special value
to  program   managers,  team   leaders  and   all  software
professionals with  concern for the organized development of
software.
   Ada 9X  deserves the  attention of  all  members  of  the
computing  profession.    It  is  a  coherent  and  reliable
foundation vehicle  for developing the major applications of
the next decade.









     Acknowledgements

     This document  was prepared  by the  author  as  a
     consultant to  the Ada  9X Revision  Team based at
     Intermetrics Inc.  It will form the basis for part
     of the  final  Ada  9X  Rationale  which  will  be
     delivered with the Ada 9X Reference Manual.
        The  author   is  extremely  grateful  for  the
     support and  encouragement of  all members  of the
     Intermetrics team  and of  Christine Anderson, the
     Ada 9X  Project Manager.   Special thanks are also
     due to  Bill Taylor  of Transition  Technology Ltd
     for providing the material upon which Chapter 4 is
     based.
        
     John Barnes,
     Reading, England
     
     February 1993.




Contents




Executive Summary

Acknowledgements

1   Evolution of Ada 9X

   1.1  The Revision Process

   1.2  The Requirements

   1.3  The Main User Needs

   1.4  The Approach

   1.5  Using this Document

2   Highlights of Ada 9X

   2.1  Programming by Extension

   2.2  Class Wide Programming

   2.3  Abstract Types and Subprograms

   2.4  Summary of Type Extension

   2.5  Dynamic Selection

   2.6  Other Access Types

   2.7  Hierarchical Libraries

   2.8  Private Child Units

   2.9  Protected Types

   2.10  Task Scheduling and Timing

   2.11  Generic Parameters

   2.12  Other Improvements

   2.13  The Annexes

   2.14  Conclusion

3   Overview of the Ada Language

   3.1  Objects, Types, Classes and Operations

       3.1.1  Objects and Their Types

       3.1.2  Types, Classes and Views

       3.1.3  Operations and Overloading

       3.1.4  Class Wide Types and Dispatching

       3.1.5  Abstraction and Static Evaluation

   3.2  Statements, Expressions and Elaboration

       3.2.1  Declarative Parts

       3.2.2  Assignments and Control Structures

       3.2.3  Expressions

   3.3  System Construction

       3.3.1  Program Units

       3.3.2  Private Types and Information Hiding

       3.3.3  Object Oriented Programming

       3.3.4  Generic Units

       3.3.5  Separate Compilation

       3.3.6  Library Units

       3.3.7  Program Composition

       3.3.8  Interfacing to Other Languages

   3.4  Multitasking

       3.4.1  Tasks

       3.4.2  Communication and Synchronization

       3.4.3  Protected Objects

       3.4.4  Protected Operations and Entries

       3.4.5  Select Statements

       3.4.6  Timing

       3.4.7  Scheduling

   3.5  Exception Handling

   3.6  Low Level Programming

       3.6.1  Pragmas

       3.6.2  Specifying Representations

       3.6.3  Unprotected Shared Variables

       3.6.4  Unchecked Programming

   3.7  Standard Library

       3.7.1  Input Output

   3.8  Application Specific Facilities

   3.9  Summary

4   Upward Compatibility

   4.1  Reserved Words

   4.2  Type Character

   4.3  Library Package Bodies

   4.4  Unconstrained Generic Types

   4.5  Numeric Error

   4.6  Other Incompatibilities

       4.6.1 Unlikely Inconsistencies

       4.6.2 Unlikely Incompatibilities

       4.6.3 Implementation Dependent Incompatibilities

       4.6.4 Error Incompatibilities

   4.7  Conclusion

References 
