TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Can Programming Be Liberated From The Von Neumann Style? (1977) [pdf]

202 pointsby adgasfalmost 9 years ago

24 comments

jerfalmost 9 years ago
The answer was &quot;not while computing was getting exponentially better every year&quot;. This sort of improvement curve is really difficult to compete with.<p>It&#x27;s in the process of being liberated now. GPUs are already deployed in many machines with a fundamentally different architecture. And there&#x27;s a bubbling foment of alternatives being developed now.<p>In the end, I don&#x27;t think it was necessarily a case of us getting stuck on &quot;von Neumann&quot; per se... we would have gotten stuck on anything we settled on in the 1960s. And despite familiarity breeding contempt, I&#x27;m not that convinced we could have done that much better in the 1960s. A lot of the alternatives are not <i>universally</i> better, they&#x27;re better in some limited domain but it&#x27;s not obvious that they are going to uniformly beat von Neumann for general computing, even accounting for the fact that &quot;general computing&quot; has coevolved for 50 years with von Neumann.<p>See also <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=12155561" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=12155561</a> (which may well have been the inspiration for this submission)
评论 #12160352 未加载
评论 #12160307 未加载
评论 #12160470 未加载
评论 #12163606 未加载
segmondyalmost 9 years ago
It already has, unfortunately it&#x27;s not too popular. This is why Prolog gives most folks a case of headache. My moment of enlightenment while studying Prolog happened when I realized that I wasn&#x27;t logical, but trying to solve the problem in Von Neumann style. I was humbled to see simple logic solutions in place of my overly complicated solutions. This has made me such a better developer, I keep my code as declarative as possible.
评论 #12161993 未加载
评论 #12160276 未加载
评论 #12160511 未加载
评论 #12163633 未加载
评论 #12160106 未加载
gavinpcalmost 9 years ago
Backus and von Neumann have a history, from their time at IBM.<p>When Backus first proposed the idea of Fortran to his boss, he first &quot;had to overcome the persuasive arguments of von Neumann, who was then a consultant to IBM.&quot; In Backus&#x27; words:<p>&gt; He didn&#x27;t see programming as a big problem. I think one of his major objections is that you wouldn&#x27;t know what you were getting with floating point calculations. You at least knew where trouble was with fixed point if there was trouble. But he wasn&#x27;t sensitive to the issue of the cost of programming. He really felt that Fortran was a wasted effort.[0]<p>Backus and von Neumann had made innovations in the use of floating-point and fixed-point numbers by computers, respectively.<p>From what I can gather, von Neumann was an incredible genius who just continuously pushed new ideas. He introduced &quot;scaling factors&quot; (fixed point) to solve a scientific problem (in nuclear physics) and didn&#x27;t worry about improving its &quot;usability.&quot;<p>Backus, on the other hand, cared about the difficulty of programming. Both Fortran and his work on floating-point, as well as his later efforts in functional programming, manifested that.<p>After leaving computing altogether, Backus took to meditation and, as he calls it, &quot;living.&quot;<p>[0] Quotes are from chapter 1 of <i>Out of Their Minds: the Lives and Discoveries of 15 Great Computer Scientists</i>, by Shasha and Lazere.
nemo1618almost 9 years ago
I think abandonment of the Von Neumann paradigm will be crucial for AI. For decades we have labored under the misguided assumption that the brain is isomorphic to the Von Neumann architecture, with &quot;memory banks&quot; and &quot;processing units.&quot; This approach has failed.<p>Admittedly, Lisp was once the first choice for AI research, and it did not readily lead us into the promised land either. Perhaps a functional approach is not radical enough :)
评论 #12160221 未加载
评论 #12161249 未加载
评论 #12163641 未加载
评论 #12162058 未加载
Razenganalmost 9 years ago
I guess one way to approach questions like this, that challenge our fundamentals of Doing Things, is to ask this:<p>Would an alien race be doing the same things? Using electricity, decimals, binary, registers, memory etc. the same way we do?<p>As opposed to say photonics or biochemicals-based computers, trinary or quarternary number systems, belt architectures and so on..<p>How much of our world has been shaped by simply the ORDER in which we discovered things?<p>If there is only one Right Way of doing things then all the intelligent civilizations out there will eventually use the exact same architectures and have the exact same technology and, personally, that would make for a very boring universe.
评论 #12161323 未加载
评论 #12162206 未加载
dharmatechalmost 9 years ago
Furry Paws is an &quot;optimizing whole-program compiler and runtime-system for a dialect of John Backus&#x27; FP language&quot;:<p><a href="http:&#x2F;&#x2F;www.call-with-current-continuation.org&#x2F;fp&#x2F;" rel="nofollow">http:&#x2F;&#x2F;www.call-with-current-continuation.org&#x2F;fp&#x2F;</a>
评论 #12162511 未加载
adgasfalmost 9 years ago
I find funcional languages great for modelling application logic, but when working with graphics cards, printers, web APIs, etc. procedural code is more intuitive. Maybe it&#x27;s a limitation of my thinking, but I find an impure functional language (C# and F# are good examples) the best fit for most problems.
评论 #12160138 未加载
topkekzalmost 9 years ago
A review of the 1977 Turing Award Lecture by John Backus by Edsger W.Dijkstra<p><a href="https:&#x2F;&#x2F;www.cs.utexas.edu&#x2F;users&#x2F;EWD&#x2F;transcriptions&#x2F;EWD06xx&#x2F;EWD692.html" rel="nofollow">https:&#x2F;&#x2F;www.cs.utexas.edu&#x2F;users&#x2F;EWD&#x2F;transcriptions&#x2F;EWD06xx&#x2F;E...</a>
评论 #12162498 未加载
ozyalmost 9 years ago
No. I always wanted to say that to the title of this paper ;)<p>The complaint of van neumann programming langauges, as the paper describes, is that it can only be extended as a framework. Todays imperative languages are much more powerful, either they are untyped (implicitly generic), or they include generics, or at least have objects with polymorphism.<p>The paper puts forward applicative (functional) programming, as a start, because it can be extended much better. The main point, functions can be put together, because you don&#x27;t have to name, and thus not give types to, the arguments.<p>To make the system complete (useful), he adds a applicative state transition system, or mutable state. Think IO monad.<p>I have a different take. You want systems where everything can be abstracted over. That is, put inside of a function (abstraction). And whatever the system does is truly hidden, unobservable to the outside. That might sound like fp, but it has problems when you want to hide state, or when the abstraction is about input&#x2F;output. Example:<p><pre><code> function downloadAndVerify(url): data = http.get(url) hash = http.get(url + &quot;.md5&quot;) return data, md5(data) == hash </code></pre> In my opinion, the above expresses what I want. If I need async, my callers need async. If I need IO monad, my callers need IO monad. Neither can hide that. If it blocks, it can be solved the same way as CPU intensive operations, do it in the background. So processes need to be easy.<p>You want a language where any async api can be converted into a blocking api, and any blocking api into an async api. (Using processes, most likely.)
elwellalmost 9 years ago
Here&#x27;s an interesting talk that covers some of these topics:<p>&quot;Erlang Factroy SF 2016 - Keynote - John Hughes - Why Functional Programming Matters&quot; <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Z35Tt87pIpg" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Z35Tt87pIpg</a>
Maultaschealmost 9 years ago
When I saw this, I wondered whether this was the same Von Neumann who gave his name to Von Neumann probes, which are hypothetical self-replicating spacecraft that can fill the galaxy within a relatively short timespan.<p>It turns out that this is the same Van Neumann, who appeared to have been very influential in the early days of computing. In reading about him, I was impressed with all the work he&#x27;d done. The people who came up with the concept of Von Neumann probes named them after Von Neumann because of his theoretical work regarding how computing machines can self-replicate.<p>Fermi also used the concept of Von Neumann probes and the lack of alien Von Neumann spacecraft as proof that aliens (or at least interstellar spacefaring aliens) don&#x27;t exist.
评论 #12160299 未加载
评论 #12160545 未加载
评论 #12160147 未加载
评论 #12160180 未加载
评论 #12161598 未加载
qzncalmost 9 years ago
Wikipedia argues [0] that we actually use a &quot;Modified Harvard Architecture&quot; instead of a &quot;Von Neumann Architecture&quot; today, since we have a separated data and instruction cache. Also, various embedded chips really separate instructions and data.<p>[0] <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Modified_Harvard_architecture" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Modified_Harvard_architecture</a>
carapacealmost 9 years ago
One very important aspect of this paper that I seldom see given proper emphasis is the ability to treat programs algebraically.<p>Also, check out Manfred von Thun&#x27;s Joy.
DonHopkinsalmost 9 years ago
Not all of von Neumann&#x27;s architectures were von Neumann architectures [1].<p>That is to say, not all of the architectures he invented [2] ended up being given the name &quot;von Neumann Architecture&quot;. His 29 state cellular automata rule [3] for implementing a universal constructor [2] was &quot;non von Neumann&quot; in the sense of [1].<p>It&#x27;s just so amazing what he accomplished with his mind, a pencil, and a piece of paper, without the use of computers, which he also helped invent.<p>[1] <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Von_Neumann_architecture" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Von_Neumann_architecture</a><p>[2] <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Von_Neumann_universal_constructor" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Von_Neumann_universal_construc...</a><p>[3] <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Von_Neumann_cellular_automaton" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Von_Neumann_cellular_automaton</a>
mtrnalmost 9 years ago
Kanerva has discussed alternative computing styles as well. Especially, he asks, why it is hard to encode intelligence in such a rigid setup.<p>&gt; The disparity in architecture between brains and computers is matched by disparity in performance. Notably, computers excel in routine tasks that we - our brains - accomplish with effort, such as calculation, whereas they are yet to be programmed for universal human traits such as flexible learning, language use, and understanding.<p>He focuses on the representation problem and develops a more flexible representation of concepts with what he called hyperdimensional computing[1].<p>[1] <a href="http:&#x2F;&#x2F;redwood.berkeley.edu&#x2F;pkanerva&#x2F;papers&#x2F;kanerva09-hyperdimensional.pdf" rel="nofollow">http:&#x2F;&#x2F;redwood.berkeley.edu&#x2F;pkanerva&#x2F;papers&#x2F;kanerva09-hyperd...</a>
ankurdhamaalmost 9 years ago
You can always come up with some really elegant and expressive formal systems to model programming&#x2F;computing and thats the mathematics side of things BUT people often ignore the physical&#x2F;engineering side of things. We need to engineer actual physical systems that can implement those so called elegant formal systems of mathematics. This is where the problem is, engineering a physical systems is a very complex problem with lots of constraints and is not as simple as coming up with a bunch of symbols and rules of a formal system.<p>Physics is about reality and mathematics is about representations, you can create representations from thin air but you cant do that with reality :)
jefffosteralmost 9 years ago
&quot;Out of the Tarpit&quot; (<a href="http:&#x2F;&#x2F;shaffner.us&#x2F;cs&#x2F;papers&#x2F;tarpit.pdf" rel="nofollow">http:&#x2F;&#x2F;shaffner.us&#x2F;cs&#x2F;papers&#x2F;tarpit.pdf</a>) is a paper with a similar bent arguing that we can eliminate complexity with a functional&#x2F;relational approach to designing software.
srousseyalmost 9 years ago
Reminds me that we put so much work into making things &quot;digital&quot;, that we forget how many layers of abstraction there are. All the work to add numbers when superposition is instantaneous.<p>It&#x27;s not just the tyranny of memory, but tyranny of the clock! It will be interesting when we get rid of both...
kristianpalmost 9 years ago
By the way, Bret Victor&#x27;s worrydream website references this paper from this page on the talk &quot;The Future of Programming&quot;:<p>[1] <a href="http:&#x2F;&#x2F;worrydream.com&#x2F;dbx&#x2F;" rel="nofollow">http:&#x2F;&#x2F;worrydream.com&#x2F;dbx&#x2F;</a>
pklausleralmost 9 years ago
It&#x27;s not about liberating programming, it&#x27;s about liberating programmers by enabling them with more powerful abstractions. And pure lazy statically-typed FP is one hell of a powerful abstraction.
评论 #12160602 未加载
dmreedyalmost 9 years ago
Note: in the time it took me to write this ramble and also the code review I had to do in between writing and posting, others like catnaroek have addressed similar themes<p>Speculating wildly here, but part of why I think there is continued (albeit unconscious) resistance to other paradigms is that the procedural&#x2F;imperative paradigm seems to be the most `hackable&#x27; of the bunch.<p>I&#x27;m not using `hackable&#x27; in a positive sense here. Procedural code is bare-level, almost the machine code of programming models. &quot;First do this thing, then do this thing, then do this thing&quot;, etc etc. There&#x27;s a relatively small implicit underlying `physics&#x27;[1] in a procedural system. In some sense, every procedural program involves the creation of some higher-order logic (a model) as a part of its construction, in order to both define the state machine, and dictate the manner in which state flows through it.<p>The trick, of course, is that every model has a bias, encodes some manner of thinking. An aspect of that is that it is easier to represent some things and harder to represent others[2]. In a procedural program, when the model you&#x27;ve (consciously or not) developed fails, it&#x27;s trivial to &#x27;fall out&#x27; of the model and revert to writing base-level imperative code, hacking your way to a solution.<p>Functional and other Declarative paradigms, on the other hand, have a stronger, more complex `physics&#x27; to them. In the case of declarative, for example, a user is asked only to declare the state machine; the execution of it is left to the `physics&#x27; of the system. This can mean that a well-written program in a functional or declarative language appears to be simpler, more elegant. In reality, this is largely because a large set of assumptions that would need to be explicitly declared in a procedural language have been encoded directly into the language itself in the functional&#x2F;declarative case[3].<p>This means that when you&#x27;re operating withing the paradigm that the functional&#x2F;declarative language affords, everything is smooth, beautiful, elegant, and verifiable according to the physics of the system. However, it&#x27;s much harder to &#x27;fall out&#x27; of the assumed model, because the granularity required to do so isn&#x27;t at the native resolution of the language.<p>---<p>[1] By physics, I mean a set of assumptions one needs to make about the behavior of the system that are not directly encoded by the user&#x27;s input<p>[2] Think of how easy it is to, say, pick up a piece of steak with a fork, and how hard it is to scoop soup with the same implement. Different models have different affordances, recommend different problems, or different solutions to the same problem.<p>[3] As the Church-Turing thesis shows us, these systems -are- equivalent in power, so those semantics still have to be somewhere. To paraphrase Hofstader, there are two kinds of music-playing systems (with a continuum in between). On one end, a system with a different record for each song, and a single record player capable of playing all records. On the other a system with a single records, and a different record player for each song. The difference is how much semantic weight you put on the encoding, and how much you put on the decoding (but they still need to sum to 1)
mLubyalmost 9 years ago
Is functional programming the only other style?
评论 #12160933 未加载
评论 #12168878 未加载
评论 #12161268 未加载
评论 #12160503 未加载
hellofunkalmost 9 years ago
Well, is not all the new trendiness in functional programming some evidence of the answer to this?
评论 #12160125 未加载
PaulHoulealmost 9 years ago
Yes