きりかノート 3冊め

おあそびプログラミング

Whi TCL? on MacPorts

Summer of Code の記事を読んでいて、MacPorts システムの中心となるプログラミング言語は Tcl にちょっと興味をもったので調べもの。

なぜ Tcl なんだろう? MacPorts/DarwinPorts は比較的最近のプロジェクトなのだから、もっと新しめの言語、たとえば perlpythonruby は海外ではブレイク前)という選択肢もあったよね?と思って調べてみると、そのものずばりの回答が DarwinPorts の ML アーカイブに見つかった。Why TCL?

いちばんに挙げられているのが、key/valure のペアを簡単に記述できること。つまり、Portfile - DSL としての Tcl を評価したというのが理由のようだ。Portfile 書くような人は知っているとは思うけれど、MacPorts の Portfile は Tcl スクリプトそのものなんだ。例として、ruby の Portfile を見てみると、前半部分はただの設定ファイルにしか見えないよね。でも post-destroot あたりはちょっとあやしい、foreach とかあるし。そう、これはコードなんだ。前半の version や depends_lib なんかも実際には関数で、その引数として値を評価しているわけだ。クォートしなくてもリテラル文字列になる(なってしまう?)Tcl ならではだね。たいていのことは設定ファイルのように、設定項目とその値を書けばよいし、ちょっと複雑なことをしたければそのままプログラムとして表現できる。まさに言語内DSL

そういえば、昔 Oracle や ARCServe で .tcl のついたファイルを見かけて驚いた記憶があるような気がする。海外では(日本でも?)スクリプトとして広く使われている言語なのかもしれないな。自分のまわりにないだけで。

でも、るびまTcl の記事 を見るとやっぱりビミョウな位置みたいにも思えるなあ。