年越し蕎麦とお節の差し入れが届いた

姉からの年越し蕎麦とお節の差し入れが届いた.清酒の小瓶も付いている.灯油のストックもあるし,2方面の窓を,①ぷちぷち,②二重カーテン,③毛布/寝袋の三重層で断熱した.入口のドアの上のガラスにもプチプチを貼っているので,今年初めてほぼ完全な防寒の備えができた.姉から年末恒例の余ったカレンダーの横流しもいつか来なくなり,ダイソーで書き込みのできるカレンダーを買っていたが,今年はAMS(American Mathematics Society)から「Your Daily Epsilon of Math 2023」というのを取り寄せた.日替わりの諺の代わりに,小さな数学の問題が毎日提出される.(答えはその「日付」ということになっているので,考える前に回答できてしまうから,心配はいらない)

なんとか,今のバグをクリアして新年を迎えたいものだが,その前にあっけなく年を越してしまいそうだ.UNDOのからんだかなり難しい障害だが,ある意味でいよいよ年来の懸案を片付けるときが来ているのではないか?という気もする.年来の懸案とは,「完全な参照管理を確立すること」,言い換えれば,「超クリーンなシステムを構築すること」である.「超クリーンなシステム」は完全にコントロールされ,いかなる不安定要因も含まないような決定姓が保証されなくてはならない.現行プログラムはかなりのレベルまでそれに近いものになっているが,まだ「カオス的」な部分を残している.

ユーザとのやり取りでグラフのトポロジーが変化するようなデータ操作が行われたときには,系統並び替えを実行しなくてはならないが,このようなときにはフェーズを一旦INITIALIZED(=CHAOTICSTATE)に落として,INITIALIZED→ TOPOLOGICALSORT→ CLEARTABLEのように遷移し,画面要素をClearTableで初期化したあと,本番の系統並び替え処理を実行する.INITIALIZEDではCOUPLING::TopologicalSortでTREEVIEW::InitTreeViewとEraseTreeViewで描画要素のクリーンアップが実行されているので,CLEARTABLEフェーズでは参照エラーは無視されることになっている.このようなアナーキーな状態を払拭し,すべてのフェーズがシームレスに接続することが我々のプログラミングの最終目標であると言える.特にUNDOはこのような操作に関し,完全に透明でなくてはならないと考えられる

CARDLINK::CheckCardDataLinkで「カード参照番号の重複」というのが起きている.CheckCardDataLinkは副作用のある検査ルーチンで,SaveFamilyBase→ InitLinkTableで使われている.⇒CheckCardDataLinkとCheckMargDataLinkに引数testを設けて切り分けるようにした.

▲再現手順5の2回目のUndoで,UndoProcess→ TopologicalSort→ ClearTableの入口に置いた検査ルーチンで大量のエラーが検出される.特に,CheckDataLink→ CheckMargLinkの中でgetoyanumを実行して,結婚リンク中の子どもの参照番号から逆引きしたカードリンク不在が発生している.⇒基準ソート時に実行しているRenumberを停止してみたが,状況は変わらない.⇒TOPOLOGY::topologicalSortの入口ですでに,この状態になっている.ということは,UNDOSYSTEM::UndoProcess自体に欠陥があるということになる.

#3196のCARDLINKをUndoするところだ.参照番号は@1565.このノードは削除されていない実ノードと思われるが,更新を受けているようで,UndoRestoreが実行されている.UndoProcessのループ内で実行しているのは,基本的にUndoRestoreだけなので,これを調べなくてはならない.⇒UNDONODE::UndoCopyの中で不良が発生している.⇒@1565というリンクがテーブルの中でダブってしまうという不良だ.なぜ,そんなことが起きているのか?


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA