非冯·诺依曼编程模型是否有实际应用?什么是最广泛采用的非冯·诺依曼编程语言?
非冯·诺依曼编程模型是否有实际应用?什么是最广泛采用的非冯·诺依曼编程语言?
Answers:
当我说“冯·诺依曼架构”时,我的意思是受“冯·诺依曼瓶颈”限制的某些硬件-即,它的所有数据都通过狭窄的数据总线传输。
我最常遇到的非von Neumann编程语言是VHDL和Verilog。在VHDL和Verilog中,默认情况下,所有操作均同时发生。程序员必须付出额外的努力才能使一系列事件按顺序发生。这与大多数其他编程语言有很大的不同,其他语言暗示默认情况下,“指令指针”默认在任一时刻最多执行一行代码,并且程序员必须付出更多的努力才能使多个事情同时发生时间。
有人会说这是更自然的默认设置。许多刚开始编程的学生都希望在x等于零的瞬间退出“ while(x> 0){...}”循环,他们惊讶地发现计算机没有连续评估该条件。
大多数编写VHDL和Verilog代码的人都将他们的程序编译到FPGA上,从而创建了很少的活动块,这些活动块始终保持全速运行。通常,这样的人会建立一条“流水线”,从输入引脚读取数据,通过一系列模块进行处理,一个模块的输出引脚直接连接到下一个模块的输入引脚,最后一个模块将结果发送出去输出引脚。它使人联想到Unix管道,不同之处在于,每个时钟周期都会传入一个新的数据,并产生一个新的数据。
输入引脚,中间级和输出引脚彼此独立-您不必重复使用在各个数据段之间多路复用的单个数据总线。
您可能还会对此感兴趣:von neumann / turing体系结构之外还有其他计算机体系结构吗?
我以非冯·诺伊曼(Von Neumann)来假设,您的意思是按照巴克斯(Backus)的论文“可以从冯·诺伊曼风格中解放编程吗?”绕过“冯·诺伊曼瓶颈”的语言。对于那些感兴趣的人,可以在这里找到副本:http : //www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf
您的问题的答案由于某些原因而必须模棱两可。
首先,哪种语言满足他的论文中的标准?尽管有一些人将函数式编程追溯到了本文,但是由于他的意思是无点编程,因此现在被人们误解了。那么,您是否怀有最初的误解或论文的真实意图?有关他的含义的详细说明,请参见以下内容:http : //en.wikipedia.org/wiki/Function-level_programming
第二,如果您误解了,那么功能如何发挥作用?您拥有纯功能语言,不纯功能语言以及对功能范例相对友好的语言。考虑到您提到流行度,并且它与功能纯度之间存在反比关系,那么应该包括哪些语言?您是要使用最流行的纯功能语言(根本不会流行)还是要满足某些“功能性”最低标准的更流行的语言?如果是后者,这些标准是什么?
因此,根据您的观点:
Haskell是我所知道的最流行的完全纯函数式语言,并且其中编写了一些应用程序。但是,尽管在功能编程社区中占有一席之地,但在大型编程社区中并不流行。另外,使用它后,我觉得它在现实世界中并不实用,并且似乎在理论上很有价值。它确实允许无指向性的样式,因此您可以以此来实现Backus的一些目标。
Clojure,Scala和F#不够纯净,但实用性和流行性更高。F#对无点样式也很友好。
Forth可能是无点语言的原型示例,并且在当时非常流行,尽管现在... Factor是另一种获得关注的无点语言,但是我怀疑它是否与Forth的鼎盛时期相匹配。
Backus在某一时刻(也许不是在他的论文中)提到APL是迈出的一步,但并不完全符合他的目标。当时,它在金融领域非常重要。确保检查出其后代,例如J。
JavaScript不起作用,但是它对高级编程风格非常友好,这可以通过大量使用闭包来证明。鉴于其受欢迎程度,它可能仅符合条件。确保检查使用JavaScript完成的一些有趣的工作,例如currying和combinator实现。
作为一个脚注,为了使您对他的目标有更多的了解,您可以查看他为满足自己的条件而设计的两种语言。它们并不是在所有AFAIK上都不受欢迎,因此这纯粹是出于知识的考虑:
我认为Linda和tuplespace编程可以满足要求。具有并发性的关联/模式匹配内存操作意味着(在概念上)消除了Von-Neuman瓶颈。
朝着这个方向发展,一种纯Actor模型语言也可以对通信进行建模,而不是对指令进行排序。尽管它们是形式主义,而不是实际的编程语言,但是像Pi演算,CSP和Petri Nets这样的过程计算都以相关方式对通信进行建模。
请参阅Wikipedia中的链接(我是新用户,并且处于垃圾邮件保护之下),但是对于Linda的名字有些幽默,请阅读http://c2.com/cgi/wiki?LindaEtymology。