编程语言与软件工程2021dl.acm.org编辑精选
编程能否从冯·诺依曼风格中解放出来?(1978)
Can programming be liberated from the von Neumann style? (1978)
进阶 · 约 80 分钟读完前置知识:编程基础、冯·诺依曼体系结构、函数式编程概念
导读
这篇论文是 John Backus 1977 年图灵奖演讲(1978 年发表),批评以赋值、状态和程序计数器为核心的 von Neumann 式编程,主张用函数组合的 FP(函数式编程)风格来写程序。评论引用的访谈中,Backus 后来承认该范式没有把时间/实时处理纳入基本模型,因此未能成功。
HN 关注点:是因为这是函数式编程的奠基性批判文本,且评论补充了 Backus 本人对 FP 为何未成功的反思。
后来怎么样
作为图灵奖演讲,它推动了函数式编程思想的传播,并成为程序语言领域的经典文献;但所提出的 FP 范式本身未被主流采用,Backus 后来也承认其未成功。
HN 评论精选
这几条评论里:质疑 1 补充 2
质疑Backus 承认 FP 范式因缺乏实时/时间概念等根本问题而未成功。
Booch:你关于函数式编程的工作并不成功。 Backus:是的。 Booch:我们稍微谈谈这一点,因为在你图灵奖演讲(《Can Programming Be Liberated From the von Neumann Style?》,1977)之后,我还看到过其他一些论文,那也是转折点。因为我会把它描述为对语言开发者和程序员的一次警醒,说这里有一种不同的看世界的方式。而世界正走在一条非常不同的道路上。让我追问一下,你为什么认为它没有成功。 Backus:嗯,因为那个基本范式没有包含处理实时的方式。它是一种说明如何把这个东西转换成那个东西的方法,但其中没有时间要素,这就是它卡住的地方。 Booch:那是你多年一直在纠结的问题。 Backus:是的,而且没有成功。
discreteevent查看英文原文
Booch: Your functional programming work was unsuccessful. Backus: Yes. Booch: Let’s dwell upon that for a moment, because there were some other papers that I saw after your Turing Award lecture [“Can Programming Be Liberat ed From the von Neummann Style”, 1977] which was also a turning point. Because I’d describe it as a wake-up call to the language developers and programmers, saying there’s a different way of looking at the world here. The world was going down a very different path. Let me pursue that point of why you think it didn’t succeed. Backus: Well, because the fundamental paradigm did not include a way of dealing with real time. It was a way of saying how to transform this thing into that thing, but there was no element of time involved, and that was where it got hung up. Booch: That’s a problem you wrestled with for literally years. Backus: Yeah, and unsuccessfully. http://archive.computerhistory.org/resources/access/text/2013/05/102657970-05-01-acc.pdf
补充这篇论文在 HN 上被反复讨论,并附有历次讨论链接。
过往相关讨论(HN 链接):2019 年 12 月(32 条评论)、2017 年 6 月(3 条)、2016 年 12 月(107 条)、2016 年 7 月(175 条)、2015 年 9 月(57 条)、2014 年 4 月(72 条)、2009 年 8 月(34 条)。
dang查看英文原文
Some past related threads: Can Programming Be Liberated from the von Neumann Style? (1977) [pdf] - https://news.ycombinator.com/item?id=21855249 - Dec 2019 (32 comments) Can Programming Be Liberated from the von Neumann Style? (1977) [pdf] - https://news.ycombinator.com/item?id=14673817 - June 2017 (3 comments) Can Programming Be Liberated from the von Neumann Style? (1978) [pdf] - https://news.ycombinator.com/item?id=13210988 - Dec 2016 (107 comments) Can Programming Be Liberated From The Von Neumann Style? (1977) [pdf] - https://news.ycombinator.com/item?id=12159792 - July 2016 (175 comments) Can Programming Be Liberated from the von Neumann Style? (1978) [pdf] - https://news.ycombinator.com/item?id=10182712 - Sept 2015 (57 comments) Can Programming Be Liberated From The Von Neumann Style? (1977) [pdf] - https://news.ycombinator.com/item?id=7671379 - April 2014 (72 comments) Can Programming Be Liberated from the von Neumann Style? (classic) - https://news.ycombinator.com/item?id=768057 - Aug 2009 (34 comments)
补充指出电子表格/FPGA 等非 von Neumann 模型,并提到 Metamine 项目混合过程式与响应式代码。
电子表格和 FPGA 是两个不关注“程序计数器”的地方。 Metamine 很惊艳……他搞清楚了如何在一个地方安全地混合过程式代码和响应式代码,而不会在这个过程中发疯: https://web.archive.org/web/20201101065701/https://github.com/ymte/metamine 我看过 YouTube 上一系列很赞的视频,但现在找不到链接了。8( 我真的很想知道它后来去哪了。 [编辑:我在 https://github.com/caminadab/metamine 找到了仓库的一个 fork。当然,我 fork 了那个 fork,以安全保存一份副本]
mikewarot查看英文原文
Spreadsheets and FPGAs are two places where there's no focus on a "program counter". Metamine was amazing... he had figured out how to safely mix procedural and reactive code in one place without going insane in the process: https://web.archive.org/web/20201101065701/https://github.com/ymte/metamine I watched a set of videos on YouTube that were amazing, but now I can't find any links to them. 8( I would really like to know where it went. [Edit: I found a fork of the repository at https://github.com/caminadab/metamine Of course I forked that fork to have a copy for safety]
相关资源
从这篇论文所有 HN 讨论帖的全部评论里整理出来的链接。
历次讨论
- 2021Hacker News 讨论帖169 分 · 129 评
同领域还值得读
Google 的软件工程(2017)
Software Engineering at Google (2017)
介绍了 Google 的软件工程实践,包括其单一代码库(monorepo)、几乎全部开发在主干进行而非分支、代码审查、构建系统 Blaze、协议缓冲区等工具与流程,并讨论了频繁重…
编程语言与软件工程2017 · 1,127 分 · 465 评 · 引用 15入门 · 约 45 分钟编辑精选Peter Naur:编程作为理论构建 (1985)
Peter Naur – Programming as Theory Building (1985)
Peter Naur 1985 年的经典论文《Programming as Theory Building》提出:编程的本质不是写代码或文档,而是在程序员头脑中构建对程序及其运行…
编程语言与软件工程2016 · 629 分 · 74 评入门 · 约 45 分钟编辑精选SciPy 1.0:Python 科学计算的基础算法
SciPy 1.0: fundamental algorithms for scientific computing in Python
这篇发表于 Nature Methods 的论文介绍了 SciPy 1.0——Python 科学计算生态的基石库,涵盖其核心算法模块(优化、积分、插值、线性代数等)、软件架构与社…
编程语言与软件工程2020 · 387 分 · 98 评入门 · 约 45 分钟编辑精选Lisp 的历史(1979)
History of Lisp (1979)
这是 Lisp 发明者 John McCarthy 于 1979 年为 HOPL(编程语言史)会议撰写的回顾文章,讲述 Lisp 的起源、设计动机与早期演进,文中也涉及 if 表…
编程语言与软件工程2018 · 352 分 · 44 评入门 · 约 45 分钟编辑精选使用 NumPy 进行数组编程
Array Programming with NumPy
这篇 Nature 文章介绍 NumPy 的数组编程模型及其在科学计算中的核心作用:以 ndarray 为中心,通过向量化操作让 Python 高效处理多维数组。
编程语言与软件工程2020 · 318 分 · 134 评入门 · 约 40 分钟编辑精选