毛玉

現実逃避的に毛玉の次のステップについて考えていることを書く。

今のバージョンはかっこ悪いやり方であるスクリプトを並列要素であるタートルにapplyしている。問題は、仮にワールドスクリプトであっても、その中にタートルのアクションが入っている場合はそのアクションは並列に実行され、そのアクションの処理が終わったところで"join"してワールドアクションを実行するようになっているべきである。

タートルのアクションと言っても、examplerとタートルという違うものが実行しなくてはならないので、まるまる単純にできるわけではなく、何らかの方法でひとつのタイルから作られた文を「2回」違うものに対して実行する必要がある。

もうひとつの場合としては、タートルスクリプトの中にワールドアクションが入っている場合がある。この場合にもそのようなアクションを1度だけ実行するようにすれば、実際にはタートルスクリプトとワールドスクリプトの区別などはなくなるわけであるが、一方、タートルの個数回だけ実行してもらいたい、という需要もあるような気はするので、ちょっと検討が必要かもしれない。

とにかく、実際にはひとつのスクリプトのひとつのメソッド軌道のように見えるけど、実際には複数の要素に対して並列に実行される、というモデルを実現する小さなトリックとして"selvs"というやつを考えている。

selvesというのはselfの複数形だが、CroquetでもあるCroquetオブジェクトにメッセージが送られたときに、それを複数のリモートホスト上にブロードキャストしたいときがあるので、送られたメッセージをインターセプトして、'selves'というインスタンス変数にバインドされているオブジェクトに送信しなおす。selvesがそこで適切にブロードキャストを行うので、コードの見た目はほとんど変更することなく、メッセージの実行形態を変えているわけである。

毛玉でも、そういう名前のインスタンス変数をexamplarに用意し、タイルからテキストコードを生成するときにselfの代わりにselvesという文字列を出力するようにする。selvesでは指定されたメッセージをexamplerとタートルたちに対して実行するわけである。

さらには今のオブジェクトのレイアウトの変わりに、インスタンス変数ごとに配列に入れた形にして、ベクトルプロセッシングのようにしたいと思っている。そのときにもこのトリックを維持したまま変更していけるだろうというところが強みだと思う。

問題は今のeToys scriptingがタイルからコードを作るところがぐちゃぐちゃとしていて、変更したときに「本当にこの変更は正しいのか」という理論的裏づけがないところなんだよなあ。まあ動けばよい、という立場はありだけどね。

多分これは他の人が読んでもかなり日本語的にも意味不明な項目だと思うけど、まあとりあえず。