A von Neumann language in
computing
Computing is any goal-oriented activity requiring, benefiting from, or creating computer, computing machinery. It includes the study and experimentation of algorithmic processes, and the development of both computer hardware, hardware and softw ...
is a
programming language
A programming language is a system of notation for writing computer programs.
Programming languages are described in terms of their Syntax (programming languages), syntax (form) and semantics (computer science), semantics (meaning), usually def ...
that is a high-level abstract
isomorphic
In mathematics, an isomorphism is a structure-preserving mapping or morphism between two structures of the same type that can be reversed by an inverse mapping. Two mathematical structures are isomorphic if an isomorphism exists between the ...
copy of a
von Neumann architecture
The von Neumann architecture—also known as the von Neumann model or Princeton architecture—is a computer architecture based on the '' First Draft of a Report on the EDVAC'', written by John von Neumann in 1945, describing designs discus ...
. , 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 is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
, 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 supporting ...
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
John Warner Backus (December 3, 1924 – March 17, 2007) was an American computer scientist. He led the team that invented and implemented FORTRAN, the first widely used high-level programming language, and was the inventor of the Backus–N ...
asserted that assignment statements in von Neumann languages split programming into two worlds. The first world consists of ''expressions'', an orderly
mathematical space
In mathematics, a space is a set (sometimes known as a ''universe'') endowed with a structure defining the relationships among the elements of the set.
A subspace is a subset of the parent space which retains the same structure.
While modern ma ...
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 specific disciplined use of the structured control flow constructs of selection ( if/then/else) and repet ...
can be seen as a limited
heuristic
A heuristic or heuristic technique (''problem solving'', '' mental shortcut'', ''rule of thumb'') is any approach to problem solving that employs a pragmatic method that is not fully optimized, perfected, or rationalized, but is nevertheless ...
that does apply in this space, though).
Backus claimed that by 1978 there existed in
computer science
Computer science is the study of computation, information, and automation. Computer science spans Theoretical computer science, theoretical disciplines (such as algorithms, theory of computation, and information theory) to Applied science, ...
a
vicious cycle
A vicious circle (or cycle) is a complex chain of events that reinforces itself through a feedback loop, with detrimental results. It is a system with no tendency toward equilibrium (social, economic, ecological, etc.), at least in the short ...
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
In computer engineering, out-of-order execution (or more formally dynamic execution) is an instruction scheduling paradigm used in high-performance central processing units to make use of instruction cycles that would otherwise be wasted. In t ...
, 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 or SMoC) is source code, code that alters its own instruction (computer science), instructions while it is execution (computing), executing – usually to reduce the instruction path length and imp ...
.
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 processor cores that function asynchronously and independently. At any time, different processors may b ...
(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 is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
have ceased to be strictly von Neumann by adding support for parallel processing, in the form of threads. However, most of the categorically ''non''-von Neumann languages are also functional languages and have not achieved widespread use.
See also
* Homoiconicity
In computer programming, homoiconicity (from the Greek words ''homo-'' meaning "the same" and ''icon'' meaning "representation") is an informal property of some programming languages. A language is homoiconic if a program written in it can be mani ...
References
{{DEFAULTSORT:Von Neumann Programming Languages
Programming language classification
John von Neumann