A von Neumann language in
computing
Computing is any goal-oriented activity requiring, benefiting from, or creating computing machinery. It includes the study and experimentation of algorithmic processes, and development of both hardware and software. Computing has scientific, ...
is any of those
programming language
A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language.
The description of a programming l ...
s that are high-level abstract
isomorphic copies of
von Neumann architecture
The von Neumann architecture — also known as the von Neumann model or Princeton architecture — is a computer architecture based on a 1945 description by John von Neumann, and by others, in the '' First Draft of a Report on the EDVAC''. Th ...
s. , most current programming languages fit into this description, likely as a consequence of the extensive domination of the von Neumann computer architecture during the past 50 years.
The differences between
Fortran,
C, and even
Java
Java (; id, Jawa, ; jv, ꦗꦮ; su, ) is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea to the north. With a population of 151.6 million people, Java is the world's mo ...
, although considerable, are ultimately constrained by all three being based on the programming style of the von Neumann computer. If, for example, Java objects were all executed in parallel with asynchronous
message passing
In computer science, message passing is a technique for invoking behavior (i.e., running a program) on a computer. The invoking program sends a message to a process (which may be an actor or object) and relies on that process and its supporti ...
and attribute-based declarative addressing, then Java would not be in the group.
The isomorphism between von Neumann programming languages and architectures is in the following manner:
* program variables ↔ computer storage cells
* control statements ↔ computer test-and-jump instructions
* assignment statements ↔ fetching, storing instructions
* expressions ↔ memory reference and arithmetic instructions.
Criticism
John Backus asserted that assignment statements in von Neumann languages split programming into two worlds. The first world consists of ''expressions'', an orderly
mathematical space with potentially useful algebraic properties: most computation takes place here. The second world consists of ''statements'', a disorderly mathematical space with few useful mathematical properties (
structured programming
Structured programming is a programming paradigm aimed at improving the clarity, quality, and development time of a computer program by making extensive use of the structured control flow constructs of selection ( if/then/else) and repetition (w ...
can be seen as a limited
heuristic
A heuristic (; ), or heuristic technique, is any approach to problem solving or self-discovery that employs a practical method that is not guaranteed to be optimal, perfect, or rational, but is nevertheless sufficient for reaching an immediat ...
that does apply in this space, though).
Backus claimed that by 1978 there existed in
computer science
Computer science is the study of computation, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (includin ...
a
vicious cycle where the long-standing emphasis on von Neumann languages has continued the primacy of the von Neumann computer architecture, and dependency on it has made non-von Neumann languages uneconomical and thus limited their further development: the lack of widely available and effective non-von Neumann languages has deprived computer designers of the motivation and the intellectual foundation needed to develop new computer architectures.
IBM Archives: John Backus
/ref>
Presence in modern systems
Many modern processors now contain multiple processing cores, and multi-threaded programming is usually the most efficient way to use more computational power in a single program. Some modern processors are highly optimized with techniques including out-of-order execution, but with complex logic to detect when this can be done without violating the von Neumann semantics of the logical programming model. Separate instruction and data caches are widely used, making the hardware a Modified Harvard architecture, but again with logic to detect cases where the optimization fails, to be able to execute self-modifying code
In computer science, self-modifying code (SMC) is code that alters its own instructions while it is executing – usually to reduce the instruction path length and improve performance or simply to reduce otherwise repetitively similar code ...
.
Some specialized processors (including GPUs) are very wide multiple instruction, multiple data
In computing, multiple instruction, multiple data (MIMD) is a technique employed to achieve parallelism. Machines using MIMD have a number of processors that function asynchronously and independently. At any time, different processors may be exe ...
(MIMD) devices. General-purpose CPUs do commonly have multiple cores, but each one is fast enough that many programs are fast enough without parallelizing single tasks. (Threads are commonly used to deal with asynchronous inputs or outputs, especially in a GUI.) General-purpose CPUs are technically MIMD devices, but usually only hardware designed from the ground up for MIMD programming is referred to as MIMD.
Many widely used programming languages such as C, C++ and Java
Java (; id, Jawa, ; jv, ꦗꦮ; su, ) is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea to the north. With a population of 151.6 million people, Java is the world's mo ...
have ceased to be strictly von Neumann by adding support for parallel processing, in the form of threads
Thread may refer to:
Objects
* Thread (yarn), a kind of thin yarn used for sewing
** Thread (unit of measurement), a cotton yarn measure
* Screw thread, a helical ridge on a cylindrical fastener
Arts and entertainment
* ''Thread'' (film), 2016 ...
. However, most of the categorically ''non''-von Neumann languages are also functional
Functional may refer to:
* Movements in architecture:
** Functionalism (architecture)
** Form follows function
* Functional group, combination of atoms within molecules
* Medical conditions without currently visible organic basis:
** Functional s ...
languages and have not achieved widespread use.
References
{{DEFAULTSORT:Von Neumann Programming Languages
Programming language classification
John von Neumann