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

Io 3日目

Io

7つの言語 7つの世界 Io編3日目。メタプログラミング的要素と並列処理について。

forward

メッセージを送った時、オブジェクトにスロットが存在しない場合、プロトタイプを探しに行くという処理を担っている。ここでforwardをオーバーライドすると、method_missing的な処理を実現できる。

コルーチン

メッセージの前に @ または @@ をつけると非同期で実行できる。@ のみだと Future を返し、@@ だと nil が返ってくる。返ってきた Future にメッセージを送ると、その Future を生成した処理が終了するまで待つ。

obj := Object clone
obj test := method(for(n,1,3, n print))
obj test; "finish" print //==> 123finish
obj @@test; "finish" print; wait(1) //==> finish123

非同期処理としてメッセージを送信した時、送信先のオブジェクトはアクターになってキューに入る。キューに入っているアクター同士で協調処理ができる。用語がめっちゃくちゃになってきてるので、ちゃんと調べたい。

http://brace.client.jp/DOC/iotuto.html がとても詳しい。

Io まとめ

所要メモリ

Ioはコンパクトで柔軟性が高い言語で、Luaのように組込みシステムでの利用が多い。

並列性

Ioでは並列処理についてScalaErlangでも取り入られている最新の概念(アクター)を取り入れている。この概念はマルチスレッドプログラミングを容易にするだけでなく、パフォーマンスも高い(しかし、シングルスレッドでは速いとは言えない)。

コルーチンだけでいうと、RubyではFiberで実現できる。

シンタックスがシンプル
シンタックスシュガーがほとんど無い

構文がシンプルすぎると、難しい概念を伝えるのに苦労する。そのためのシンタックスシュガーが無い。