16
$\begingroup$

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

$\endgroup$
  • 6
    $\begingroup$ what is a "non-von Neumann" programming model ? $\endgroup$ – Suresh Venkat Dec 27 '12 at 4:06
  • $\begingroup$ 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. $\endgroup$ – Kaveh Dec 27 '12 at 5:24
  • 3
    $\begingroup$ 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... $\endgroup$ – vzn Dec 28 '12 at 15:56
  • 1
    $\begingroup$ 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.) $\endgroup$ – Jeffε Dec 29 '12 at 1:47
  • 1
    $\begingroup$ @Ronny: The Wikipedia page just parrots Backus' article. $\endgroup$ – Jeffε Jan 2 '13 at 20:26
12
$\begingroup$

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 and 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, 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?

| cite | improve this answer | |
$\endgroup$
11
$\begingroup$

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)

| cite | improve this answer | |
$\endgroup$
  • 1
    $\begingroup$ 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. $\endgroup$ – Suresh Venkat Dec 31 '12 at 3:20
  • $\begingroup$ Backus' programming model is called "Function-level Programming", and there's an article here: 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. $\endgroup$ – Ronny Jan 2 '13 at 13:44
  • 1
    $\begingroup$ @SureshVenkat: The languages FP and FL were created by Backus specifically to support his idea of function-level programming. See also "tacit programming" and more specifically the J language, 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 about using tacit programming in functional languages. $\endgroup$ – C. A. McCann Jan 2 '13 at 16:33
  • $\begingroup$ 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, 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.) $\endgroup$ – C. A. McCann Jan 2 '13 at 16:49
  • $\begingroup$ @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. $\endgroup$ – Ronny Jan 2 '13 at 17:06
2
$\begingroup$

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.

| cite | improve this answer | |
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.