Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
CAN/CSA ISO/IEC TR 15942-04 is the Canadian adoption of the international technical report ISO/IEC TR 15942:2004, titled Information technology — Programming languages — Guide for the use of the Ada programming language in high integrity systems. Published by the Canadian Standards Association (CSA) in collaboration with ISO/IEC, this document provides essential guidance for developers, verifiers, and certifiers working with Ada in high-integrity (safety-critical) systems.
The technical report (TR) is not a normative standard but a comprehensive set of recommendations and best practices drawn from decades of industrial experience with Ada. It addresses the unique challenges of engineering software that must operate correctly under strict safety, reliability, and real-time constraints. Industries such as avionics, railway signaling, medical devices, nuclear power, and defence rely heavily on Ada for its strong typing, run-time checking, and support for formal verification. This TR distills the collective knowledge of the Ada community into actionable guidelines for system developers.
The scope of CAN/CSA ISO/IEC TR 15942-04 is to provide guidelines for selecting and using Ada language constructs in a manner that facilitates the development of high-integrity software. It specifically targets:
The TR does not specify a particular Ada subset (like the Ravenscar profile) nor does it define a complete certification framework. Instead, it provides a structured methodology for constructing a project-specific set of rules based on risk analysis, system requirements, and the chosen Ada environment. It is language-level guidance and does not address system architecture, hardware dependencies, or process lifecycle beyond the coding phase.
CAN/CSA ISO/IEC TR 15942-04 organizes its technical guidance into several thematic categories. For each language feature, the report recommends an allowed, restricted, or prohibited usage. The following table summarizes the classification of key Ada constructs:
| Ada Language Feature | Recommended Category | Rationale |
|---|---|---|
| Packages (specification/body) | Allowed (with restrictions) | Encapsulation is essential; restrictions apply to order of elaboration and use of limited types. |
| Tasking (Ravenscar profile) | Restricted (profile mandatory) | Full Ada tasking is too complex for high-integrity; the Ravenscar profile enforces deterministic tasking. |
| Protected Objects | Allowed (with restrictions) | Use only for simple mutual exclusion; no nesting of protected procedures. |
| Exceptions | Prohibited (in most cases) | Exception handling can hide faults and complicate coverage analysis; only predefined exceptions at program level may be considered. |
| Dynamic Allocation & Deallocation | Restricted (avoid unbounded) | Dynamic memory can lead to fragmentation, interference, and missed deadlines; use static allocation whenever possible. |
| Access Types (Pointers) | Prohibited (except under strict patterns) | Aliasing and dangling references undermine static analysis; limited to certain design patterns like access to library-level data. |
| Unchecked Programming (Unchecked_Deallocation, etc.) | Prohibited | Breaches type safety; any use must be formally justified and isolated. |
| Representation Clauses & Attributes | Allowed (with analysis) | Necessary for low-level hardware mapping; must be fully documented and verified. |
| Preelaborable Initialization | Allowed | Enables compile-time evaluation and reduces run-time overhead. |
The restrictions are designed to eliminate constructs that are difficult to analyze statically, that introduce non-deterministic behavior, or that require complex run-time support. By following these guidelines, the resulting Ada code becomes amenable to formal verification via tools such as SPARK (a subset of Ada with formal contracts). The TR encourages the use of SPARK where possible, as it enforces a deterministic, side-effect-free programming style.
The TR should be used as the foundation for a project’s coding standard. The process typically involves:
CAN/CSA ISO/IEC TR 15942-04 aligns well with the objectives of DO-178C, IEC 61508, and ISO 26262. For example:
Since the TR is not a normative standard, formal certification to the TR itself is not required. However, projects often need to demonstrate that their software development has followed the TR’s recommendations. This is typically achieved by:
The TR is based on Ada 95 and Ada 2005. While many guidelines apply to later revisions (Ada 2012, Ada 2022), some new features (e.g., extended containers, parallel blocks) require additional analysis. Projects using newer Ada editions should upgrade the TR’s guidance accordingly.
CAN/CSA ISO/IEC TR 15942-04 is an invaluable resource for engineering teams working with Ada in high-integrity contexts. By providing a structured, rational methodology for selecting language features, it bridges the gap between the power and expressiveness of Ada and the stringent constraints of safety-critical certification. The Canadian adoption ensures alignment with regional requirements while maintaining full technical equivalence with the international ISO/IEC TR 15942:2004.
Adopting this report early in a project life cycle, tailoring it to specific risk profiles, and combining it with state-of-the-art static analysis and formal verification tools can dramatically reduce certification latency and overall development cost. For any organization building high-integrity Ada systems, CAN/CSA ISO/IEC TR 15942-04 should be considered a foundational element of the software engineering strategy.
Last reviewed: 2026. This article is for informational purposes and should not replace the official CAN/CSA ISO/IEC TR 15942-04 document for authoritative requirements.