プログラミング言語 Io が面白い

「7つの言語 7つの世界」を読んでいる。
いろいろなプログラミングのパラダイムを知ると、視野が広がることを実感。

7つの言語の最初の Ruby は、まあ、情報も多いし、母体(?)が、昔、いじっていた、 Lisp, Smalltalk, Perl なので、あまり、視野が広がった気はしなかった。
最近は、 Java ばかりだったので、久しぶりに、Smalltalk のころを思い出して、そもそものオブジェクト指向パラダイムの感覚がちょっぴり戻った気分になったのが収穫。

2番目の言語の Io は、この本で初めて知った。
いやー、おもしろい。
昔、人工知能をかじっていたころ、知識の表現方法の一つのフレームモデルの情報の入れ物「スロット」を思い出した。

Io (アイオー)は、とにかく単純。

  • プロトタイプ型 ( new ではなく clone でオブジェクトを増殖させていく)
  • オブジェクトが自分のプロトタイプ(原型)を記憶している。
  • オブジェクトにメッセージを送ることがすべて

「継承」というか、オブジェクトからオブジェクトを複製して、新しい知識(スロット)を、オブジェクトに追加してやる、というモデルが、ほんと、自然に、単純に実装されている。

Vehicle <- Car <- ferrari

という陳腐なサンプルも、 Io のパラダイムでは、別世界。ほんと、単純なだけに、新鮮。

Vehicle := Object clone
Car := Vehicle clone
ferrari := Car clone

これで、 Vehicle に、例えば、 description "移動手段" とか、スロットを追加してやって、

ferrari に description メッセージを送れば、 "移動手段" が返ってくる。

まあ、オブジェクト指向らしい言語であれば、どの言語でも、同じようなことができちゃうけど、Io は、単純ですっきりしている。
( clone メッセージだけで、どんどん、新しいオブジェクトを生み出せる)

この「単純明快」なオブジェクト指向というのが、Io プログラムのパラダイムというわけだ。
Simple is best. それは、美しくさえある。

<補足>

Io 自体は、単純だったけど、インストールは、ちょっと苦労した。

% io
Io>

というインタプリタの起動までに、ちょっとはまった。
備忘録というか、簡単なメモ。

  1. Windows 環境へのインストールの情報が cygwin 前提みたいだったので、あえなく挫折。
  2. Amazon EC2Linux 環境で、トライ。
  3. http://iolangauage.com から、ダウンロード。 まあ、ホームページもシンプル。
  4. Max OS 用の説明がいきなりでてきて、たじろぐ。(英語ですでにたじろぐ)
  5. cmake が必要だったので、cmake を wget して インストール。
  6. build.sh を実行して、警告がありつつも、build は完了。
  7. make install して io とやっても、 ライブラリのロードエラー
  8. Readme.md という見たことのない拡張子に、またたじろぐ。いちおうテキストみたい。
  9. そこで、ldconfig しろ、と書いてあったので、やってみたが、やっぱりエラー。
  10. それでもだめなら、 /etc/ld.so.conf を書き換えろ、と書いてあるので、開いてみるが、ちょっと、ファイル名といい、デフォルトの内容といい、書き換えに躊躇。
  11. とりあえず、オリジナルを複製しておいて、思い切って書き換え ( /usr/local/lib を追加)
  12. ここで、再度、 ldconfig して、めだたく、io 起動に成功

うーん、インストールがもうちょっとシンプルだと、よかったんだけどなあ。
まあ、おかげで、 Io というシンプルな、言語のパラダイムを試食できたことには、大満足。

ほんと、興味深い言語です