25

在函数式编程的上下文中,副作用的一个典型例子是“发射导弹”。这种说法在历史上是从哪里来的?

4

5 回答 5

16

历史上“发射导弹”从何而来?

祝你好运——这更像是一个研究问题而不是编程问题。

这里有两个数据点:

  • 至少十年前,我听说西蒙·佩顿·琼斯(Simon Peyton Jones)在谈话中使用了这个确切的短语作为例子。

  • 在 1990 年代初期,甚至可能在 1990 年,Computer Professionals for Social Responsibility制作了展示原子爆炸图片和文字传奇的 T 恤

    最终的错误信息

    我敢打赌,这句话至少可以追溯到那么远。

要获得真正的答案,您需要词典编纂者,而不是程序员。

于 2010-05-05T13:55:10.190 回答
12

我没有证据证明这一点,但我一直认为它来自类似的错误 C 代码:

if (hasSecurityClearance = true)
{
  launchMissiles();
}
于 2010-05-05T16:27:44.517 回答
7

事务记忆中的“发射导弹”用于强调 I/O 是不可撤销的。一旦导弹发射(即发送网络数据包),它就在途中,无法回调。对于交易,这意味着您不能再中止。相反,由于您已经发布了结果 ( BOOM ),您必须找到完成的方法。

事务性内存于 1993 年首次提出,当时是在 Wargames 发布并不再酷炫之后。这篇来自 Simon Peyton-Jones 的 2006 年 TM 论文(第 2 页)是我第一次找到“发射导弹”类比的地方。这可能是起源吗?

于 2010-05-05T14:21:35.763 回答
4

确实有软件应用程序可以管理洲际弹道导弹的发射,因此必须有项目的风险评估必须涵盖意外触发核毁灭。然而,这句话似乎并不是指真实的事件。当然,如果真的发生了这样的事情,你可以打赌黑色直升机很聪明地压制了它的所有痕迹。

无论如何,我认为这只是对“可能发生的最坏情况是什么?”这个问题的双曲线回答。起源可能来自电影“战争游戏”之类的东西,其中人工智能几乎开始了一场核战争,因为它认为自己在玩游戏。

我想另一件事是,它并不是真正的副作用。导弹发射控制程序应该发射导弹;只是,他们应该只在进行所有必要的检查后才启动它们。所以这是为了确保我们不会进入第 10 步:发射导弹,直到我们完成第 1 步:唤醒总统,第 2 步:检查目标坐标

于 2010-05-05T12:16:23.457 回答
1

我在回滚数据库事务的上下文中听说过它,作为无法撤消的操作的一个示例:“很难取消发射导弹”。

于 2010-05-05T14:08:09.390 回答