関数型プログラミングのコンテキストでは、副作用の典型的な例は「ミサイルの発射」です。その表現は歴史的にどこから来たのですか?
5 に答える
「ミサイル発射」は歴史的にどこから来たのですか?
それで頑張ってください—それはプログラミングの質問というよりは研究の質問です。
2つのデータポイントは次のとおりです。
少なくとも10年前の講演では、サイモンペイトンジョーンズが正確なフレーズを例として使用していると聞きました。
1990年代初頭、おそらく1990年代にさえ、社会的責任を考えるコンピューターの専門家は、原子爆発の写真と書かれた伝説を示すTシャツを作成しました。
究極のエラーメッセージ
私はそのフレーズが少なくともそこまで遡ることを賭けます。
本当の答えを得るには、プログラマーではなく、辞書編集者が必要です。
私はこれの証拠を持っていませんが、私はいつもそれがバグのあるCコードの同様の部分から来ていると思いました:
if (hasSecurityClearance = true)
{
launchMissiles();
}
トランザクションメモリ内の「ミサイルの発射」は、I/Oが取り消せないことを強調するために使用されます。ミサイルが発射されると(つまり、ネットワークパケットが送信されると)、ミサイルは進行中であり、コールバックすることはできません。トランザクションの場合、これはもう中止できないことを意味します。代わりに、結果( BOOM )を既に公開しているので、終了する方法を見つける必要があります。
トランザクションメモリは、ウォーゲームがリリースされてクールでなくなった後の1993年に最初に提案されました。サイモンペイトンジョーンズからのこの2006年のTM論文(2ページ)は、私が「ミサイルの発射」のアナロジーを見つけた最初の場所です。これが起源でしょうか?
確かにICBMの発射を管理するソフトウェアアプリがそこにあるので、リスク評価が核の絶滅の偶発的な誘発をカバーしなければならないプロジェクトがなければなりません。しかし、そのフレーズが実際の事件を指しているようには見えません。もちろん、そのようなことが起こった場合は、ブラックヘリコプターがその痕跡をすべて抑制するために賢く出ていたに違いありません。
とにかく、それは「起こり得る最悪の事態は何ですか?」という質問に対する単なる双曲線の答えだと思います。起源はおそらく映画「ウォーゲーム」のようなものに由来します。そこでは、AIがゲームをプレイしていると考えて核戦争を開始しそうになっています。
もう1つは、実際には副作用ではないということだと思います。ミサイル発射制御プログラムはミサイルを発射することになっています。ただ、必要なすべてのチェックが行われた後にのみ起動する必要があります。つまり、ステップ10に到達しないようにすることです。ステップ1:大統領を起こす、ステップ2:目標座標を確認するなどを完了するまで、ミサイルを発射します。
取り消せないアクションの例として、データベーストランザクションのロールバックのコンテキストで聞いたことがあります。「ミサイルの発射を解除するのは難しい」。