読者です 読者をやめる 読者になる 読者になる

Io 1日目

7つの言語 7つの世界 Io編1日目。ちょっと2日目入ってる。

Ioは2002年にできた言語。プロトタイプベースなのでJavaScriptをやっている人には馴染みやすい。

プロトタイプベースは、既存のオブジェクトを複製することで新しいオブジェクトを生成していくタイプのオブジェクトモデル。オブジェクトはキーと値のペア(スロットと呼ばれる)を持ち、ハッシュのような構成をしている。

オブジェクトの複製

複製 = 生成には clone を使う。ルートオブジェクト(Object)の複製を作りたい時は

Kuma := Object clone

で Object のクローンとしての Kuma が生成される。

スロットへの代入は

Kuma name := "Tarou"

としてできる。キーに対する値の取得は Kuma name としてできる。

名前空間の最上位にいる Lobby (名前がカッコイイ)では、全ての名前付きオブジェクトを参照でき、 Kuma の例では、 Lobby の "Kuma" スロットに Object のクローンがセットされている。

また、全てのオブジェクトはプロトタイプを持っている。

メソッドオブジェクトの生成

メソッドオブジェクトは method() で生成できる。

Car drive := method("Vroom" println)
Car drive
==> "Vroom"

コレクション

リスト

jewel_pets := list("tinkle" "sunshine")
jewel_pets append("kiradeko")
jewel_pets at(2)
==> "sunshine"

Map

Ruby の Hash のように使う。

cure_happy := Map clone
cure_happy atPut("name", "Hoshizora Miyuki") // set
cure_happy at("name") // 参照

keys などのメソッドが用意されている。

シングルトンの生成

true, false ,nil は Ruby と同じくシングルトン。シングルトンは clone を再定義して、自分自身を返すようにするだけで作れる。すごくシンプル。

SingletonObject := Object clone
SingletonObject clone := SingletonObject

制御構文

while(i <= 11, i println; i = i + 1)

= は既に定義されている変数を更新するときに使う。未定義だと怒られる。

if( i >= 11, "bigger than 11" println, "not bigger than 11" println)

Lisp臭が漂ってくる。

SteveDekorte のインタビュー

  • 記憶力が悪いからシンタックス・セマンティクスを簡潔にした。
  • セマンティクスが簡潔になると柔軟性が増し、言語実装者も予想してないことが自由にできる。

ビデオゲームに似ている。だから柔軟性の高い言語は面白いのかもしれない。

  • 言語が複雑であるほど頭の中で構文解析を行わないといけない。
    • パーサーの作業量が増えるほどプログラマの負担が増える。

単純にそうとはいえない気がするけど、考え方が面白い。

  • Io は Pixar で使われている


Io は「シンタックスを最小限に抑えることで、ボキャブラリの習得に時間を割くことができる」言語で、手触りは好印象。インストールはソースからコンパイルしてやったので少しだるかったけど、Macな人はbrewでパッケージインストールできるみたい。

日本語のプログラミングガイドは(http://xole.net/docs/IoGuide_ja.html)で読める。資料が少ないとか以前にググラビリティが悪すぎる。