Nonprocedural programming languages are generally considered impractical and of theoretical value only, primarily because compilers and run-time systems for such languages tend to be highly inefficient and complex. It is widely recognized, however, that nonprocedural languages have advantages for program construction, verification, and transformation. The development of such languages can be viewed as a natural step in the evolution of computer science toward greater abstraction, with the result that the programmer is less burdened by unnecessary detail.
A nonprocedural language called ANPL, based upon the Lucid family of languages, is described, and semantic models of the language's data and sequence control aspects are presented. These models provide a general conceptual framework for an operational understanding of Lucid-like nonprocedural languages; their utility is demonstrated by their use as the basis of a demand-driven, coroutine-based implementation of ANPL.
The ANPL implementation, which has been completed, is a compiler-based system that translates programs into ACL source code. ACL is a Pascal-based programming language with coroutine facilities; such a language is particularly suitable for the implementation of this kind of non-procedural language. This implementation has a number of advantages over previous attempts to implement Lucid-like languages, including the ability to accept semantically correct programs that are rejected by other compiler-based systems, and to correctly execute programs which cause incorrect, non-terminating computations when run on other compiler-based implementations.
Recommendations
Compilation of Nonprocedural Specifications into Computer Programs
The paper describes the compilation of a program specification, written in the very high level nonprocedural MODEL language, into an object, PL/1 or Cobol, procedural language program. Nonprocedural programming languages are descriptive and devoid of ...
Modular language implementation in Rascal - experience report
All software evolves, and programming languages and programming language tools are no exception. And just like in ordinary software construction, modular implementations can help ease the process of changing a language implementation and its dependent ...