ACAA Header

Ada 2020 Amendment Proposals

As of May 7, 2018

This page shows all of the Ada 2020 Amendment Proposals, broken down by current progress, relationship to the WG 9 instructions, and relationship to other proposals. We intend to use this listing to help determine the scope of Ada 2020 to be approved by WG 9 in June 2018.
Each AI is listed only once; AIs are listed with the most appropriate WG 9 instructions item if several apply. AIs are shown in Black if ARG approved, Green if wording is proposed (but still may need wordsmithing), Orange if a consensus solution has been described (this means that the proposal has been discussed at one or more ARG meetings), and in Red otherwise.
Items are linked to the actual AI; we use the major feature defined rather than the subject of the AI here for clarity at-a-glance. We also show any AIs that the current item depends on.

Strongly related to WG 9 Instructions (Bullet 1)

  • Improving the capabilities of Ada on multi-core and multi-threaded architectures;
AI12-0119-1 Parallel blocks and loops
AI12-0242-1 Reduce/Parallel_Reduce attributes
AI12-0251-1 Explicit chunk index for parallel loops (depends upon AI12-0119-1)
AI12-0251-2 Manual chunking operations (depends upon AI12-0119-1 and AI12-0266-1)
AI12-0262-1 Map-Reduce attributes (depends upon AI12-0242-1 and syntax from AI12-0212-1)
AI12-0266-1 Parallel container iterators (depends upon AI12-0119-1; also related to Bullet 3)
AI12-0267-1 Data Race and Blocking prevention (depends upon AI12-0064-2, AI12-0079-1, and AI12-0119-1)
AI12-0276-1 Admission Policy for acquiring a Protected Object resource

Strongly related to WG 9 Instructions (Bullet 2)

  • Improving the ability to write and enforce contracts for Ada entities (for instance, via preconditions);
AI12-0064-2 Aspect Nonblocking
AI12-0079-1 Aspect Global
AI12-0143-1 (Family) Index Attribute in Postconditions
AI12-0187-1 Stable Properties aspects
AI12-0220-1 Pre/Post for access-to-subprogram types
AI12-0241-1 Aspect Nonblocking for language-defined units (depends upon AI12-0064-2)
AI12-0265-1 Default_Initial_Condition
AI12-0269-1 Aspect No_Return for functions reprise
AI12-0272-1 Contracts for generic formal parameters
AI12-0280-1 Contract cases aspect
AI12-0280-2 Making 'Old more sensible

Strongly related to WG 9 Instructions (Bullet 3)

  • Improving the use and functionality of the predefined containers;
AI12-0111-1 Stable views of containers
AI12-0112-1 Contracts for containers (depends upon AI12-0064-2, AI12-0079-1, AI12-0187-1, and AI12-0265-1)
AI12-0202-1 Tampering_Check
AI12-0212-1 Container aggregates
AI12-0254-1 Bounded_Indefinite_Holders

Strongly related to WG 9 Instructions (Bullet 4)

  • Improving support for Unicode in the language and predefined libraries.
AI12-0021-1 Additional Internationalization
AI12-0260-1 Is_Basic and To_Basic for Wide_Characters
AI12-0263-1 Update references to ISO/IEC 10646

Unrelated to any WG 9 Instructions

Some of the following AIs may be depended upon by AIs in the previous categories. The unfinished AIs are listed in the priority order as per ARG letter ballots of March and May 2018.


AI12-0059-1 Aspect Object_Size
AI12-0075-1 Static expression functions
AI12-0086-1 Relaxation of discriminant rules in Record Aggregates
AI12-0125-3 Assignment Target Name (@) Shorthand
AI12-0127-1 Delta Aggregates
AI12-0128-1 Access to Atomic Parts fix
AI12-0144-1 Improved Discrete_Random
AI12-0156-1 Subtype_Indication in generalized iterators
AI12-0163-1 Policy Ordered_FIFO_Queuing
AI12-0164-1 Aspect Max_Entry_Queue_Length
AI12-0175-1 Additional preelaborable operations (Preelaborable System.Address)
AI12-0184-1 Long Long C data types
AI12-0201-1 Additional static String operations

Simple proposals

AI12-0205-1 Defaults for generic formal parameters
AI12-0226-1 Make "object"s more consistent
AI12-0248-1 Null array aggregates
AI12-0256-1 Aspect No_Controlled_Subcomponents
AI12-0275-1 Omit subtype name from object renaming (split from AI12-0236-1)
AI12-0237-1 Reading the representation of an enumeration value
AI12-0235-1 Root_Storage_Pool should be Pure
AI12-0221-1 Defaults for in out parameters
AI12-0213-1 Ids in record syntax
AI12-0060-1 Overriding indicators on protected subprogram bodies

Other proposals

AI12-0020-1 'Image for all types
AI12-0236-1 Declare expressions (possibly depends upon AI12-0275-1)
AI12-0190-1 Anonymous Functions
AI12-0189-1 Iterator loop body as anonymous procedure
AI12-0249-1 User-defined literals
AI12-0240-1 Access value aliasing and parameter aliasing
AI12-0208-1 Bignum packages (depends upon to AI12-0249-1)
AI12-0250-1 Iterator filters
AI12-0234-1 Compare-and-swap for atomic objects
AI12-0139-1 Thread-safe language-defined units
AI12-0188-1 Iterators over keys
AI12-0239-1 Ghost code
AI12-0268-1 Automatic instantiation for generic formal parameters
AI12-0197-1 Generator Functions
AI12-0197-2 Passive Tasks
AI12-0197-3 Generator Function
AI12-0197-4 Coroutines and Channels
AI12-0229-1 Type renaming
AI12-0230-1 Deadline Floor Protocol
AI12-0214-1 Case statements/expressions for composite types
AI12-0215-1 Implicit instantiations
AI12-0243-1 Subtypes as primitive arguments


The following AIs have Hold status and are not expected to appear in Ada 2020. They remain active and may appear in a future version of Ada.
AI12-0009-1 Iterators for Ada.Environment_Variables and Ada.Directories
AI12-0017-1 Exception Contracts
AI12-0018-1 Entity Versioning
AI12-0023-1 Root_Stream_Type is an interface
AI12-0083-1 Automatic creation of constructor functions
AI12-0092-1 Suppressible errors
AI12-0118-1 Extended precision in static expressions
AI12-0209-1 Refine definition of Volatility
AI12-0218-1 Aspect Scalar_Storage_Order
AI12-0223-1 The co-derivation problem
AI12-0246-1 Fixed first index for array subtypes
AI12-0253-1 Saturation math
AI12-0257-1 Generalize prefix views
AI12-0270-1 Eliminate differences between use of values and objects
AI12-0271-1 Specifying aspects of (anonymous) formal parameters
AI12-0273-1 Contract matching for formal subprograms (depends upon AI12-0272-1)
AI12-0???-1 User-defined Value attribute (split from and depends on AI12-0020-1)
AI12-0274-1 Case pattern matching (to be split from AI12-0214-1)