監督

四つのパネルがそれぞれ別のタイマーでカウントアップする画面です。入力欄が一つあり、パネルごとに crash ボタンがあります。

動作

四つの数はそれぞれ別のタイマーで更新されます。変わった数だけが光ります。光っているのは、描き直しで書き換えられた要素です。あるパネルの数が変わっても、隣のパネルや外枠は描き直されません。

crash を押すと、そのパネルのアクタがエラーで止まります。監督役がそれを検知し、初期状態から作り直して、再起動回数を一つ増やします。入力欄の文字、他の三つのパネルの数とタイマーは影響を受けません。

監督役

パネルのアクタが止まると、監督役に down: が届きます。監督役はそのパネルを作り直します。

Wall >> start   = ( me monitor: panel. self ).
Wall >> down: d = self with: {
  panels: panels copyWith: (me spawn: (Panel label: d actor name)).
  restarts: restarts + 1 }.

止まったことはメッセージで届き、復旧は通常のハンドラで書きます。

隣のパネルが描き直されない理由

親のアクタが持っているのは子アクタへの参照です。参照は変わらないので、親を描き直しても子は描き直されません。これはプログラマが指定する最適化ではなく、参照の同一性から決まります。

パネルは、デザイナが HTML に置いた見本を複製しています。