Are there any practical applications for non-von Neumann programming models? What are the most widely adopted non-von Neumann programming languages?
|
|
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? |
|||
|
|
|
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:
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: |
|||||||||||||||
|
|
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. |
|||
|
|