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