次の「Rubyist のための他言語探訪」は Io

Matz にっき によると、次の“るびま”の連載「他言語探訪」には Io が取りあげられるのだそうで。 

http://www.iolanguage.com/


個人的には“お気に入りの言語”とか言っているわりに、最近はあまりいじっていません。そこで、予習(?)を兼ねて、ひさびさに最新版を Cygwin にインストールして遊んでみました。

インストール

http://www.iolanguage.com/downloads/

より、IoFull-2005-10-07 をゲット。_readme.txt に従い、cd vm して make 後、make install 。以前は Cygwin では make install に失敗していたらしいのですが、今はだいじょうぶみたいですね。ただ、OQO model 01 のもっさり Crusoe には Full 版はちときつかった…(^_^;)。簡単なことをして遊ぶだけなら IoVM-2005-10-07 で十分だったような気もしましたが、時すでに遅し。


インストール後は io で対話的環境が起動できます。ただ、この対話的環境は readline に対応していないので、何かとやっかいです。そこで、rlwrap というユーテリティ を用いて、むりやり readline 的操作が可能なようにして使うことにしました。rlwrap インストール後の起動は rlwrap io とします。

チュートリアル

http://www.iolanguage.com/docs/tutorial/
http://f21.aaa.livedoor.jp/~kizz/prog/io/_docs/IoProgrammingGuide_ja.html
(後者は、日本語で読めますが古めです。前者も最新ではありません)


Io は、RubySmalltalk よりもメッセージングに重きを置いている言語です。この切り口においては、変数へのアクセスすら(内部的には)メッセージングによって行なっている SELF のこだわりに近いものを持っています。…というよりは、メッセージすらアクター(ひらたく言えばオブジェクト)で実現した ACT 1 の流れをくんでいる…、といったほうが正確でしょうか。
Concurrent Object-Oriented Programming in Act 1


ACT 1 は、アクター理論に基づいて設計された言語です。アクター理論は、ケイが Smalltalk のために考えた“メッセージング”のアイデアにインスパイアされたヒューイットにより(ケイの考えていたのとは別の方向性で) 1973 年ごろ学術的にまとめられました。

http://portal.acm.org/citation.cfm?id=512942
https://www.cypherpunks.to/erights/history/actors/actor-induction.pdf


さらに、このアクター理論にインスパイアされてできたのが Scheme で、文献では、Schemeクロージャとアクター(オブジェクト)との等価性について言及があったりして興味深いです。

Scheme: An Interpreter for Extended Lambda Calculus


文法に関して Io は、通常の関数呼び出しに近い記法を採用しています。レシーバとメソッド名との間にピリオドではなくスペースを入れるところは Smalltalk ゆずりですが、Smalltalk や SELF、Objective-C、Slate が採用しているメッセージ式は使っていません。ここいらへんに関する設計者の見解については、次のページの「Why not use an infix message syntax like Smalltalk?」の項に簡単にまとめられています。

http://www.iolanguage.com/docs/faq/

リファレンス

http://qualitycode.com/repos/minl/_docs/IoVM.html
http://f21.aaa.livedoor.jp/~kizz/prog/io/IoVM/_docs/IoVM_ja.html

これも古いもので、最新のものは見つけられませんでした。


ここ数年、言語仕様がどんどん変わっていっているようで、ドキュメント化がついていけていないようです。最新仕様に至る経緯を詳しく追跡したければ、メーリングリストを我慢強く読んでひととおり目を通す必要がありそうですね。

http://groups.yahoo.com/group/iolanguage/


いろいろありますが、最近の比較的大きな言語仕様の変更は、NewtonScript から取り入れた parent スロットの廃止(継承モデルの変更)でしょうか。これは id:shinichiro_h さんが更新履歴兼雑記で簡単にまとめておられます。

http://d.hatena.ne.jp/shinichiro_h/searchdiary?word=protos

情報の入手

見て分かるように Io は非常に Google で情報を検索しにくい言語名なのですが、io の代わりに io-language で検索 すると、欲しい Io 関連情報に比較的行き着きやすいようです。また、clone getSlot method block で検索 をかけると、公開されているコードやコード片を含むページが列挙されるので、他の人のコードを見てこっそり(^_^;)参考にしたいときに重宝します。


さらに、以前ご紹介させていただいたように、最近では id:epcg さんが clouds で活発に Io 関係の情報を提供してくださっています。