Zylix は集中型のバージョン追跡付き状態管理を採用しています。すべてのアプリケーション状態は Zig で管理され、プラットフォームシェルには読み取り専用で公開されます。
用語 # State: Zig が保持するアプリ全体の状態。 Version: 変更ごとに増える単調増加カウンタ。 Diff: 変更点を示す差分マスク。 Store: 現在/過去の状態を保持するジェネリックコンテナ。 概念 # 設計原則 # 単一の信頼源: グローバルストアがすべてのアプリケーションデータを所有 不変更新: 状態遷移は新しいバージョンを作成 バージョン追跡: すべての変更にバージョン番号を割り当て 差分検出: 変更を追跡して効率的なレンダリングを実現 実装 # アプリケーション状態 # pub const AppState = struct { /// カウンター値 counter: i64 = 0, /// フォーム入力 input_text: [256]u8 = [_]u8{0} ** 256, input_len: usize = 0, /// Todo アイテム todos: [MAX_TODOS]Todo = undefined, todo_count: usize = 0, /// 現在のフィルター filter: Filter = .all, /// ビューデータポインタを取得(ABI 用) pub fn getViewData(self: *const AppState) ?*const anyopaque { return @ptrCast(self); } /// ビューデータサイズを取得(ABI 用) pub fn getViewDataSize(_: *const AppState) usize { return @sizeOf(AppState); } }; pub const Todo = struct { id: u32, text: [128]u8, text_len: usize, completed: bool, }; pub const Filter = enum(u8) { all = 0, active = 1, completed = 2, }; UI 状態 # pub const UIState = struct { /// 現在の画面 screen: Screen = .home, /// ローディング状態 loading: bool = false, pub const Screen = enum(u32) { home = 0, detail = 1, settings = 2, }; }; 統合状態 # pub const State = struct { /// 状態バージョン(単調増加) version: u64 = 0, /// アプリケーション固有の状態 app: AppState = .{}, /// UI 状態ヒント ui: UIState = .{}, /// 最後のエラーメッセージ last_error: ?[]const u8 = null, /// 状態変更後にバージョンを増加 pub fn bumpVersion(self: *State) void { self.version +%= 1; } }; ジェネリックストア # Store は型安全な状態管理を提供します。