Ada Programming/Ada 2005
From Wikibooks, the open-content textbooks collection
Contents |
This is an overview of the major features that are available in the new Ada standard (accepted by ISO in January 2007; to differentiate it from its predecessors Ada 83 and Ada 95, the informal name Ada 2005 is generally agreed on). For the rationale and a more detailed (and very technical) description, see the draft of the Amendment to the Ada Reference Manual following the links to the last version of every Ada Issue document (AI).
Although the standard is now published, not all compilers will be able to handle it. Many of these additions are already implemented by the following Free Software compilers:
- GNAT GPL Edition
- GCC 4.1
- GNAT Pro 6.0.2 (the AdaCore supported version) is a complete implementation.
After downloading and installing any of them, remember to use the -gnat05 switch when compiling Ada 2005 code. Note that in GNAT GPL 2007 Edition Ada 2005 is the default mode.
[edit] Language features
[edit] Character set
Not only does Ada 2005 now support a new 32-bit character type — called Wide_Wide_Character — but the source code itself may be of this extended character set as well. Thus Russians and Indians, for example, will be able to use their native language in identifiers and comments. And mathematicians will rejoice: The whole Greek and fractur character sets are available for identifiers. For example, Ada.Numerics will be extended with a new constant:
π : constant := Pi;
This is not a new idea — GNAT always had the -gnatic compiler option to specify the character set [1]. But now this idea has become standard, so all Ada compilers will need to support Unicode 4.0 for identifiers — as the new standard requires.
See also:
[edit] Interfaces
Interfaces allow for a limited form of multiple inheritance similar to Java and C#.
You find a full description here: Ada Programming/OO.
See also:
[edit] Union
In addition to Ada's safe variant record an unchecked C style union is now available.
You can find a full description here: Ada Programming/Types/record#Union.
See also:
- AI-00216 Unchecked unions -- variant records with no run-time discriminant
- Annex B.3.3 Pragma Unchecked_Union (Annotated)
[edit] With
The with statement got a massive upgrade. First there is the new limited with which allows two packages to with each other. Then there is private with to make a package only visible inside the private part of the specification.
See also:
[edit] Access types
[edit] Not null access
An access type definition can specify that the access type can never be null.
See Ada Programming/Types/access#Not null access.
See also: AI-00231 Access-to-constant parameters and null-excluding access subtypes
[edit] Anonymous access
The possible uses of anonymous access types are extended. They are allowed virtually in every type or object definition, including access to subprogram parameters. Anonymous access types may point to constant objects as well. Also, they could be declared to be not null.
With the addition of the following operations in package Standard, it is possible to test the equality of anonymous access types.
function "=" (Left, Right : universal_access) return Boolean; function "/="(Left, Right : universal_access) return Boolean;
See Ada Programming/Types/access#Anonymous access.
See also:
- AI-00230 Generalized use of anonymous access types
- AI-00385 Stand-alone objects of anonymous access types
- AI-10318 Limited and anonymous access return types
[edit] Language library
[edit] Containers
A major addition to the language library is the generic packages for containers. If you are familiar with the C++ STL, you will likely feel very much at home using Ada.Containers. One thing, though: Ada is a block structured language. Many ideas of how to use the STL employ this feature of the language. For example, local subprograms can be supplied to iteration schemes.
The original Ada Issue text AI-20302 Container library has now been transformed into A.18 Containers (Annotated).
If you know how to write Ada programs, and have a need for vectors, lists, sets, or maps (tables), please have a look at the AI-20302 AI Text mentioned above. There is an !example section in the text explaining the use of the containers in some detail. Matthew Heaney provides a number of demonstration programs with his reference implementation of AI-302 (Ada.Containers) which you can find at tigris.
In Ada Programming/Containers you will find a demo using containers.
Historical side note: The C++ STL draws upon the work of David R. Musser and Alexander A. Stepanov. For some of their studies of generic programming, they had been using Ada 83. The Stepanov Papers Collection has a few publications available.
[edit] Scan Filesystem Directories and Environment Variables
See also:
[edit] Numerics
Besides the new constant of package Ada.Numerics (see Character Set above), the most important addition are the packages to operate with vectors and matrices.
See also:
(Related note on Ada programming tools: AI-388 contains an interesting assessment of how compiler writers are bound to perpetuate the lack of handling of international characters in programming support tools for now. As an author of Ada programs, be aware that your tools provider or Ada consultant could recommend that the program text be 7bit ASCII only.)
[edit] Real-Time and High Integrity Systems
See also:
- AI-00297 Timing events
- AI-00307 Execution-Time Clocks
- AI-00354 Group execution-time budgets
- AI-10266 Task termination procedure
- AI-00386 Further functions returning Time_Span values
[edit] Ravenscar profile
See also:
- AI-00249 Ravenscar profile for high-integrity systems
- AI-00305 New pragma and additional restriction identifiers for real-time systems
- AI-00347 Title of Annex H
- AI-00265 Partition Elaboration Policy for High-Integrity Systems
[edit] New scheduling policies
See also:
- AI-00355 Priority Specific Dispatching including Round Robin
- AI-00357 Support for Deadlines and Earliest Deadline First Scheduling
- AI-00298 Non-Preemptive Dispatching
[edit] Dynamic priorities for protected objects
See also: AI-00327 Dynamic ceiling priorities
[edit] Summary of what's new
[edit] New keywords
[edit] New pragmas
- pragma Assert
- pragma Assertion_Policy
- pragma Detect_Blocking
- pragma No_Return
- pragma Partition_Elaboration_Policy
- pragma Preelaborable_Initialization
- pragma Priority_Specific_Dispatching
- pragma Profile
- pragma Relative_Deadline
- pragma Unchecked_Union
- pragma Unsuppress
[edit] New attributes
[edit] New packages
- Assertions:
- Container library:
- Ada.Containers
- Ada.Containers.Vectors
- Ada.Containers.Doubly_Linked_Lists
- Ada.Containers.Generic_Array_Sort (generic procedure)
- Ada.Containers.Generic_Constrained_Array_Sort (generic procedure)
- Ada.Containers.Hashed_Maps
- Ada.Containers.Ordered_Maps
- Ada.Containers.Hashed_Sets
- Ada.Containers.Ordered_Sets
- Ada.Containers.Indefinite_Vectors
- Ada.Containers.Indefinite_Doubly_Linked_Lists
- Ada.Containers.Indefinite_Hashed_Maps
- Ada.Containers.Indefinite_Ordered_Maps
- Ada.Containers.Indefinite_Hashed_Sets
- Ada.Containers.Indefinite_Ordered_Sets
- Vector and matrix manipulation:
- General OS facilities:
- String hashing:
- Ada.Strings.Hash (generic function)
- Ada.Strings.Fixed.Hash (generic function)
- Ada.Strings.Bounded.Hash (generic function)
- Ada.Strings.Unbounded.Hash (generic function)
- Ada.Strings.Wide_Hash (generic function)
- Ada.Strings.Wide_Fixed.Wide_Hash (generic function)
- Ada.Strings.Wide_Bounded.Wide_Hash (generic function)
- Ada.Strings.Wide_Unbounded.Wide_Hash (generic function)
- Ada.Strings.Wide_Wide_Hash (generic function)
- Ada.Strings.Wide_Wide_Fixed.Wide_Wide_Hash (generic function)
- Ada.Strings.Wide_Wide_Bounded.Wide_Wide_Hash (generic function)
- Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Hash (generic function)
- Time operations:
- Tagged types:
- Ada.Tags.Generic_Dispatching_Constructor (generic function)
- Text packages:
- Wide_Wide_Character packages:
- Ada.Strings.Wide_Wide_Bounded
- Ada.Strings.Wide_Wide_Fixed
- Ada.Strings.Wide_Wide_Maps
- Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants
- Ada.Strings.Wide_Wide_Unbounded
- Ada.Wide_Wide_Text_IO
- Ada.Wide_Wide_Text_IO.Complex_IO
- Ada.Wide_Wide_Text_IO.Editing
- Ada.Wide_Wide_Text_IO.Text_Streams
- Ada.Wide_Wide_Text_IO.Unbounded_IO
- Execution-time clocks:
- Timing events:
- Task termination procedures:
[edit] See also
[edit] Wikibook
- Ada Programming/Object Orientation
- Ada Programming/Types/access
- Ada Programming/Keywords
- Ada Programming/Keywords/and
- Ada Programming/Keywords/interface
- Ada Programming/Attributes
- Ada Programming/Pragmas
- Ada Programming/Pragmas/Restrictions
- Ada Programming/Libraries/Ada.Containers
- Ada Programming/Libraries/Ada.Directories
[edit] Pages in the category Ada 2005
[edit] External links
[edit] Papers and presentations
- Ada 2005: Putting it all together (SIGAda 2004 presentation)
- GNAT and Ada 2005 (SIGAda 2004 paper)
- An invitation to Ada 2005, and the presentation of this paper at Ada-Europe 2004
[edit] Rationale
- Rationale for Ada 2005 by John Barnes:
- Introduction
- Object Oriented Model
- Access Types
- Structure and Visibility
- Tasking and Real-Time
- Exceptions, Generics, Etc.
- Predefined Library
- Containers
- Epilogue
-
- References
- Index
Available as a single document for printing.
[edit] Language Requirements
- Instructions to the Ada Rapporteur Group from SC22/WG9 for Preparation of the Amendment to ISO/IEC 8652 (10 October 2002), and a presentation of this document at SIGAda 2002
[edit] Ada Reference Manual
- Ada Reference Manual, ISO/IEC 8652:1995(E) with COR.1:2001 and AMD.1:200y (Draft)
- Annotated Ada Reference Manual, ISO/IEC 8652:1995(E) with COR.1:2001 and AMD.1:200y (Draft with colored diffs)
- List of Ada Amendment drafts
[edit] Ada Issues
- Amendment 200Y
- AI-00387 Introduction to Amendment
- AI-10284 New reserved words
- AI-00252 Object.Operation notation
- AI-20218 Accidental overloading when overriding
- AI-00348 Null procedures
- AI-00287 Limited aggregates allowed
- AI-00326 Incomplete types
- AI-00317 Partial parameter lists for formal packages
- AI-00376 Interfaces.C works for C++ as well
- AI-00368 Restrictions for obsolescent features
- AI-00381 New Restrictions identifier No_Dependence
- AI-00224 pragma Unsuppress
- AI-00161 Default-initialized objects
- AI-00361 Raise with message
- AI-00286 Assert pragma
- AI-00328 Preinstantiations of Complex_IO
- AI-00301 Operations on language-defined string types
- AI-00340 Mod attribute
- AI-00364 Fixed-point multiply/divide
- AI-00267 Fast float-to-integer conversions
- AI-00321 Definition of dispatching policies
- AI-00329 pragma No_Return -- procedures that never return
- AI-00362 Some predefined packages should be recategorized
- AI-00351 Time operations
- AI-00427 Default parameters and Calendar operations
- AI-00270 Stream item size control

