言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

双方向制約

まず最大の成果が、曲がりなりにも双方向制約のやり方が分かった事。一応以下の要領で動きます。他のプレイヤにはインスタンス変数経由でアクセスする事と、自分自身を update: しない事がミソです(モルフ -> プレイヤ間は changed: が呼ばれます)。これにより、ループが起こった場合でも必ず間に step 動作が入るのでハングしないという仕組みです。- モルフが changed: された時、プレイヤにも changed: を送る。いっそ playerChanged を作ってしまっても良い。

  • もしもそのプレイヤに依存しているプレイヤがあれば update: される。
  • プレイやはインスタンス変数で他のプレイヤを参照するとき、必ず依存を作成する。
  • update: されたプレイヤが #changed のスクリプトを持っていれば、それを #changing に変える。
  • #changing になったスクリプトは stepping 動作により実行され、再び #changed の状態になる。

これ以上の制約の面白そうなトピックとしては、制約解消結果の検出(成功/失敗/不明)をどう取得するかや、TCP/IP をモデルにした非同期制約、逆に Prolog と表モデルによる厳密な制約がありますがこれ以上は深入りしないことにしました。