<p>I assume by non-Von Neumann, you mean languages that bypassed the "Von Neumann Bottleneck" as per Backus' paper "Can Programming Be Liberated from the Von Neumann Style?".  For those interested, you can find a copy here:
<a href="http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf" rel="noreferrer">http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf</a></p>

<p>The answer to your question will have to be ambiguous for a few reasons.</p>

<p>First, what languages satisfied the criteria in his paper?  Although there are those that trace functional programming to this paper, that's now regarded as a misunderstanding as he meant something like point-free programming.  So do you go with the original misunderstanding, or the true intent of the paper?  For a bit of elaboration on what he meant, please see the following:
<a href="http://en.wikipedia.org/wiki/Function-level_programming" rel="noreferrer">http://en.wikipedia.org/wiki/Function-level_programming</a></p>

<p>Second, if you go with the misunderstanding, how functional is functional?  You have pure functional languages, impure functional languages, and languages that are relatively friendly to the functional paradigm.  Considering that you mention popularity and there's an inverse relationship between that and functional purity, just what languages should be included?  Do you want the most popular pure functional language (which wouldn't be popular at all), or a more popular one that meets some minimum criteria of "functional-ness"?  If the latter, what are those criteria?</p>

<p>So depending on your viewpoint:</p>

<ol>
<li><p>Haskell is the most popular of the completely pure functional languages that I know of and there are applications written in it.  However, while a heavy-weight in the functional programming community, it's not popular in the larger programming community.  Also, having used it, I did not feel it was practical for real-world use, and it seems to be valued for theoretical work.  It does allow a point-free style, so you can approach some of Backus' goals with that.</p></li>
<li><p>Clojure, Scala and F# are less pure, but more practical and popular functional languages.  F# is also friendly to the point-free style.</p></li>
<li><p>Forth may be the prototypical example of a point-free language, and it was quite widespread in its day, although now...  Factor is another point-free language that has gained some attention, but I doubt it matched Forth's popularity in its heyday.</p></li>
<li><p>APL was mentioned by Backus at one point (perhaps not in his paper) as being a step towards, but not fully compatible with his goals.  In its day it was big in the financial sector. Be sure to check out its descendants, like J.</p></li>
<li><p>JavaScript is not functional, but it is pretty friendly towards a higher order style of programming, as evidenced by its heavy use of closures.  Given its popularity, it might just meet the criteria.  Be sure to check out some of the interesting stuff done with JavaScript, like currying and combinator implementation.</p></li>
</ol>

<p>As a footnote, to give you more perspective on his goals, you can check out the two languages he designed to meet his criteria.  They're not popular at all AFAIK, so this would be purely for the sake of knowledge:</p>

<p><a href="http://en.wikipedia.org/wiki/FP_(programming_language" rel="noreferrer">http://en.wikipedia.org/wiki/FP_(programming_language</a>)</p>

<p><a href="http://en.wikipedia.org/wiki/FL_(programming_language" rel="noreferrer">http://en.wikipedia.org/wiki/FL_(programming_language</a>)</p>

CC BY-SA 3.0
2012-12-31T03:20:53.153Z
*It now appears that he meant something like point-free programming rather than functional programming* - is there some pointer to a discussion on this ? sounds interesting.
Suresh Venkat
CC BY-SA 3.0
2013-01-02T13:44:07.037Z
Backus' programming model is called "Function-level Programming", and there's an article here: http://en.wikipedia.org/wiki/Function-level_programming.  I don't know of any really good links (I'd love to know if you find any!), but Googling "Function-level Programming" turns up some interesting looking links, including a video.
Ronny
CC BY-SA 3.0
2013-01-02T16:33:58.197Z
@SureshVenkat: The languages FP and FL were created by Backus specifically to support his idea of function-level programming. See also ["tacit programming"](http://en.wikipedia.org/wiki/Tacit_programming) and more specifically the [J language](http://en.wikipedia.org/wiki/J_%28programming_language%29), which combines APL and FP/FL to create what may be both the most cryptic and the most expressive general-purpose language in actual use. I also recall [a post on SO](http://stackoverflow.com/q/3398861/157360) about using tacit programming in functional languages.
C. A. McCann
CC BY-SA 3.0
2013-01-02T16:49:34.203Z
Incidentally, the chronology in this post seems significantly off. Functional programming (in both the Lisp and ML traditions) long predates Backus's Turing Award lecture, as do most or all existing programming paradigms--including function-level programming itself, in the form of [Combinatory Logic](http://en.wikipedia.org/wiki/Combinatory_logic), which predates both Church's lambda calculus and Turing's work on the theory of computation! (Oh, and I'd *much* rather use Haskell for practical real-world purposes than an atrocity like Javascript.)
C. A. McCann
CC BY-SA 3.0
2013-01-02T17:06:08.630Z
@camccann I never set a chronology in the post.  Also, Lisp is too broad to support any claims.  For instance, not all Lisps are functional as not all are tail recursive. I like your reference to Combinatory Logic, but I think Backus' point was in having a language one could program a computer with that supports the paradigm.  Therefore, while Combinatory Logic sheds light on his argument, it's ultimately doesn't affect his point.
Ronny
CC BY-SA 3.0
2013-01-02T17:29:27.273Z
That's a peculiar definition of "functional", but anyway Scheme predates Backus's lecture, and "Lambda: The Ultimate GOTO" was published around the same time. Point is, in no way does functional programming (or anything else outside of languages like FP, FL, J, &c.) trace its roots to Backus's lecture. Also, features of Backus's paradigm were already present in array languages like APL and concatenative languages like FORTH, both of which *also* predate Backus's lecture.
C. A. McCann
CC BY-SA 3.0
2013-01-02T21:03:41.420Z
@camccann Tail Recursion as a key or defining feature of FP isn't peculiar, although (with fold/reduce), it's not essential.  There are references that trace FP to a misunderstanding of Backus, if you disagree, I guess you can take it up with them :).  Finally, I didn't suggest that Forth, etc... arose as a consequence of Backus' lecture.  In fact, in point #4 I said Backus referenced APL, thus implying its existence at the time of his lecture.  There is no causal claim between Backus' lecture & Forth, etc... in my post.
Ronny
CC BY-SA 3.0
2013-01-02T21:05:48.770Z
let us [continue this discussion in chat](http://chat.stackexchange.com/rooms/6941/discussion-between-ronny-and-camccann)
Ronny
CC BY-SA 3.0
2012-12-28T11:42:28.613Z
2013-01-03T13:41:14.090Z
2013-01-03T13:41:14.090Z
Ronny
<p>I think Linda and tuplespace programming could fit the bill. Associative/pattern matching memory operations with concurrency mean that (conceptually) the Von-Neuman bottleneck is eliminated.</p>

<p>Going in that direction, a pure Actor-model languages also model communication rather than instruction sequencing. And although they are formalisms and not actual programming languages, process calculi like the Pi calculus, CSP and Petri Nets model communication in related ways.</p>

<p>See wikipedia for links (I'm a new user and under spam protection), but for some sophomoric humour regarding Linda's name, read <a href="http://c2.com/cgi/wiki?LindaEtymology" rel="nofollow">http://c2.com/cgi/wiki?LindaEtymology</a>.</p>

CC BY-SA 3.0
2012-12-31T01:12:55.647Z
2012-12-31T01:12:55.647Z
Jim Meier
<p>When I say "von Neumann architecture", I mean some hardware that is limited by the "von Neumann bottleneck" -- i.e., it has all data is funneled through some narrow data bus.</p>

<p>The non-von Neumann programming languages I bump into most often are <a href="http://en.wikipedia.org/wiki/VHDL" rel="nofollow noreferrer">VHDL</a> and <a href="http://en.wikipedia.org/wiki/Verilog" rel="nofollow noreferrer">Verilog</a>.
In VHDL and Verilog, by default, everything happens at the same time.
The programmer has to go to extra effort to make a series of events occur in sequential order.
That is very different from most other programming languages that imply a "instruction pointer" that, by default, executes at most one line of code at any one instant, and the programmer has to go to extra effort to get multiple things happening at the same time.</p>

<p>Some people would say that's a more natural default.
Lots of beginning programming students expect a "while( x > 0 ){...}" loop to exit the instant that x becomes equal to zero, and they are surprised to learn that the computer <em>doesn't</em> continously evaluate that condition.</p>

<p>Most people writing VHDL and Verilog code compile their programs onto FPGAs,
creating little blocks of activity that all run at full speed all the time.
Often such people set up a "pipeline" that reads data from the input pins, processes it through a series of blocks, the output pins of one block directly wired to the input pins of the next block, and the final block sends the result out the output pins.
It's reminiscent of the <a href="http://en.wikipedia.org/wiki/pipeline_%28Unix%29" rel="nofollow noreferrer">Unix pipeline</a>, except that a new piece of data goes in and a new piece of data comes out on every clock cycle.</p>

<p>The input pins, the intermediate stages, and the output pins are all independent of each other -- you don't have to re-use a single data bus multiplexed between the various pieces of data.</p>

<p>You might also be interested in: <a href="https://cstheory.stackexchange.com/questions/2836/are-there-other-computer-architectures-apart-fom-the-von-neumann-turing-archite">Are there other computer architectures apart fom the von neumann /turing architectures?</a></p>

CC BY-SA 3.0
2012-12-29T00:21:37.780Z
2012-12-29T00:21:37.780Z
2017-04-13T12:32:28.077Z
David Cary
<p>Are there any practical applications for non-von Neumann programming models? What are the most widely adopted non-von Neumann programming languages?</p>

CC BY-SA 3.0
2012-12-27T04:06:16.097Z
what is a "non-von Neumann" programming model ?
Suresh Venkat
CC BY-SA 3.0
2012-12-27T05:24:36.667Z
I also don't understand the question, maybe you can add some background to the question so it becomes easier to understand what you are asking.
Kaveh
CC BY-SA 3.0
2012-12-28T15:56:36.290Z
von neumann architecture has a CPU. therefore a parallel processing architecture is arguably non-von Neumann (neumann architecture was invented prior to parallel processing). but agreed the question seems ambiguous or hazy-defined. von neumann refers to a computer architecture, not really exactly a programming model. the programming model and cpu/computer architecture exist in a sort of synergy/symbiosis but are also somewhat independent of each other.... different architectures can implement different programming models without the programming model being "coupled" to the architecture...
vzn
CC BY-SA 3.0
2012-12-29T01:47:22.990Z
What is a non-von Neumann programming _language_?  For that matter, what is a von Neumann programming language?  (I don't find Backus' definition---essentially "imperative languages"---even a tiny bit compelling.)
Jeffε
CC BY-SA 3.0
2012-12-30T16:49:00.403Z
@JɛﬀE Backus' definition was more about non-point-free languages. What do you mean by not finding it compelling?  Do you mean the relation to the architecture or the claimed benefits?
Ronny
CC BY-SA 3.0
2012-12-30T22:11:27.093Z
@Ronny: I mean that I've internalized the complete independence of architecture and programming language/model.  Functional languages can be (and usually are) implemented on von Neumann architectures; conversely, imperative languages can be implemented on non–von Neumann architectures (for example, human beings with paper and pencil).  Talking about "von Neumann programming languages" is like [dancing about architecture](http://www.paclink.com/~ascott/they/tamildaa.htm).
Jeffε
CC BY-SA 3.0
2013-01-02T13:30:17.967Z
@JɛﬀE you are right, and the choice of terms is very unfortunate.  The idea here is the language/computational model... I guess the phrase was used because the author saw the architecture as influencing the languages of the time and constraining them, if not through inspiration then through history.  Here's a link that discusses this in more detail: http://en.wikipedia.org/wiki/Von_Neumann_programming_languages
Ronny
CC BY-SA 3.0
2013-01-02T20:26:42.317Z
@Ronny: The Wikipedia page just parrots Backus' article.
Jeffε
CC BY-SA 3.0
2013-01-02T20:37:06.127Z
@JɛﬀE The page summarizes why those languages are called Von Neuman ones.
Ronny
CC BY-SA 4.0
2023-04-06T13:49:43.033Z
Interesting article with thoughts about von Neumann and non-von Neumann languages https://dl.acm.org/doi/pdf/10.1145/359576.359579
sultan
<universal-computation><logic-programming>
What is a practical non-von Neumann architecture?
Len Yabloko
# What is a practical non-von Neumann architecture?

(Asked by: username_0 on 2012-12-26)

Are there any practical applications for non-von Neumann programming models? What are the most widely adopted non-von Neumann programming languages?

**Tags:** universal-computation, logic-programming

> **Comments:**
> **username_1**: what is a "non-von Neumann" programming model ?  
> **username_2**: I also don't understand the question, maybe you can add some background to the question so it becomes easier to understand what you are asking.  
> **username_3**: von neumann architecture has a CPU. therefore a parallel processing architecture is arguably non-von Neumann (neumann architecture was invented prior to parallel processing). but agreed the question seems ambiguous or hazy-defined. von neumann refers to a computer architecture, not really exactly a programming model. the programming model and cpu/computer architecture exist in a sort of synergy/symbiosis but are also somewhat independent of each other.... different architectures can implement different programming models without the programming model being "coupled" to the architecture...  
> **username_4**: What is a non-von Neumann programming _language_?  For that matter, what is a von Neumann programming language?  (I don't find Backus' definition---essentially "imperative languages"---even a tiny bit compelling.)  
> **username_5**: @JɛﬀE Backus' definition was more about non-point-free languages. What do you mean by not finding it compelling?  Do you mean the relation to the architecture or the claimed benefits?  
> **username_4**: @username_5: I mean that I've internalized the complete independence of architecture and programming language/model.  Functional languages can be (and usually are) implemented on von Neumann architectures; conversely, imperative languages can be implemented on non–von Neumann architectures (for example, human beings with paper and pencil).  Talking about "von Neumann programming languages" is like [dancing about architecture](http://www.paclink.com/~ascott/they/tamildaa.htm).  
> **username_5**: @JɛﬀE you are right, and the choice of terms is very unfortunate.  The idea here is the language/computational model... I guess the phrase was used because the author saw the architecture as influencing the languages of the time and constraining them, if not through inspiration then through history.  Here's a link that discusses this in more detail: http://en.wikipedia.org/wiki/Von_Neumann_programming_languages  
> **username_4**: @username_5: The Wikipedia page just parrots Backus' article.  
> **username_5**: @JɛﬀE The page summarizes why those languages are called Von Neuman ones.  
> **username_6**: Interesting article with thoughts about von Neumann and non-von Neumann languages https://dl.acm.org/doi/pdf/10.1145/359576.359579  

---

## 3 answers

### Answer by username_9 on 2012-12-29. Score: 13 | Accepted answer

When I say "von Neumann architecture", I mean some hardware that is limited by the "von Neumann bottleneck" -- i.e., it has all data is funneled through some narrow data bus.

The non-von Neumann programming languages I bump into most often are [VHDL](http://en.wikipedia.org/wiki/VHDL) and [Verilog](http://en.wikipedia.org/wiki/Verilog).
In VHDL and Verilog, by default, everything happens at the same time.
The programmer has to go to extra effort to make a series of events occur in sequential order.
That is very different from most other programming languages that imply a "instruction pointer" that, by default, executes at most one line of code at any one instant, and the programmer has to go to extra effort to get multiple things happening at the same time.

Some people would say that's a more natural default.
Lots of beginning programming students expect a "while( x > 0 ){...}" loop to exit the instant that x becomes equal to zero, and they are surprised to learn that the computer *doesn't* continously evaluate that condition.

Most people writing VHDL and Verilog code compile their programs onto FPGAs,
creating little blocks of activity that all run at full speed all the time.
Often such people set up a "pipeline" that reads data from the input pins, processes it through a series of blocks, the output pins of one block directly wired to the input pins of the next block, and the final block sends the result out the output pins.
It's reminiscent of the [Unix pipeline](http://en.wikipedia.org/wiki/pipeline_%28Unix%29), except that a new piece of data goes in and a new piece of data comes out on every clock cycle.

The input pins, the intermediate stages, and the output pins are all independent of each other -- you don't have to re-use a single data bus multiplexed between the various pieces of data.

You might also be interested in: [Are there other computer architectures apart fom the von neumann /turing architectures?](https://cstheory.stackexchange.com/questions/2836/are-there-other-computer-architectures-apart-fom-the-von-neumann-turing-archite)


---

### Answer by username_5 on 2012-12-28. Score: 12

I assume by non-Von Neumann, you mean languages that bypassed the "Von Neumann Bottleneck" as per Backus' paper "Can Programming Be Liberated from the Von Neumann Style?". For those interested, you can find a copy here:
<http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf>

The answer to your question will have to be ambiguous for a few reasons.

First, what languages satisfied the criteria in his paper? Although there are those that trace functional programming to this paper, that's now regarded as a misunderstanding as he meant something like point-free programming. So do you go with the original misunderstanding, or the true intent of the paper? For a bit of elaboration on what he meant, please see the following:
<http://en.wikipedia.org/wiki/Function-level_programming>

Second, if you go with the misunderstanding, how functional is functional? You have pure functional languages, impure functional languages, and languages that are relatively friendly to the functional paradigm. Considering that you mention popularity and there's an inverse relationship between that and functional purity, just what languages should be included? Do you want the most popular pure functional language (which wouldn't be popular at all), or a more popular one that meets some minimum criteria of "functional-ness"? If the latter, what are those criteria?

So depending on your viewpoint:

1. Haskell is the most popular of the completely pure functional languages that I know of and there are applications written in it. However, while a heavy-weight in the functional programming community, it's not popular in the larger programming community. Also, having used it, I did not feel it was practical for real-world use, and it seems to be valued for theoretical work. It does allow a point-free style, so you can approach some of Backus' goals with that.
2. Clojure, Scala and F# are less pure, but more practical and popular functional languages. F# is also friendly to the point-free style.
3. Forth may be the prototypical example of a point-free language, and it was quite widespread in its day, although now... Factor is another point-free language that has gained some attention, but I doubt it matched Forth's popularity in its heyday.
4. APL was mentioned by Backus at one point (perhaps not in his paper) as being a step towards, but not fully compatible with his goals. In its day it was big in the financial sector. Be sure to check out its descendants, like J.
5. JavaScript is not functional, but it is pretty friendly towards a higher order style of programming, as evidenced by its heavy use of closures. Given its popularity, it might just meet the criteria. Be sure to check out some of the interesting stuff done with JavaScript, like currying and combinator implementation.

As a footnote, to give you more perspective on his goals, you can check out the two languages he designed to meet his criteria. They're not popular at all AFAIK, so this would be purely for the sake of knowledge:

<http://en.wikipedia.org/wiki/FP_(programming_language>)

<http://en.wikipedia.org/wiki/FL_(programming_language>)

> **Comments:**
> **username_1**: *It now appears that he meant something like point-free programming rather than functional programming* - is there some pointer to a discussion on this ? sounds interesting.  
> **username_5**: Backus' programming model is called "Function-level Programming", and there's an article here: http://en.wikipedia.org/wiki/Function-level_programming.  I don't know of any really good links (I'd love to know if you find any!), but Googling "Function-level Programming" turns up some interesting looking links, including a video.  
> **username_7**: @SureshVenkat: The languages FP and FL were created by Backus specifically to support his idea of function-level programming. See also ["tacit programming"](http://en.wikipedia.org/wiki/Tacit_programming) and more specifically the [J language](http://en.wikipedia.org/wiki/J_%28programming_language%29), which combines APL and FP/FL to create what may be both the most cryptic and the most expressive general-purpose language in actual use. I also recall [a post on SO](http://stackoverflow.com/q/3398861/157360) about using tacit programming in functional languages.  
> **username_7**: Incidentally, the chronology in this post seems significantly off. Functional programming (in both the Lisp and ML traditions) long predates Backus's Turing Award lecture, as do most or all existing programming paradigms--including function-level programming itself, in the form of [Combinatory Logic](http://en.wikipedia.org/wiki/Combinatory_logic), which predates both Church's lambda calculus and Turing's work on the theory of computation! (Oh, and I'd *much* rather use Haskell for practical real-world purposes than an atrocity like Javascript.)  
> **username_5**: @camccann I never set a chronology in the post.  Also, Lisp is too broad to support any claims.  For instance, not all Lisps are functional as not all are tail recursive. I like your reference to Combinatory Logic, but I think Backus' point was in having a language one could program a computer with that supports the paradigm.  Therefore, while Combinatory Logic sheds light on his argument, it's ultimately doesn't affect his point.  
> **username_7**: That's a peculiar definition of "functional", but anyway Scheme predates Backus's lecture, and "Lambda: The Ultimate GOTO" was published around the same time. Point is, in no way does functional programming (or anything else outside of languages like FP, FL, J, &c.) trace its roots to Backus's lecture. Also, features of Backus's paradigm were already present in array languages like APL and concatenative languages like FORTH, both of which *also* predate Backus's lecture.  
> **username_5**: @camccann Tail Recursion as a key or defining feature of FP isn't peculiar, although (with fold/reduce), it's not essential.  There are references that trace FP to a misunderstanding of Backus, if you disagree, I guess you can take it up with them :).  Finally, I didn't suggest that Forth, etc... arose as a consequence of Backus' lecture.  In fact, in point #4 I said Backus referenced APL, thus implying its existence at the time of his lecture.  There is no causal claim between Backus' lecture & Forth, etc... in my post.  
> **username_5**: let us [continue this discussion in chat](http://chat.stackexchange.com/rooms/6941/discussion-between-ronny-and-camccann)  

---

### Answer by username_8 on 2012-12-31. Score: 2

I think Linda and tuplespace programming could fit the bill. Associative/pattern matching memory operations with concurrency mean that (conceptually) the Von-Neuman bottleneck is eliminated.

Going in that direction, a pure Actor-model languages also model communication rather than instruction sequencing. And although they are formalisms and not actual programming languages, process calculi like the Pi calculus, CSP and Petri Nets model communication in related ways.

See wikipedia for links (I'm a new user and under spam protection), but for some sophomoric humour regarding Linda's name, read <http://c2.com/cgi/wiki?LindaEtymology>.


---

