このコンテンツの内容は無保証です。単なる原稿書きからの現実逃避の産物であり、きちんと裏付けを取っていないことをお断りしておきます。
さる原稿を書いているときに、ソースコードの空白文字を変えてしまうと困るという話を説明する必要が生じました。その時、ふと思い出したのが、Occamというプログラム言語です。おそらく、パソコンに詳しいと自称しているマニアでも知らない人が大多数ではないかと思いますが。なかなか面白いプログラム言語で、くっきりと印象が残っています。といっても、現物は使ったことがありません。雑誌で見ただけです。しかも雑誌と言っても、普通のパソコン雑誌ですらなく、もしかしたら昔はたまに買っていたbitあたりに載っていた記事かも知れません。
それはさておき、Occamの話をする前に、どうしてもTransputerについて触れねばなりません。Transputerは、並列処理のために設計されたCPUだったと思います。並列処理というのは、多数のTransputerチップをマトリクス上に接続して並列実行することを前提に設計されているという意味です。たとえば、縦横16個ずつ並べれば256個のCPUが同時に稼働する並列処理コンピュータになるわけですね。こんな大胆な代物を作ろうとしたのが、愛すべき偏屈者の国、イギリス企業のInmosであった、というのも面白いところです。けして、日米の主流の半導体企業から出たものではなかったのです。
実際、こんな奇抜なTransputerは本当に完成して使われたのかというと、ちゃんと使われた事例があります。しかも、日本で、日本のパソコン向けの製品に組み込まれた事例があります。Windows 3.0の時代に、Windowsで日本語アウトラインフォントを利用可能にする製品として、アルプスが拡張カードを発売しました。これに載っていたCPUがTransputerです。当時のCPUはあまりに貧弱で、アウトラインフォントを展開するのに力不足であったため、パワーのあるTransputerを積んだオプションカードで展開してしまおうと言うわけです。しかし、残念なことに、このカード上のTransputerは1個。並列処理の事例にはなっていません。しかも、Windows時代に入って高速なCPUがすぐに普及して、拡張カード上のTransputerに頼らなくてもアウトラインフォントが使える時代が来てしまいました。そのため、ほとんど普及しないまま消えてしまいました。しかし、確かにそういう製品は存在していました。
と脱線が長すぎたので話を戻しましょう。
今日のテーマはOccamです。
曖昧な記憶で原稿を書いてもいけないと思って調べると、ちゃんとOccamのサイトがありました。
WoTUG - Occam Language
しかも、見てみると、occam compilersなんていうリンクも見えますね。Occamのコンパイラも入手できるようです。しかも、普通のシステムでも使えそうなものが……。時間がないのは辛いですね。Occamで遊んでみたいのに。
それはさておき。
Occamで特に凄いと印象に残ることは2つ。それをサンプルソースを通して説明してみましょう。以下はoccam 3 reference manualから適当に引用してきたサンプルソースです。読んでないから意味は正確に分かっていませんが、まあ、いい加減なホラを吹きましょう。
SEQ i = 0 FOR array.size
stream ! data.array[i]
まず、1行目と2行目のインデントの差を見てください。Occamはインデントの深さでブロックを示します。たとえば、ブロックを示すために、Cだとこんな風に書きますよね。
for(;;)
{
printf("hello!");
}
ここでprintfを字下げしているのは、単に読みやすくするだけの目的で、言語仕様的に以下のように書いても意味は同じです。
for(;;)
{
printf("hello!");
}
しかし、Occamはそうではありません。このサンプルソースの2行目は字下げされていますが、字下げされた範囲が1つのブロックを形成します。そのため、ブロックを示すための{}のような記号はありません。Pascalのbegin endに相当するものもありません。なんとザクッと切れ味が良くて面白い!
もう1つは、先頭にあるSEQという命令です。これは、複数の処理を順番に実行せよ、というものです。複数の処理を順番に実行、というのは普通のプログラム言語には対応する命令がありません。それは当たり前だからです。なぜOccamには当たり前のことを示す命令があるかというと、これと対をなすPARという命令があるからです。これは、並列に実行せよ、という命令です。つまりSEQではなく、PARを使うと、処理すべきものが、順番に実行されるのではなく、同時に並行して実行が開始されます。これは、複数のCPUがマトリクス状に接続されることが前提のTransputer用プログラム言語ということですね。なんと面白い!
というわけで、Occamは面白いです。
暇のある学生時代なら、ぜひ遊びたいものですけどね。暇がないのが残念。