Previous Table of Contents Next


10.2.2.3. The Role of the GNU Ada 95 (GNAT) Compiler

A critically important aspect of the growing acceptance of Ada 95 is the availability of a freely available compiler, known as GNAT. This Ada 95 implementation is integrated into the GNU (GNU’s not UNIX) family of languages and uses the same back-end code generator. It supports the full Ada 95 language, including all annexes. The compiler can be downloaded from the PAL and all its mirror sites, and—as is the case with all software released under the GNU General Public License—full source code is available along with the binaries.

The GNAT project was originally located at New York University and funded by AJPO from 1993 to 1995. Starting in mid-1995, development and commercial support continued at Ada Core Technologies (ACT), a company founded by principals of the NYU GNAT project.

GNAT has made Ada 95 accessible to a large number of users around the world. Further, because full source code for the compiler and runtime system can be freely downloaded, Ada is once again becoming an interesting subject of academic and other research.

10.2.3. Validation, or “Just Which Language Does This Compiler Compile?”

One critically important aspect of the Ada project is validation of implementations (compilers and associated linkers and runtime support libraries). DoD desired to have, above all, a common language, supported by a strong standard that described the language. In that vision, hardware could be procured competitively, without concern about whether the compilers from hardware vendors A and B compiled the same source language. Similarly, once the hardware platform was determined, compilers for that platform could be procured competitively based on price and performance because all compilers would support the same language. Validation demonstrates the conformance of a compiler to the standard.

Compiler validation is necessarily a testing process because there is no other effective way to demonstrate standard conformance. DoD therefore commissioned the development of a set of test programs called the Ada Compiler Validation Capability (ACVC). This test suite was made readily available to interested parties, originally on magnetic tape; with the growing use of the Internet, the ACVC was distributed by FTP.

Over the roughly ten years of Ada 83, the ACVC was, of course, updated a number of times, to take account of practical experience with the compilers, add new tests as compiler bugs were discovered, and so on. The final operative Ada 83 test suite was ACVC 1.11, containing more than 2000 distinct test segments. Various forms of the applicable regulations determined the frequency with which a validated compiler was required to be retested with a newer test suite.

With the advent of Ada 95, the validation process was changed somewhat to accommodate Ada 95’s structure as a core language with specialized-needs annexes; vendors can now choose to submit any or all annexes for separate validation.

Because the reader is probably unfamiliar with the compiler validation process, it is useful to go into it in a bit of detail, to put the process in perspective. The following section, describing Ada 95 validation, is adapted directly from the Ada IC flyer The Ada Compiler Validation Process.

10.2.3.1. The Validation Process

The administrative structure of validation is, at this writing, in transition as part of the implementation of the revised Ada policy described in section 10.3.1.1. This section therefore describes the process historically. It is safe to assume that the technical process will continue in a similar fashion, but the names of the administrative player organizations will probably change.

Historically, the validation process was carried out by the Ada certification body. This body consisted of the Ada Joint Program Office (AJPO) and the Ada Validation Facilities (AVFs).

The AJPO issued validation certificates for AVF-tested Ada implementations, registered Ada implementations that were derived by an AVF, maintained the Ada Compiler Validation Capability (ACVC), reviewed all Validation Summary Reports (VSRs), reviewed and adjudicated all disputes regarding the Ada test instrument, and maintained current operating agreements with the AVFs. The AJPO had the responsibility for establishing and maintaining a certification system for the ISO.

To obtain a validation certificate, the following six steps were completed by the customer and the Ada certification body:

1.  A formal validation agreement between the customer and an AVF was required in order to obtain validation services.
2.  Pre-validation, consisting of customer testing, submission of results to the AVF, and resolution of any test issues (e.g., a missing or incomplete result to a test) preceded the actual validation.
3.  Validation testing was performed by an AVF at a site mutually agreed upon by the customer and the AVF (usually the customer’s site).
4.  A Declaration of Conformance was then completed and signed by the customer no later than the time of validation testing.
5.  A Validation Summary Report (VSR) was prepared by the AVF to document the validation.
6.  A Validation Certificate (VC) was then issued to the customer by the authority of the AJPO for a successfully tested Ada implementation.

With Ada 95 compilers, compliance is measured only within the limits of the collection of test programs contained in the ACVC for the core language and specialized needs annexes. An Ada implementation passes a given ACVC version if 1) it processes each test of the customized test suite in accordance with criteria for individual tests and 2) the test result profile matches the passing requirements for the specific ACVC version.

Matrices displaying the test result profiles for Core Ada 95 Test Categories and Special Needs Annexes are shown in the VSR. The information contained in the matrix is reformatted and provided in the Validated Compilers List (VCL) to allow easy access for buyers and users.

10.2.3.2. A Sample Test Profile

To give the reader some flavor of the tests, I show an example of the test profile that is published in the VCL.

The first matrix displays the number of tests that were Passed, Not Applicable (NA), Not Supported (NS), and Withdrawn for each of seven test categories: Ada 9X Basic, Real-Time, OOP, Type Extensions in Child Units, Child Library Units, Predefined Language Environment, and Mixed Features. Here is a list of the test categories and a short description for each:

  Ada 9X Basic: This is the subset of tests from ACVC 1.11 after removal of tests not applicable to Ada 95. These tests focus on support expected from Ada for features of Ada 83 that have been updated to be compatible with revised rules.


Note:  The following subsets of tests validate features that are new to Ada 95. Each test has been allocated into exactly one of several test subsets, based upon a general categorization of Ada features used in the test. These tests are designed to reflect the features that programmers are likely to use to solve a programming problem.
  Real-Time: This subset is composed of tests for the new Ada 95 features from Section 9, Tasks and Synchronization. These features include protected objects, modifications to task types, select statements, and delay alternatives.
  OOP: This subset of tests focuses on some necessary facilities for achieving object-oriented programming in Ada 95. Features validated include tagged types, class attributes, and abstract types and subprograms. Other Ada 95 facilities commonly used in object-oriented programs are included in subsequent subsets.
  Type Extensions in Child Units: These tests focus on the interaction of the two new Ada features of type extensions of tagged types and child library units. This includes the related semantics of visibility, accessibility, and calls on primitive operations of tagged types.
  Child Library Units: These tests focus on the support for the new Ada capability to provide a hierarchical organization of the compilation units of an Ada program with the associated capabilities of granting access to the contents of private declarations and of hiding selected units within subsystems.
  Predefined Language Environment: This subset of tests includes some Ada 83 facilities and some new features defined in Annex A. Annex A provides specifications for root library units for Ada, Interface, and System, character and string handling, and input/output.
  Mixed Features: This relatively large subset of tests focuses on the interaction of Ada features that are a mixture of familiar Ada 83 and new Ada 95 features.


Previous Table of Contents Next