未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

コンピュータの動作原理は進化しているのか?

温故知新と言うか昔の歴史をひもとくと、1960年代にバロース(Burroughs)というコンピュータベンダーがあって、その会社のB5000シリーズと言うコンピューターのOSはMCP (Master Control Program) といった。 Burroughs MCP - Wikipedia


The Architecture  of the Burroughs B-5000 

そのコンピューターのMCPはALGOL風の高級言語で記述されていて、世界初の高級言語で書かれたOSだと言われている。B5000は世界で初めてマルチプロセッサと仮想記憶をサポートしたことでも知られている。

商用的には成功したとは言えず、後にUnivacと合併し、今はUnisysになっている。

B5000シリーズは高級言語マシンで、ALGOL風言語を直接的に解釈実行するような仕組みになっている。高級言語機械語がみたいなものである。そのため、ソフトウェアをバイナリ形式で配布するのではなく、ソースコード形式で配布していたそうである。

MCP(OSみたいなもの)も例外ではなく、カスタマイズはソースコードレベルでの修正になる。

UnixC言語で記述されたのは1973年頃なので、それより10年以上前に、そのようなマシンがあった。ただ、MCPを記述した言語はB5000シリーズのアーキテクチャーに依存していたので、他のマシンへの移植性はなかった。高級言語機械語みたいなものだったのである。

バロースのユーザー会ではMCPのパッチだけではなく、様々なものがソースコードの形で共有されていたらしい。オープンソースの時代が来る遥か昔にソースコード共有の文化があった。IBMの世界ではソフトウェアはバイナリで配布することが多かったので、そのような文化は育たなかった。

プログラミング言語は、多かれ少なかれ、それが動作するコンピュータの動作原理を反映する。Cのような言語が仮定している、フラットなメモリ空間とか、逐次的な動作とかが、言語のプリミティブににじみ出てくる。

コンピュータアーキテクチャが逐次実行ではなくて並列実行が前提になっていれば、機械語にも当然、そのような動作を記述する命令が出てくる。

http://shino.tumblr.com/post/49094483/c
別にCが悪いとかそういう話ではない。 ただ、「C言語的」なモデルが「ハードに近いレイヤ」であったのは歴史の一時点の ことであって、C言語をこれからもそのように扱うのは多分間違いだ。 たとえノイマン型は変わらないとしても、スレッドやメモリバリア、 キャッシュ、ヘテロなコアなどを最初から考慮に入れて新たに 「ハードに近い、高級アセンブラ」を考えるとすれば、 違ったモデルが出てくるだろう。 そして、それが例えば疎結合なメッセージパッシングに基づいたものになったとしても 私は驚かない。その時C言語は、メッセージパッシングなプリミティブが エミュレートする「古き良き時代のCPUとメモリのモデル」上で走る高級言語になるかもしれない。
― Shiro

というのをたまたま発見して、そのもとになるのが、http://blog.practical-scheme.net/shiro/20080902-100year-languageで、その中で、ユメのチカラ: LL Futureが引用されていたので、懐かしくなって読みふけってしまった。

1980年代くらいまでは、Lispマシンのようなコンピュータアーキテクチャも存在していたが、それ以降はVAXやi386などの汎用マシンが市場を席巻してしまったため、C言語的なパラダイムに支配されてしまった。

ひょっとしたら、まったく違うアーキテクチャーが出てくるかもしれないが、それがどのようなものになるのかは神のみぞ知る。

クレージーアーキテクチャーが出てこないと面白くない。