Concurrent Clean : Esther

以前より探していたFamkeを使ったシェルですが、下の論文によると、Esther(エステル)という名前が与えられているようです。
http://citeseer.ist.psu.edu/plasmeijer05functional.html
そして、Hildeライブラリをもう一度よく見ると、Esther.prjというファイルが存在していることに気づきました!
なんで見落としていたんだろ。これが、Famkeを使って作られたEstherという名前のシェルそのものです。

      • -

早速コンパイルすると、Esther.batというファイルができるので、これを適当なフォルダに移動して(このシェルを使うといろいろファイルができるので)、実行してみます。
(残念ながら、EstherはWindows環境専用なので、Windows以外のユーザの方は利用することができません。)
基本的には、"Hilde Readme.txt"に書かれているとおりなのですが、気づいた点を。
起動して、コマンドプロンプトが3つ開きますが、最後の窓にプロンプトが出現するので

Famke Process Client 1 working
>

「1 + 1」ととりあえず打ってみたところ、エラーになってしまいます。これは、Estherはシェルなので、パスというのがあって、そこにCleanの関数がエクスポートされていないとだめなのです。
とりあえず、お試しなので、カレントディレクトリに関数をエクスポートすることにします。「StdEnv」と打ち込むと、標準関数を一式、カレントディレクトリにエクスポートします。エクスポートが完了すると、「StdEnv」関数の返値が型付きで出力されます。

>StdEnv
True :: Bool

さてこれで準備完了です。たとえば、次のような式が評価可能です。

>1 + 1
2 :: Int
>map (\x -> x*x) [1,2,3,4,5]
[1, 4, 9, 16, 25] :: [Int]
>map
map :: (a -> b) -> [a] -> [b]
>let ones = [1:ones] in take 10 ones
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] :: [Int]

OSの機能にもアクセス可能です。

>mkdir ["test"]
UNIT :: UNIT
>cd ["test"]
UNIT :: UNIT
/test>cwd
["test"] :: [{#Char}]

mkdirはディレクトリ作成、cdはディレクトリ移動、cwdはカレントディレクトリの表示。パスが、[String]なので、打ち込むのが面倒です。
これは以前([id:lethevert:20061021:p3])書いたClean風シェルと言っていたものそのものです。かなりうきうきしませんか?

      • -

試していないですが、Estherは、スレッドの起動やプロセスの起動やその間の通信が、複数のPCからなる分散環境でも行うことができるはずです。このあたりの機能は、Erlangのシェルを思い出す部分があります。
以前から、Cleanは、シェルがなかったりスレッドやプロセスや例外が使えなかったりして、肩身の狭い思いをしてきましたが、実はそんな必要はなかったのです!!!
ということで、これからは、自信を持って、Concurrent Cleanと言えるし、LLと言えます。(ちょっと違う)