Can programming be liberated from the von Neumann style?: a functional style and its algebra of programs

  title={Can programming be liberated from the von Neumann style?: a functional style and its algebra of programs},
  author={John Warner Backus},
  journal={Commun. ACM},
  • J. Backus
  • Published 1 August 1978
  • Computer Science
  • Commun. ACM
Conventional programming languages are growing ever more enormous, but not stronger. Inherent defects at the most basic level cause them to be both fat and weak: their primitive word-at-a-time style of programming inherited from their common ancestor—the von Neumann computer, their close coupling of semantics to state transitions, their division of programming into a world of expressions and a world of statements, their inability to effectively use powerful combining forms for building new… 
The Algebra of Functional Programs: Function Level Reasoning, Linear Equations, and Extended Definitions
In [Back78] we introduced a functional style of programming in which variable-free programs are built from a set of primitive programs by a small set of combining forms or functionals and by
Subtext: uncovering the simplicity of programming
Subtext is a new medium in which the representation of a program is the same thing as its execution, and unifies traditionally distinct programming tools and concepts, and enables some novel ones.
Widening the representation bottleneck: a functional implementation of relational programming
A relational language is described,, that retains the lazy, polymorphic and higher-order aspects of functional languages and the flexible handling of non-determinism and search based computation of logic languages.
Making the point-free calculus less pointless
The objective of this work is to improve the machinery that is used to perform point-free calculations, namely in a higher-order setting, and to extend the calculus with new useful operators that help reducing the burden of proofs just to the creative parts.
Point-free program calculation
One of the contributions is a mechanism to translate classic pointwise code into the point-free style, which can be applied to a λ-calculus rich enough to represent the core functionality of a real functional programming language.
AI and the Origins of the Functional Programming Language Style
The origins of Lisp in the early AI programming work of the mid-to-late 1950s are examined, the key technical differences between it and the style first manifested in the Logic Theory Machine are analyzed, and it is concluded that programming practice and experience play a large and underappreciated role in the development of programming styles and languages.
Automatic transformation of series expressions into loops
This chapter discusses algorithms that are expressed as compositions of functions operating on sequences/vectors/streams of data elements, and a set of restrictions specifies which series expressions can be optimized.
Types and programming languages
This text provides a comprehensive introduction both to type systems in computer science and to the basic theory of programming languages, with a variety of approaches to modeling the features of object-oriented languages.
Why is It Difficult to Program in von Neumann Languages
This Note focuses on one part of this assertion, namely, that programs in von Neumann languages are difficult to synthesize, and develops a new argument in this support.


Toward a mathematical semantics for computer languages
The purpose of a mathematical semantics is to give a correct and meaningful correspondence between programs and mathematical entities in a way that is entirely independent of an implementation.
Reduction languages for reduction machines
This paper describes a particular realization of a Lambda-Red language as a machine language that resembles a higher level programming language, but it is "variable-free": expressions are named, not boxes which contain expressions.
GEDANKEN—a simple typeless language based on the principle of completeness and the reference concept
The functional approach to data structures and the use of references insure that any process which accepts some data structure will accept any logically equivalent structure, regardless of its internal representation.
Recursive functions of symbolic expressions and their computation by machine, Part I
A programming system called LISP (for LISt Processor) has been developed for the IBM 704 computer by the Artificial Intelligence group at M.I.T. The system was designed to facilitate experiments with
Programming language semantics and closed applicative languages
This paper proposes axioms to define a sequence of language-classes; the most general is that of "programming language", the most restricted has some simple and attractive properties. Here "language"
First version of a data flow procedure language
  • J. Dennis
  • Computer Science
    Symposium on Programming
  • 1974
The language is being used as a model for study of fundamental semantic constructs for programming, as a target language for evaluating trans-latability of programs expressed at the user-language level, and as a guide for research in advanced computer architecture.
A new interpreter for data flow schemas and its implications for computer architecture
A new interpreter for a data flow language is presented that magnifies the apparent asynchrony and speed of data flow, and it does so by (quite literally) exchanging blocks of processors for slices of time.
The Mechanical Evaluation of Expressions
It is shown how some forms of expression in current programming languages can be modelled in Church's X-notation, and a way of "interpreting" such expressions is described, which suggests a method of analyzing the things computer users write.
A programming language
  • K. Iverson
  • Computer Science
    AIEE-IRE '62 (Spring)
  • 1962
The paper describes a succinct problem-oriented programming language that relies heavily on a systematic extension of a small set of basic operations to vectors, matrices, and trees, and on a family of flexible selection operations controlled by logical vectors.