「FORTH」と一致するもの

HEX-BANG(CAM-PC)

hex-bang.gif

CAM-PCに付属してくるルールセットの中で私が最も気に入っているのがこれ。HEX-BANGというネーミングは、日本語に訳すと「六角バーン」というところか。FORTHのSCREEN 0に記載された説明を読むと、六角格子上の3状態により構成されたルールであることがわかる。

amoeba (CAM-PC)

amoeba.gif

fleetsの記事で、lifegameの艦隊のセル配置がuser contributionに採用されたという話を書いたが、実は、ルールそのものも採用されたことがある。「amoeba」と名付けたものだが、50%のランダムスープからスタートすると、アメーバのようにセル集合が変形を繰り返し、やがて「蒸発」するというものだ。

CAM-PC(CAM 6)

liferand.jpg

CAM-PC(CAM 6)を久しぶりに動作させてみた。などと書いても、そんな物など知らないという人がほとんどだろう。という訳で、WIKIにリンクを張っておく。

かれこれ20年も前に、MITで開発されたセルオートマトン用の並列計算機である。計算機と言っても、PC-AT互換機のXTバス(!)に挿入する特殊なカードの形状をしている。256x256のセル空間内で、オートマトンのシミュレーションを並列処理することに特化して開発されたもので、MIT内では「CAM 6」と呼ばれていた。これをベンチャー企業のAutomatrixが「CAM-PC」の名称で販売していたのである。1990年代初頭の頃の話だ。

Cellab

Islam5.jpg久しぶりに、セルオートマトンシミュレータの「CELLAB」でムービーを作ってみた。有名なのは、ジョン・コンウェイのライフゲームだが、ルールを変えればいくらでも面白い挙動を示すものを発見することができる。今日は、自作のルールを適用して、ちょっと面白い幾何学模様を生成するセルオートマトンで遊んでみた。

上に示す画像がそれだが、幾何学模様の面白さを示すためには、無圧縮の画像でないとダメなので、AVIファイル形式となっている。WindowsMedia形式では、圧縮に伴う画像の劣化があり、緻密な変化の面白さが判らないのだ。ダウンロードには少し時間がかかるかもしれないが、なかなか面白いので乞うご期待である。

20年ほど前は、このような計算負荷の重いシミュレーションがPC上で可能になるとは、夢にも思っていなかった。当時は、セルオートマトンに特化したPC用のISAボードが、MITで開発されており、私も大枚をはたいてアメリカから個人輸入して使ったものだ。セルオートマトンに特化したボードなので、速度は、当時の汎用スパコンのCRAY-2並みと言われていた。このハードウェア処理によるシミュレーションのパラメータを設定するのに用いられていたのがFORTHという言語だった。私がこの言語に接したのは、その時が初めてであったが、実に奇妙な、そして融通無碍な言語であった。

それはさておき、その後、PCのCPU処理速度が向上するにつれて、ハードウェアに頼らなくても汎用のCPU上でシミュレーションが可能となった。そのためのソフトウェアも市販されるようになり、何と、CADメーカとして有名なAutodesk社から「CA-LAB」というのが発売されていた。まだWindowsが出現する前のことなので、IBM互換PCのPC-DOS上で、これを動かして遊んだものである。

そして、現在、Windows化されたCA-LABが、前述のCellabである。CA-LABは、セルオートマトンのルールをCやPascalを用いて自分で定義することができたが、Cellabも同じ手法でルールを定義できる。上記の画像に用いられているルールは、私がCで書いたものであり、その内容は以下の通りだ。


#include "jcrule.h"

int jcrule(oldstate,     nw,  n      , ne,
                              w,   self,     e,
                              sw,  s     ,  se
            )
int oldstate, nw, n, ne, w, self, e, sw, s, se;
{
    int count;
    static int firstime = 1;

    if (firstime) {
       firstime = 0;
           strcpy(patreq, "islam");
           strcpy(palreq, "islam");
    }

    count = (nw*2 + n*3 + ne*2 + w*3 + e*3 + sw*2 + s*3 + se*2)%8;


    if(((oldstate >> 2) & 0x01) == 0) {
        if(count == 0 || count == 2 || count == 4) {
            if(self == 1) {
                return 7;
            } else {
                return 5;
            }
        } else {
            if(self == 1){
                return 6;
            } else {
                return 4;
            }
        }
    }
    if(((oldstate >> 2) & 0x01) == 1) {
        if(count == 0 || count == 2 || count == 4){
            if(self == 1) {
                return 3;
                } else {
                return 1;
                }
            } else {
            if(self == 1) {
                return 2;
                } else {
                return 0;
                }
            }
        }
}

変数等の詳しい内容は、前述のCellabのサイトにマニュアルが掲載されているので、興味のある人は、参照すると良いが、何はともあれ、オートマトンのムービーを見てみることをお勧めする。こんな単純なルールからは、思いもよらない多様なパターンが展開されるのに驚くことだろう。因みに、幾何学的な文様を次々と生成するので、このルールを「Islam」と名付けた。決定論的でありながら、予測不可能であるというのが、セルオートマトンの面白さだと改めて思う。




FORTH

このブログのサブタイトルの

"FORTH is like the Tao: it is a Way, and is realized when followed. Its fragility is its strength; its simplicity is its direction."

は、Leo Brodieの"Thinking FORTH"の巻末に引用されているMichael Hamの言葉だ。何でもMountain View Pressの「FORTHについて25ワード以内で述べよ」というコンテストの応募作の一つだそうだ。かつて、このマニアックな言語を用いてプログラミングをしていた私にとっては、この文章の言わんとするところは、とてもよく理解できる。老子を意識しているところも好ましい。
と言うわけで、老子風の表現で訳してみた。

「FORTHは道の若し。従はば自から成る。微妙繊細にして剛なり。簡素を以て善しとす。」

それにしても、最近のWindows用開発環境の何と複雑怪奇なことか。FORTHは極端にしても、Cでプログラミングしていた頃のことが懐かしいなどと言うと歳がばれるかもしれない。


Visual C# 2005 Express Edition

パソコン関係の書籍を購入したら、"Visual C# 2005 Express Edition"のインストールCDが付属していた。MS-DOSが使われていた頃は(などと言うと歳がばれるが)、MS-CやFORTHを使って、趣味のプログラミングにいそしんでいたものだが、Windows時代になってからは、Microsoft系の開発環境とは、全く縁がなくなってしまった。
 一つには、「統合開発環境」なるものが気に入らなかった。やたらとお節介な代物で、勝手にコードを生成したりして、見通しが悪い感じがしたからである。また、C++の複雑怪奇な言語仕様も趣味で使うには、面倒くさいだけだったこともある。そんな訳で、メジャープラットフォームのWindows上での開発から足を洗って、専らPDAやゲーム端末用のアプリケーションの開発を、GNUコンパイラなどを使ってコマンドラインで行ってきた。
 そんな「ガラパゴスのイグアナ」状態の私が、前記のようなきっかけで、最近のWindows開発環境を試してみる気になった。購入後6年目を迎えたDELLのくたびれたPCにCD-ROMをセットして、インストールを開始したのだが、マシンが遅いこともあって、やたらと時間がかかる。なかなか終了しないので、一風呂浴びて出てきたら、無事に終了していた。
 早速、起動してみたが、Visual C++よりもさらに「面倒見」が良さそうな開発環境である。スクリーンセイバースタートキットなるものをビルドしてみたら、数十秒でコンパイルが完了してサンプルのスクリーンセイバーが起動した。 ソースを見てみると、一通り必要な物は揃っているようだ。これにちょいと手を加えて、自前のスクリーンセイバーでも作ってみようかと思ったのだが、元々のソースにあらずもがなのメソッドがてんこ盛りなので、これらのメソッドやリソースを削除することから始めなくてはならなかった。
これが結構面倒で、不要な部分をコメントアウトして、スケルトン状態にするのに時間を食われてしまった。まあ、コードエディタには、選択した範囲を一括してコメントアウトしたり、コメント解除したりする機能が付いているので、ざっと全体を見渡して、何度か試行錯誤した結果、単純にスクリーンをブラックアウトさせるのに必要最小限のコードだけを抽出することができた。 あとは、これに手を加えて自前のスクリーンセイバーにすれば良いという訳だが、上記の作業だけで疲れてしまったので、今日のところはこれでおしまい。
それにしても、「スタートキット」と言うのなら、最初からシンプルなテンプレートを提供してほしいものだ。こんなことを言うと、「余計なメソッドやリソースが付いていても、コールしなければJITerがコンパイルしないので同じ事」と馬鹿にされそうだが、長年ピュアなCコンパイラを愛用してきたこともあり、余計なソースコードが含まれているということ自体に生理的な嫌悪感があるのだ。
 スケルトンができたので、ちょっと脱力系のスクリーンセイバーを作ってみるつもりだ。詳細については、後日。
  1 2

アーカイブ