開発

決定論的核と非決定論的殻 新設計指針浮上

純粋関数に限定せず決定論性を核に据える設計指針が提案された。状態機械による検証容易性の確保が焦点だ。

9分で読める SINGULISM 編集チームが確認・編集

決定論的核と非決定論的殻 新設計指針浮上
Photo by Chris Ried on Unsplash

決定論を核に据える設計指針が示された。 Lobstersで紹介されたoutdata.netの記事では、関数型の核と命令型の殻を組み替える提案が論じられた。 公開は2026年8月3日付けの考察で、2026年9月20日に共有された。 表題はDeterministic Core, Non-Deterministic Shellである。 原著者はoutdata.net via teymourとして記録されている。 狙いは試験容易性の確保と適用範囲の拡大にある。

業務論理を核に隔離する設計思想

14年前にGary Bernhardtが提唱した考え方が起点にある。 名称はFunctional Core, Imperative Shellである。 計算機科学では完全に新規ではなかったが、表現の明確さが高く評価された。 試験と決定論を語る土台として広く使われてきた。 Lobstersのoutdata.net via teymourの報道では、符号を二分する姿勢が改めて整理されている。

Functional Core, Imperative Shell architecture divides the code into two parts.

核は純粋な関数群で構成される。 入出力を持たず、破壊的な状態更新も行わない。 業務上の判断 logic のみを担う位置付けだ。 殻は状態を保持し、外部依存を調整する。 経路分岐は比較的少なく、直線的な実行が多い。 核から受け取った値を基に外部へ働きかける。 記録装置への書き込みや要求送信、画面更新が該当する。

核は判断を行い、殻は依存を調整する。 核は分岐が多く、殻は統合を担う。 核は外界から隔離され、殻は外界と結合する。 この対比が設計の核心にある。 核は同じ入力に同じ結果を返す。 模擬や差し替えが不要で、複雑な業務判断を直接検証できる。 試験が体制の振る舞いを多く物語る構造だ。

決定論性が試験容易性を生む理由

純粋関数が試験に適する理由は決定論性にある。 入力の流れが同じなら出力の流れも同じになる。 振る舞いの再現性が保証される点が重要だ。 隔離性と組み合わさることで検証費用が下がる。 複雑な分岐を抱える業務判断ほど効果が大きい。 決定論は関数型に固有の性質ではないと記事は述べる。 視点を変えれば別の到達経路があるという立場だ。 値の流れと代入の連続は同じ事柄の別表現と解釈できる。 状態機械が同等の利益をもたらす根拠がここにある。

殻が外部との接点を担う構造は、操作委任の分離とも重なる。 Desktop Commander MCP、AIにターミナル操作を委任で扱われた権限分離は、殻の責務設計への示唆になる。 決定と実行を分ける姿勢は基盤設計にも通じる。 4社が選んだAgentic Infra、Infinigenceの戦略が示す推論と実行の分離も参照になる。 低層での不確定性の扱いは駆動層でも課題だ。 Mesa Rusticl、Mali Panfrostを標準で有効化が示す有効化の判断も、境界設定の難しさを物語る。

純粋関数と状態機械の等価性の検証

具体例として加算の実装が対比された。 一方は純粋関数による縮約である。 他方は内部状態を持つ機械による遷移である。 記事は両者が決定論を共有すると述べる。 命令型であることは決定論を損なわないという主張だ。

関数例は以下の形である。 入力列を受け取り、初期値0から合計を返す。 副作用がなく、推論が容易だ。 機械例は私的な状態に数値を加える。 遷移呼び出しの連続が状態を定める。 取得子で現在の合計を返す仕組みだ。 同じ順序で同じ遷移を与えれば同じ状態になる。 1、2、3の順で与えれば結果は6になる。 関数版と機械版で結果は一致する。

この等価性は設計の自由度を広げる。 純粋さを緩めて決定論を求めれば十分だという見方だ。 試験容易性は維持しつつ、実装手段が増える。 言語や性能の制約が強い現場で意味を持つ。 C言語での純粋関数型の徹底は現実的でない場合がある。 記事はその困難に明示的に触れている。 決定論への弱化は実務的な妥協ではなく拡張と見る。 検証可能な核を残すための積極策と言えそうだ。

命令型言語でも適用可能な拡張性

純粋関数型は優れた規範である。 しかし言語や性能の事情で採用が難しい場合がある。 組込みや低層、既存資産の改修が典型だ。 すべてを不変値と純粋関数で書く負担は大きい。 そこで要件を決定論に置き換える提案が出た。 Functional Coreの代わりにDeterministic Coreを置く。 Imperative Shellの代わりにNon-Deterministic Shellを置く。 表題の由来はこの置換にある。

決定論的核は再現性を中核に据える。 入力列と遷移順序が定まれば結果が定まる。 副作用の有無ではなく再現の可否で区切る。 非決定論的殻は不確定性を引き受ける。 時刻や乱数、通信遅延、利用者操作が該当する。 外界との相互作用を一箇所に集約する。 核の純度を守るより核の再現を守る姿勢だ。 既存体制への適用が容易になる利点がある。 全面書換えなしに境界の引き直しから始められる。

外部依存集約と実務応用の方向性

殻の責務は依存の調整と状態の維持にある。 核への問い合わせと結果の配送が基本動作だ。 核は黒箱の判断として値を返す。 殻はその値を外界への作用に変換する。 記録、送信、描画が代表例だ。 殻の経路は直線的で見通しが良い。 複雑な分岐を殻に持ち込まない規律が求められる。 分岐は核へ寄せ、殻は手順に徹する。 この分担が試験範囲を明確にする。

実務では境界の設計が成否を分ける。 時刻取得や乱数生成は殻に置くのが自然だ。 通信や永続化も殻の側に集約する。 核は値と遷移だけを受け取る形にする。 状態機械の遷移関数は核に残せる。 遷移の順序記録が再現試験の材料になる。 記録された順序を再生すれば不具合を再現できる。 模擬機構に頼らず履歴再生で検証できる利点がある。 並行処理では順序の確定が追加課題になる。 殻で順序付けを行い核で判断する分離が有効と見る。

記事の主張は既存資産の救済にもつながる。 純粋化が困難な符号でも決定論化は狙える。 状態更新を遷移として明示し、履歴を残す。 外部作用を殻へ移動し、核を値に閉じる。 段階的な再構成が可能な点が実践的だ。 試験は核に集中し、殻は結合確認に絞る。 費用対効果の高い検証体制を築けると評価する。

編集部の見解

今後3〜6か月では、試験設計の見直しが進むと見る。核を決定論として切り出す手法は、既存符号の再構成指針として採用しやすい。特に状態機械の導入は、関数型化が難しい資産への適用を促すと言えそうだ。

1〜3年では、言語非依存の試験規範として定着する可能性がある。決定論の保証を設計書に明記する動きが広がると見る。実行環境の不確定性と業務判断の確定性を分ける文化が根付くと評価する。

残る論点は、決定論の境界をどこに置くかだ。状態の範囲や時刻と乱数の扱いは自明ではない。殻に漏れた不確定性をどう記録し再生するかも問われている。境界の妥当性を誰が検証するのだろうか。

参考

  • 「Deterministic Core, Non-Deterministic Shell」, by outdata.net via teymour — Lobsters, 2026-09-20T21:13:51.000Z (ARR)
  • 元記事URL: https://outdata.net/blog/260803

よくある質問

Functional Core, Imperative Shellとは何だ
業務判断を担う純粋な核と、外界と作用する命令型の殻に符号を分ける設計だ。核は入出力を持たず再現性が高い。殻は状態保持と外部依存の調整に徹する。試験範囲の明確化が狙いだ。
Deterministic Core, Non-Deterministic Shellは何が違うのか
純粋さの要求を決定論の要求に緩めた点が違う。状態機械も核に含められる。再現性があれば命令型の実装を許容する。言語や性能の制約が強い現場でも適用しやすい。
状態機械が決定論的と言える理由は何だ
同じ遷移順序を与えれば同じ状態になるからだ。加算の例では1、2、3の順で遷移すれば結果は6になる。純粋関数の縮約と結果が一致する。再現試験に履歴再生を使える。
出典: Lobsters

コメント

← トップへ戻る