と、思う。改めて。飛び抜けて素晴しい部分があるわけじゃないけど、あるべきものがある良さ、というかそんな感じ。紹介文みたいなのを書いてみたくなったので書く。
プロトタイプベースのオブジェクト指向言語。だいたいのことがオブジェクトへのメッセージだと考えればいい。
a := 1 write (a, "\n") a = 2 write (a, "\n") updateSlot = method(x, write("update ha iya da!\n") ) a = 3 write (a, "\n")
初期化は := で、後からの代入は = で行なわれる。 = は updateSlot の呼び出しに他ならないので、このプログラムを実行すると、
1 2 update ha iya da! 2
と表示される。まあこんなことは他でもできる言語は多いし、誰でも知ってるか。ようするに動作原理がシンプルだということ。
ソースがきれいで、というか全てのものがあるべき位置にある感じで、ファイル分けがきちんと行なわれいる。例えば Io の組み込みクラスの Map は IoMap.c に記述されているのが ls して数秒でわかる。その中の全ての関数は IoMap_ で始まっている。そして、 IoMap.c に記述されているのは Io へのインターフェイスだけで、 hash の実装自体は base/Hash.c に記述されている。こういうのは当たり前のことだけど、結構きちんとやっているソースコードは少ないし、急いで書いてる時なんかはこういう気配りは忘れがち。
バインディングが非常に多い。これは二つのことを示唆すると思う。一つはこれらはそのまま拡張ライブラリを書くサンプルコードになるということ。もう一つはとても簡単に拡張ライブラリが書けるということ。実際拡張ライブラリ書くのはとても簡単で、オブジェクトを作って、メソッドを登録して、そのオブジェクトを環境に放り込めばいい。
以上のような理由、動作原理がシンプルでコードが綺麗でサンプルが多いこと拡張が楽なこと、から Io は非常に hack しやすい。これはいいことだ、と思う。
ソースがきれいなことのおかげで、再利用がとてもしやすくなっている。言語処理系なんか再利用してどうする、と思うかもしれないけどこれはとても嬉しいこと。 C 言語でなんか書いてると必ず起こる悩みとして、可変長配列、リスト、ハッシュをどうしよう…ということがあると思う。 Io を使用しているソフトウェアならそんなこと考えなくていい。 Io のリストだのハッシュはそのまま他のプログラムでも問題なく使えるから。(実際拡張ライブラリの内部でよく使われているし、前回の direct_ccall でもシンボルテーブルに Hash と String を使用しているため、非常に短くまとまっている)
IoVM のサイズは現状 167kB で、 liblua*.a は 109kB 。といくらか Lua より大きいのだけど、削り取ることは簡単だし (http://d.hatena.ne.jp/shinichiro_h/20031216#p1) 、組み込み言語に、リストやハッシュもついてこのお値段なら悪くないと思う。