第 8 章 演進路線
本章交代 Fayger 第一階段的邊界,並按已知方向給出後續階段的演進規劃。每條演進項都註明它對當前架構的影響範圍,以便後續設計時定向收斂。
8.1 第一階段範圍
第一階段交付的 Fayger 至少滿足:
- 三層結構(Loader / Runtime / Adapter)的穩定契約。
- BuF 製品的五段式格式與 CBOR 確定性 Manifest / Section_Index。
- 載入鏈:Read(Header/Manifest/Index) → Parse → Verify(Structural) → Verify(Digest of Header/Manifest/Index) → Verify(Signature) → Negotiate Version → Select(Sections by LoadProfile) → Resolve → Read(Selected Section Bodies)? → HandOff。
- BuF_Source 抽象,支援任意儲存後端(本機、網路、物件儲存、使用者自訂)。
- 部分載入(profile 驅動 Section 選擇)與延遲載入(Eager / Lazy 兩種 LoadStrategy),涵蓋效能受限終端(無人機、攝影機)的體積與執行時取數需求。
- 直譯執行路徑,BuF_Instance 生命週期狀態機與故障隔離。
- Universal_Instruction 8 類指令集與四類內建 Platform_Adapter(桌面 / 伺服器 / 瀏覽器 / In-App)。
- 統一錯誤模型與可觀測性事件匯流排,載入層錯誤帶
phase標註。 - 簽章檢核、強制簽章模式、信任根更新可見性。
8.2 第一階段非目標
為控制第一階段複雜度,下列方向顯式不交付:
- 跨 BuF_Instance 的共享記憶體與 IPC 協定。
- JIT 編譯與機器碼產生。
- 分散式排程與多節點 Fayger 協同。
- BuF 的差量分發與跨製品分層快取(部分載入已涵蓋單製品內的按段取捨,但跨製品的差量複用與 Distribution 協定留待後續)。
- 內建遠端倉庫 / Distribution 協定。
非目標不代表「未來不需要」,而是當前不在契約面上。後續階段補齊時不應破壞已有契約。
8.3 後續階段一:執行效能
主線方向:在不破壞 Runtime_Interface 的前提下加入更高效的執行路徑。
8.3.1 ExecutionStrategy 抽象
把「如何執行 BuF 內的語意」抽出為策略:
interface ExecutionStrategy {
prepare(obj: BuFObject) -> PreparedExecutable
step(exec: PreparedExecutable, ctx: ExecutionContext) -> StepResult
}
第一階段提供的 Interpreter 是一個具體策略;後續可以並存:
JIT:把 BuF code section 中的中介表示編譯為機器碼。AOT:在載入階段就完成機器碼產生(適合發布場景)。HybridTier:直譯 → 探針 → 編譯。
策略切換由 Runtime_Implementation 內部決定,不影響 Runtime_Interface 的對外契約。
8.3.2 效能可觀測性
新增事件類別:
ExecutionMetric:直譯 / 編譯 / GC 等指標取樣。TierTransition:分層執行從一個層級切到另一層級。
對外不暴露具體策略實作,但允許呼叫方觀察其影響。
8.4 後續階段二:分發與快取
8.4.1 BuF 跨製品分層與分塊
第一階段已支援 BuF 內部的 Section 粒度按需讀取(Lazy)。後續在跨製品維度引入分層共享:
- 不同 BuF 之間共享的資源(如標準函式庫、模型權重)抽出為獨立分層。
- Manifest 增加可選的
layer_refs宣告,參照其他製品中的 Section。 - 分發協定負責把分層資源以共享方式取回,本地快取命中時跨 BuF 複用。
這要求 Manifest 增加一組可選欄位,schema_version 據此抬一格小版本。已有 BuF 不受影響(相容路徑見 8.7)。
8.4.2 Distribution 協定
引入輕量分發協定(參考 OCI Distribution Spec):
discover/pull/verify三段式。- 分發協定本身不在 Fayger 行程內,由獨立元件實作,Fayger 只消費它產出的 chunk。
8.4.3 本地快取
對已載入並簽章檢核通過的 BuF,快取 Manifest 與 Section 的解析結果,跨行程命中。命中時仍重新執行簽章檢核(避免快取毒化)。
8.5 後續階段三:跨實例協同
8.5.1 共享記憶體(受控)
允許同一 Fayger 內多個 BuF_Instance 共享記憶體區域:
- 在 Manifest 中顯式宣告
shared_memory能力。 - 由執行層統一配置區域,按能力授權暴露給請求方。
- 共享區域受配額監測,違規即觸發暫停。
8.5.2 IPC 協定
跨實例訊息傳遞(同行程或同 Fayger 內):
- 以 Universal_Instruction 的新類別
ipc表達。 - 預設拒絕;需在 Manifest 中宣告對端 ID 集合或主題。
8.5.3 單 Fayger 內的相依組裝
允許一個 BuF 參照其他 BuF 作為相依:
- 載入鏈的
Resolve階段支援遞迴解析。 - 相依圖由 Manifest 中
dependencies欄位表達。 - 循環相依在 Resolve 階段拒絕。
8.6 後續階段四:分散式
主線方向:多節點 Fayger 協同。第一階段不涉及,但需要在以下方向預留空間:
- BuF_Instance 的 ID 必須在跨節點視角下也唯一可定址。
- Lifecycle 事件的時間戳必須能與外部追蹤系統對齊。
- Universal_Instruction 的 TLV 編碼已經具備跨網路傳輸能力,未來「遠端指令派送」可作為單獨的 Adapter 實作。
8.7 相容性策略
每次演進必須遵循以下相容規則,否則視為破壞性變更:
- Runtime_Interface 版本號:在新增方法或修改語意時按 SemVer 遞增。BuF_Manifest 透過
runtime_interface_min表達自己相依的最低版本。 - BuF schema 版本:新增可選欄位時小版本遞增;新增必填欄位或修改既有欄位語意時主版本遞增。
- 錯誤碼穩定性:已發布的錯誤碼不得複用、不得變更語意;可新增。
- Universal_Instruction 類別:現有 8 類不複用編號;新增類別使用預留位。
- 棄用流程:先標記
deprecation_notice,載入時給出提示但仍允許;至少跨一個主版本後再移除。
8.8 工具鏈建議
為支撐長期演化,建議搭配以下工具:
- 相依方向靜態檢查:禁止執行層 import 任何 Platform_Adapter 型別,禁止執行層反向參照載入層內部型別。可用 ArchUnit / dep-cruiser / 自訂 lint 實作。
- 屬性測試基線套件:把藍圖中所有正確性性質(往返一致性、狀態機遷移、錯誤鏈、能力裁剪集合代數等)固化為跨語言 Conformance Suite,供任意 Runtime_Implementation 自我檢驗。
- Manifest CBOR 驗證器:檢查 Manifest 是否使用了確定性 CBOR;非確定性編碼視為不合規。
- Adapter 描述符體檢:在適配器註冊時立即對
supported_capabilities與supported_instructions進行一致性體檢(如能力位與指令所需能力的最小閉包)。
8.9 後續階段路線圖(彙總)
| 階段 | 關鍵方向 | 主要影響層 | 相容性影響 |
|---|---|---|---|
| 階段一(當前) | 三層契約、直譯執行、內建四適配器、簽章、Section 部分載入、Eager/Lazy、BuF_Source 抽象 | 三層 + 橫切 | — |
| 階段二 | ExecutionStrategy / JIT / AOT | Runtime | 相容(新增) |
| 階段三 | 跨製品分層 / Distribution / 本地快取 | Loader | 相容(小版本) |
| 階段四 | 共享記憶體 / IPC / 相依圖 | Runtime + Loader | 相容(新增) |
| 階段五 | 多節點協同 | Adapter(遠端指令派送) | 相容(新增) |
後續階段的設計文件將以獨立藍圖形式發布,與本藍圖共用同一套術語與契約。
