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… 

Constructing programs in a calculus of lazy interpreters

  • R. Frost
  • Computer Science
    Formal Methods in Software Development
  • 1990
This paper has implemented a ‘calculus of interpreters’ in a higher order, pure, lazy functional programming language Miranda’ and may be thought of as a step towards the realisation of a suggestion made in 1971 by Knuth that executable attribute grammars might provide a viable declarative programming language.

Can programming be liberated from the two-level style: multi-level programming with deepjava

This paper conservatively extend the object-oriented programming paradigm to feature an unbounded number of domain classification levels to avoid the introduction of accidental complexity into programs caused by accommodating multiple domain levels within only two programming levels.

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.



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"

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.

Inductive methods for proving properties of programs

The aim in this work is to introduce inductive methods to as wide a class of readers as possible and to demonstrate their power as practical techniques.