監督
四つのパネルがそれぞれ別のタイマーでカウントアップする画面です。入力欄が一つあり、パネルごとに 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 に置いた見本を複製しています。