!standard 0.3 (3) 05-05-23 AI95-00387/04 !standard 0.3 (5) !standard 0.3 (6) !standard 0.3 (32) !standard 0.3 (34) !standard 0.3 (38) !standard 0.3 (41) !standard 0.3 (42) !standard 0.3 (44) !standard 0.3 (45) !standard 0.3 (46) !standard 0.3 (47) !standard 0.3 (48) !standard 0.3 (49) !standard 0.3 (50) !standard 0.3 (51) !standard 0.3 (57) !class amendment 04-10-30 !status Amendment 200Y 04-12-01 !status ARG Approved 10-0-0 04-11-20 !status work item 04-10-30 !status received 04-10-30 !priority High !difficulty Easy !subject Introduction to Amendment !summary This revises the introduction to the International Standard in order to reflect the changes made by the Amendment. !problem We need a new Introduction. !proposal Old John was volunteered to write it. !wording Replace 0(3) by * Ada 95 Rationale. This gives an introduction to the new features of Ada incorporated in the 1995 edition of this Standard, and explains the rationale behind them. Programmers unfamiliar with Ada 95 should read this first. * Ada 2006 Rationale. This gives an introduction to the changes and new features in Ada 2006 (compared with the 1995 edition), and explains the rationale behind them. Programmers should read this rationale before reading this Standard in depth. Curiously the old version refers to "Rationale for the Ada Programming Language - 1995 edition". It was never called that to my mind. That was sort of the title for the Ada 83 rationale. Modify 0(5) thus ...all of the text in [the RM95]{this International Standard} ... Modify 0(6) thus ...[This revision]{The 1995 revision} to the language was designed ..., and efficiency. {This amended version provides further flexibility and adds more standardized packages within the framework provided by the 1995 revision.} Modify 0(32) thus ...The enumeration types Boolean, Character,[and] Wide_Character{, and Wide_Wide_Character} are predefined. Modify 0(34) thus ...The array types String,[and] Wide_String{, and Wide_Wide_String} are predefined. Add after 0(38) Interface types provide abstract models from which other interfaces and types may be composed and derived. This provides a reliable form of multiple inheritance. Interface types may also be implemented by synchronized types (task types and protected types) thereby enabling concurrent programming and inheritance to be merged. Modify 0(41) [Representation]{Aspect} clauses ... Modify 0(42) ...and other capabilities[(such as string manipulation and random number generation)] by means ...[Other standard library packages are defined in annexes of the standard to support systems with specialized requirements.] Add after 0(42) The predefined standard library packages provide facilities such as string manipulation, containers of various kinds (vectors, lists, maps etc.), mathematical functions, random number generation, and access to the execution environment. The specialized annexes define further predefined library packages and facilities with emphasis on areas such as real-time scheduling, interrupt handling, distributed systems, numerical computation, and high-integrity systems. Replace 0(44-51) This amended International Standard updates the edition of 1995 which replaced the first edition of 1987. In the 1995 edition, the following major language changes were incorporated: (The original list was a bit inconsistent. It started with noun clauses and then switched to sentences. And it needed changing to the past tense.) * Support for standard 8-bit and 16-bit characters was added. See clauses 2.1, 3.5.2, 3.6.3, A.1, A.3, and A.4. * The type model was extended to include facilities for object-oriented programming with dynamic polymorphism. See the discussions of classes, derived types, tagged types, record extensions, and private extensions in clauses 3.4, 3.9, and 7.3. Additional forms of generic formal parameters were allowed as described in clauses 12.5.1 and 12.7. * Access types were extended to allow an access value to designate a subprogram or an object declared by an object declaration as opposed to just an object allocated on a heap. See clause 3.10. * Efficient data-oriented synchronization was provided by the introduction of protected types. See clause 9.4. * The library structure was extended to allow library units to be organized into a hierarchy of parent and child units. See clause 10.1. * Additional support was added for interfacing to other languages. See Annex B. * The Specialized Needs Annexes were added to provide specific support for certain application areas: Replace 0(57) * Annex H, "High Integrity Systems" (originally "Safety and Security") Add after 0(57) Amendment 1 modifies the 1995 International Standard by making changes and additions that improve the capability of the language and the reliability of programs written in the language. In particular the changes were designed to improve the portability of programs, interfacing to other languages, and both the object-oriented and real-time capabilities. The following significant changes with respect to the 1995 edition are incorporated: * Support for program text is extended to cover the entire ISO/IEC 10646:2003 repertoire. Execution support now includes the 32-bit character set. See clauses 2.1, 3.5.2, 3.6.3, A.1, A.3, and A.4. * The object-oriented model has been improved by the addition of an interface facility which provides multiple inheritance and additional flexibility for type extensions. See clauses 3.4, 3.9, and 7.3. An alternative notation for calling operations more akin to that used in other languages has also been added. See clause 4.1.3. * Access types have been further extended to unify properties such as the ability to access constants and to exclude null values. See clause 3.10. Anonymous access types are now permitted more freely and anonymous access-to-subprogram types are introduced. See clauses 3.3, 3.6, 3.10, and 8.5.1. * The control of structure and visibility has been enhanced to permit mutually dependent references between units and finer control over access from the private part of a package. See clauses 3.10.1 and 10.1.2. In addition, limited types have been made more useful by the provision of aggregates, constants, and constructor functions. See clauses 4.3, 6.5, and 7.5. * The predefined environment has been extended to include additional time and calendar operations, improved string handling, a comprehensive container library, file and directory management, and access to environment variables. See clauses 9.6.1, A.4, A.16, A.17, and A.18. * Two of the Specialized Needs Annexes have been considerably enhanced: * The Real-Time Systems Annex now includes the Ravenscar profile for high-integrity systems, further dispatching policies such as Round Robin and Earliest Deadline First, support for timing events, and support for control of CPU time utilization. See clauses D.2, D.13, D.14, and D.15. * The Numerics Annex now includes support for real and complex vectors and matrices as previously defined in ISO/IEC 13813:1997 plus further basic operations for linear algebra. See clause G.3. * The overall reliability of the language has been enhanced by a number of improvements. These include new syntax which detects accidental overloading, as well as pragmas for making assertions and giving better control over the suppression of checks. See clauses 6.1, 11.4.2, and 11.5. !discussion The overall description has not been changed very much (this reflects the fact that this amendment is really a super polish to Ada 95 rather than a rebuild). Apart from minor changes to the opening remarks, the changes are: The mention of wide-wide characters and strings. This is perhaps unnecessary but the existing paragraphs lead one into doing that. A paragraph on interfaces was added. This is an important addition and merits mention at this high level. The existing one paragraph on the predefined environment has been extended to three paragraphs. Much of the additional capability is provided through library packages and the existing description was probably too weak anyway. The list of changes from Ada 83/87 to Ada 95 has been retained but placed in the past tense; a further list of major changes from Ada 95 to Ada 2006 has been added. !example Not applicable !corrigendum 0.3(3) @drepl @xbullet @dby @xbullet @xbullet !corrigendum 0.3(5) @drepl @xbullet @dby @xbullet !corrigendum 0.3(6) @drepl 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. @dby Ada was originally designed with three overriding concerns: program reliability and maintenance, programming as a human activity, and efficiency. The 1995 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. This amended version provides further flexibility and adds more standardized packages within the framework provided by the 1995 revision. !corrigendum 0.3(32) @drepl 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. @dby 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, Wide_Character, and Wide_Wide_Character are predefined. !corrigendum 0.3(34) @drepl 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. @dby 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, Wide_String, and Wide_Wide_String are predefined. !corrigendum 0.3(38) @dinsa 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. @dinst Interface types provide abstract models from which other interfaces and types may be composed and derived. This provides a reliable form of multiple inheritance. Interface types may also be implemented by synchronized types (task types and protected types) thereby enabling concurrent programming and inheritance to be merged. !corrigendum 0.3(41) @drepl 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. @dby Aspect 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. !corrigendum 0.3(42) @drepl 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. @dby The predefined environment of the language provides for input-output and other capabilities 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. The predefined standard library packages provide facilities such as string manipulation, containers of various kinds (vectors, lists, maps etc.), mathematical functions, random number generation, and access to the execution environment. The specialized annexes define further predefined library packages and facilities with emphasis on areas such as real-time scheduling, interrupt handling, distributed systems, numerical computation, and high-integrity systems. !corrigendum 0.3(44) @drepl This International Standard replaces the first edition of 1987. In this edition, the following major language changes have been incorporated: @dby This amended International Standard updates the edition of 1995 which replaced the first edition of 1987. In the 1995 edition, the following major language changes were incorporated: !corrigendum 0.3(45) @drepl @xbullet @dby @xbullet !corrigendum 0.3(46) @drepl @xbullet @dby @xbullet !corrigendum 0.3(47) @drepl @xbullet @dby @xbullet !corrigendum 0.3(48) @drepl @xbullet @dby @xbullet !corrigendum 0.3(49) @drepl @xbullet @dby @xbullet !corrigendum 0.3(50) @drepl @xbullet @dby @xbullet !corrigendum 0.3(51) @drepl @xbullet @dby @xbullet !corrigendum 0.3(57) @drepl @xinbull @dby @xinbull Amendment 1 modifies the 1995 International Standard by making changes and additions that improve the capability of the language and the reliability of programs written in the language. In particular the changes were designed to improve the portability of programs, interfacing to other languages, and both the object-oriented and real-time capabilities. The following significant changes with respect to the 1995 edition are incorporated: @xbullet @xbullet @xbullet @xbullet @xbullet @xbullet @xinbull @xinbull @xbullet !ACATS test Not applicable, this is just introductory material. !appendix *************************************************************