Although Ada 2005 was designed to be upwards compatible with Ada 95, there are a number of incompatibilities. Several are enumerated below; for a complete description please see the Annotated Ada 2005 Reference Manual, or section 9.1.1 in Rationale for Ada 2005.
The words interface
, overriding
and synchronized
are
reserved in Ada 2005.
A pre-Ada 2005 program that uses any of these as an identifier will be
illegal.
A number of packages in the predefined environment contain new declarations:
Ada.Exceptions
, Ada.Real_Time
, Ada.Strings
,
Ada.Strings.Fixed
, Ada.Strings.Bounded
,
Ada.Strings.Unbounded
, Ada.Strings.Wide_Fixed
,
Ada.Strings.Wide_Bounded
, Ada.Strings.Wide_Unbounded
,
Ada.Tags
, Ada.Text_IO
, and Interfaces.C
.
If an Ada 95 program does a with
and use
of any of these
packages, the new declarations may cause name clashes.
A nondispatching subprogram with an access parameter cannot be renamed as a dispatching operation. This was permitted in Ada 95.
Rule changes in this area have led to some incompatibilities; for example, constrained subtypes of some access types are not permitted in Ada 2005.
The allowance of aggregates for limited types in Ada 2005 raises the possibility of ambiguities in legal Ada 95 programs, since additional types now need to be considered in expression resolution.
Certain expressions involving ‘*’ or ‘/’ for a fixed-point type, which
were legal in Ada 95 and invoked the predefined versions of these operations,
are now ambiguous.
The ambiguity may be resolved either by applying a type conversion to the
expression, or by explicitly invoking the operation from package
Standard
.
The Ada 95 return-by-reference mechanism has been removed. Instead, the user can declare a function returning a value from an anonymous access type.