コンピューターの勉強

引き続きコンピューターの勉強中。手を動かすと理解した気分になってよろしい。

よくよく考えるとはるか昔、学生のころコンピューターの仕組みは勉強したはずだが、
残念ながら勉強としてしかやっていなかったようだ。つまり意義も分からずにやっただけで、何もかも忘却してしまった。何年もエンジニアとして飯を食っておきながら恥をさらすようだが、どうどうと手を動かすことにする。

「あなたの作品は現在のあなたを残酷なまでにはっきりと表現する」(WiLiKi,http://practical-scheme.net/wiliki/wiliki.cgi?Shiro)

さて、コンピューターアーキテクチャーを勉強しないと、美しい BrainF*ck 仮想機械は作れないと分かった。

スタックマシン、アキュームレータマシン、について。
http://rryu.sakura.ne.jp/compfund/backnumber/compfund016.txt

プログラムシミュレータ ed21
http://lecture.ecc.u-tokyo.ac.jp/johzu/joho/ed21/

ed21 は java で実装されていて、グラフィカルにコンピューターの仕組みを勉強できるようだ。

ed21 は10個程度命令を持っているアキュームレータマシンだ(たぶん)。JavaJVM スタックマシン、次期 Perl VMレジスタマシン(らしい)。Common Lisp はビット演算も山ほど持っているので、 CLOS で ed21 を実装するのに特に問題はない(というよりは高級言語で低レベルなハードウェアをまねるのは当然簡単にできるはず)。
資料ではごくわずかな行数で Ruby による仮想機械のインタプリタを実装している。これを見ると、コンピューターがとても単純な仕組みでしか無いことが実感できる。

ed21 くらい命令セットがあると、BrainF*ck を実装するにしてもずいぶん高速化できる余地があると思われる。
なにせ言語よりも仮想機械の方が沢山命令があるのだ。

忘れていたが情報処理試験に出てくるのがCOMETII/CASLII。

COMETIIはレジスタマシン?スタックもあるけど。命令も沢山あって実装するのはちょっと面倒くさい。仕様がちゃんと決まっている分、勉強にはいいかもしれない。

http://itpro.nikkeibp.co.jp/article/COLUMN/20070404/267385/



(続く)