類比が切れるのはターゲットが生きている場所である
「planはコンパイルである」という類比が切れる場所は散らばっていない。すべて一つの原因に帰着する — ターゲットが受動的なメモリではなく、生きた外部世界であること。切れ目は三つある。
第一に、書き込みが失敗する。 通常のローダでstore命令は失敗しないが、applyの1命令はAPIエラーで失敗しうる。途中失敗は「半分だけ書かれたバイナリ」を残す — トランザクションも自動ロールバックもなく、回復は次回の差分コンパイル(再plan)に委ねられる。コンパイラ・リンカの世界には対応物がない状況である。
第二に、ターゲットは共有可変である。 コンパイル(plan)と実行(apply)の間に他の書き手が世界を変えうる。planがロックを取らない設計(TOCTOU窓 + ドリフト警告 + apply側での再計算)は、「IRは予測にすぎず、真の整合性は実行直前に再確立する」という、共有可変ターゲットに対する妥当な妥協である。
第三に、コンパイラ自身がターゲットを読む。 refreshは世界の現状を観測してから差分を取る。ソースしか読まない通常のコンパイルと違い、コンパイルの入力に世界が含まれる。これは二引数性の言い換えであり、限界というより、IaCのコンパイルを定義づける本質的な差である。
この三点が、IaCをコンパイラ工学の単純な転写から分かつ固有の領域である。逆に言えば、この三点の外側ではコンパイラの蓄積がほぼそのまま使える。切れ目を先に押さえておくことが、類比を道具として安全に使う条件になる。