ITSUKI.
技術738 文字2 分

Day 26|State Reachability — その状態は、本当に起きる?

#Codex#ソースコードリーディング#図解

この章しょうの答こたえ

テストで作つくれる状態じょうたいと、実際じっさいのイベントから到達とうたつできる状態じょうたいを区別くべつする。

内部ないぶのフラグを直接ちょくせつ書き換かきかえれば、さまざまな状態じょうたいを作つくれます。でも実際じっさいの利用りようでは、イベントの順序じゅんじょやガード条件じょうけんによって到達とうたつできない組み合くみあわせもあります。状態じょうたいの値あたいだけでなく、その来歴らいれきを調しらべます。

01|図でつかむ

図26|State Reachability

止とめる人ひと、解除かいじょする人ひと、再開さいかいさせるきっかけ。この三みっつを対応付たいおうづける。

02|3つのポイントで理解する

1. フラグを立てる側から追う

suppress_queue_autosend のような gate を見みつけたら、参照さんしょうする場所ばしょだけでなく、値あたいを書き込かきこむ場所ばしょを探さがします。その直前ちょくぜんのイベントが状態じょうたいの入口いりぐちです。

2. 解除と再送信は別の操作

フラグを解除かいじょしても、それだけで待機たいき入力にゅうりょくを送り出おくりだすとは限かぎりません。解除かいじょ後のちにスケジューラやイベント処理しょりを動うごかす箇所かしょまで追おいます。

3. イベント列として再現する

本番ほんばんに近ちかいテストでは、可能かのうな限かぎり実際じっさいの操作そうさ経路けいろで状態じょうたいを作つくります。直接ちょくせつフィールドを設定せっていする場合ばあいも、同おなじ状態じょうたいに到達とうたつするイベント列れつを説明せつめいできるようにします。

03|ソースで確かめる

以下いかの検索けんさくは Codex リポジトリのルートで実行じっこうします。最初さいしょに対象たいしょう commit を記録きろくし、検索結果けんさくけっかから定義ていぎと呼び出よびだし元もとを一ひとつずつ開ひらいてください。

git rev-parse --short HEAD
rg -n "suppress_queue_autosend|maybe_send_next_queued_input" codex-rs

読よむ入口いりぐち: codex-rs/tui/src/chatwidget/input_queue.rs 。リンク先さきは照合しょうごうに使つかった固定こてい commit のファイルです。手元てもとの版はんと異ことなる場合ばあいは、上うえの検索語けんさくごから探さがし直なおします。

小さく試す

一ひとつの gate を選えらび、立たてる場所ばしょ、解除かいじょする場所ばしょ、再送信さいそうしんを試ためす場所ばしょを三点さんてんで結むすびます。

04|30秒で復習

  • 状態じょうたいには到達とうたつ経路けいろが必要ひつよう。
  • 解除かいじょと再開さいかいのきっかけを区別くべつする。
  • テストの準備じゅんびを実際じっさいのイベント列れつに対応付たいおうづける。

全ぜん30章しょうの目次もくじへ