続き

で、すこしはなれるが、プログラミングをしていると、いろいろな抽象化のはなしがでてくるので、それをちょっと整理しておきたい。(実際の歴史的な順序をなぞることを目的としない。)
まず有名なモデルというと、ノイマン型コンピュータというモデルがある。この前には、まず「計算」とか「計算機」に関するモデルがある。ラムダ計算とか、チューリングマシンとかだ。ラムダ計算ではもちろん「計算」という頭のなかの概念や操作だけを目的・対象としたモデル化で、当然実装方法やハードウェアのことはでてこない。つまり、考え事をするための、「頭の中だけで使う道具」としては存在するが、「引き出し」や「かなづち」のように道具として実体化されることはない。つまりハードウェアは人間の脳みそ、ということになる。
 チューリングマシンもやはり純数学的なモデルだ。「計算機」のモデルなので、「テープ」なんていうものがでてきたりもするが、頭の中にある適当なモデルとして「テープ」を説明に使っただけで、現実のテープを想定してモデルが作られたわけではない。
 ノイマン型コンピュータになると話は違ってきて、明らかに実体・ハードウェアとして実装することを目的として作られたモデルだ。ここら辺の話は詳しくないが(ほかの話ももちろん詳しくないが)、完全チューリングマシンの現実的でそれゆえ当然不完全な実装を、実現するためのモデルだということだろう。つまり、「計算機」というモデルを、もう少しハードウェア・物理世界よりのモデルである「回路」とか「記憶素子」とかの上で実現するための、モデルだということだ。ここには3つのモデルが出てくる。一つ目は、「計算機」(もしくはチューリングマシン)、2つ目は、「電子回路・素子など」、3つ目が、「ノイマン型コンピュータ」である。3つ目のモデルは、一つ目のモデルと2つ目のモデルを橋渡しして、2つ目のモデルの上で1つ目のモデルを実現・実装するためのモデルである。そのため、ノイマン型コンピュータというモデルは、計算機というモデルと、現状の電子回路素子などの技術的なモデル、この二つに強く依存していて、この両者が存在してはじめて意味をなすモデルだと考えられる。続く。