Turing is a general-purpose imperative programming language designed to support both teaching and larger-scale applications, especially in its system programming extension, Turing Plus. The authors of this paper give an informal introduction to the language (which they classify as a ‘super Pascal’) by means of a number of examples that illustrate its superiority to Pascal. Besides tightening up some of Pascal’s documented insecurities, the developers of Turing added elements of specification via Hoare-style pre- and post-conditions. These conditions can be checked at run-time and provide a succinct and powerful means of program documentation.
In my view, the most important aspect of Turing is its formal definition [1]. This definition uses axiomatic semantics, which has existed for a number of years. Although the axiomatic approach does have its limits--the definition’s authors point out that aliasing and side-effects are difficult to handle--it seems imperative that any new language have such a definition.
Another aspect of Turing that deserves comment is the way it handles variant records and pointers: insecurities are tightened up to allow run-time signalling of violations. In both cases the constructs could have been further modified to prevent run-time errors, surely a desirable situation. Specifically, for the first case code could be provided, at any use of a variant record, to deal with every variant, and in the second case the explicit deallocation of pointers could be replaced by garbage collection. Nevertheless, the authors present a coherent summary of the salient features of an elegant language, and they whet one’s appetite for the greater detail for the definition [1].