プログラミング言語Curl

curlは one of RIAs としてしかほとんど知られていませんが、純粋にプログラミング言語としてもcurlは大変面白いです。このブログのタイトルもそうした思いからついています。
kwatchの日記というブログで、珍しくプログラミング言語としてcurlが取り上げられていました。Javaは近代、Rubyは現代で、Curlは未来の言語だそうです^^;


kwatchの日記 - Java は近代の言語、Ruby は現代の言語、Curl は未来の言語

タイトルは釣りでもなんでもなくて、大まじめ。

Curl というのは、MIT の人たちが作ったリッチクライアント用言語。もともと軍隊で兵士につけるデバイス用のアプリを作るために開発されたらしい。だから少ないリソースでも高速に動作し、バカでも分かるGUIを備え、ネットワークが繋がっていてもいなくても同じように動くよう設計されたんだとさ。

リッチクライアント製品としての Curl も面白いんだけど、プログラミング言語としての Curl はもっと面白い。まじで次世代の言語だと思う。

以下、その理由。

こうやって特徴を列挙されるとcurlはもっとプログラミング言語としてアピールしてもいいんじゃないかと改めて思う。それにしてもこの人詳しいなぁ。。curlの特徴的なところはほとんど押さえられてる。マクロに言及がないのが意外だけど目に止まってないだけでしょうか。独自構文を定義できるマクロはcurlの中でも特に強力な機能なのでぜひこういった人には評価してみてもらいたい。

このブログ中のコメントについて少しフォロー。

ただし、C# の var のような、初期値で型を決定するという機能はない。ここは残念。

定数限定ですがdef構文を使うと型推論します。(def構文でよりlightweightになるプログラミング

なので匿名プロシージャは

|| これはめんどくさい
{let comp:{proc-type {String, String}:bool} =
    {proc {s1:String, s2:String}:bool
        {return s1.size < s2.size}
    }
}

の代わりに

{def comp =
    {proc {s1:String, s2:String}:bool
        {return s1.size < s2.size}
    }
}

のように宣言できます。
ちなみに匿名プロシージャはfnマクロを使って定義する方法もあります。代入先の型をコンパイラが知ることができる場合に、fnマクロを使うと匿名プロシージャの定義自体から型の指定が省略可能になります。例えばArray-of.sortメソッドの比較関数であれば↓のような感じ。

{array.sort
    comparison-proc =
        {fn s1, s2 => s1.size < s2.size}
}