The purpose of this feature in Tartan is to satisfy the Ironman requirement 10G:
10G. Suppressing Exceptions. It shall be possible to suppress individually the
detection of exceptions for software error situations. Should such a situation
occur when its detection is suppressed, the consequences will be unpredictable
The "Strawman", "Woodenman", "Tinman" and "Ironman" versions of the Department of Defense Requirements for High Order Computer Programming Languages were released in sequence as part of that Ada development process. As the abstract of the Tartan paper notes, minimally satisfying all of the Ironman requirements was the primary goal of that language design.
In fact, the specification statement is exactly in the terms of the subsequent Steelman requirements, which had recently become available:
10G. Suppressing Exceptions. It shall be possible during translation to suppress individually the execution time detection of exceptions within a given scope. The language shall not guarantee the integrity of the values produced when a suppressed exception occurs. [Note that suppression of an exception is not an assertion that the corresponding error will not occur.]
The reason those requirements specified that detection of exceptional conditions should be able to be locally disabled was that the run-time costs of validating them could be significant on typical period hardware, such as requiring range checks on every access to a variable. This is explicit in requirement 10B:
10B. Error Situations. The errors detectable during execution shall include exceeding the specified range of an array subscript, exceeding the specified range of a variable, exceeding the implemented range of a variable, [...elided...]. [Note that some are very expensive to detect unless aided by special hardware, and consequently their detection will often be suppressed (see 10G).]
Thus a program could opt to avoid incurring these checks for a portion of the code where the performance cost of detecting them was unacceptable, either because that error was known not to occur or because the implementation's behaviour was acceptable in the cases where it did. This also made it into the final Ada definition in the form of the Suppress pragma, for the same reasons.
- Department of Defense Requirements for High Order Computer Programming Languages, "Ironman". 14 January 1977. ADA100403. (alternative archive.org version)
- Department of Defense Requirements for High Order Computer Programming Languages, "Steelman". 1 June 1978. ADA059444. (alternative wikisource text copy)
disable
and debug it later. It allows the rest of the code to run regardless of error detection. $\endgroup$