Newsqueak on MacOS X

巷ではErlangが流行っているらしいく(「twitterブームの陰で注目を集める“Erlang”」)、Matzさんは「次の言語」として「『関数型』と『並列』。両方を押さえたErlangが本命。歴史も信頼性もあり、知名度上昇中」と書いている。(2007-08-26 追記: 正直なところ、「Erlangは注目すべき言語だが、おそらくは将来の他言語に影響を与える礎になるのではないか」とのこと。)

しかし、世間の一歩下を行く(?)人はNewsqueakと戯れてみるのもいいかもしれない。(New)squeakErlangと同じぐらい昔からある言語だが、CSP (Communicating Sequential Process)由来のメッセージパッシングプリミティブを持つのが特徴の言語である。関数型言語ではなく構文はCに強く影響を受けているところは、言語フリークには受けが今ひとつかもしれないけど。

Concurrency/message passing Newsqueak」でRob Pike氏がNewsqueakについて語った講演を紹介したけど、同氏のページからUNIX用の実装をダウンロードすることができる。

Linuxなら無変更でコンパイルできる。MacOS Xで動かすためには、include/u.hに次の行を追加すればよい。

#ifdef __APPLE__
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <fcntl.h>
#include <setjmp.h>
#include <math.h>

typedef unsigned char uchar;
typedef unsigned long ulong;
typedef unsigned long long uvlong;
typedef long long vlong;
#endif

makeするとsquintというインタプリタが生成される。サンプルプログラムはsquint/progs以下に。

実用性の観点から言うとErlangにすら全然かなわないけど、CSPスタイルのチャネルを使ってGUIもきれいに書けるとかいう思考実験するには楽しいかも(参照:あろはさんとこ)。論文にも出てくるウィンドウシステムMux?も同梱されている。たしかにws1.sqは300行切っているなぁ。

$ wc ws/*.sq
     641    1191   12342 ws/opcm.sq
     641    1199   12388 ws/pcm.sq
     536    1029    9981 ws/ws.sq
     294     564    5448 ws/ws1.sq
    2112    3983   40159 total

どうもこれらはPlan9で動くみたいね。

その他、Doug McIlroyの論文「Squinting at Power Series」にも興味深いプログラム例がいくつか掲載されている。