1.7.1 の変更内容
1.7.1 は 2026-10-28 のリリースである。 既存の公開 API と保存形式を維持し、機能追加、入力処理の修正と内部改善を行う。 1.7.0 からの更新に API の書き換えや定跡ファイルの再生成は必要ない。 1.6.x 以前から更新する場合は、1.7.0 への移行も確認する。
DB2016 と SBK の差分保存
Rust の book feature に BookDatabasePatch と、各 reader の差分マージ出力を追加する。
全件を BookDatabase に取り込まず、変更する局面の候補手とメタデータだけを保持できる。
差分のキーは手数を除いた正規化 SFEN で、同じ局面への最後の置換または削除が有効になる。
置換は局面全体を対象とするため、一部の値を編集する場合も残す候補手とメタデータを含めて登録する。
| 形式 | 保存 API | 保存の単位と主な制約 |
|---|---|---|
Native Book .book | NativeBookEditor::save() | 変更局面を transaction として追記する既存 API。通常保存と全体の compaction は別操作 |
DB2016 .db | YaneuraOuBook::write_yaneuraou_db2016_with_patch() | 元ファイル全体と差分を整列マージ。元局面は正規化 SFEN の厳密な昇順が必要 |
SBK .sbk | SbkBook::write_sbk_with_patch() | 全 state を検査して全体を出力。ID を連番化し、既存リンクと復元可能性を維持 |
DB2016 と SBK は、少数の変更でも元ファイル全体を読み書きする。 保存時間やメモリ量がファイルサイズに依存しなくなるわけではない。 DB2016 は差分と最大局面行、SBK はそれらに加えて局面数に比例する索引を必要とする。 SBK reader が参照用に受理する未解決 state や不整合グラフを、差分保存でも受理するとは限らない。 保存に必要な整合性を満たさない入力は拒否し、黙って局面を削除しない。
出力 API は Write を借用し、成功時に flush する。
元ファイルとは別の出力先を使い、永続化と置換は呼び出し側で行う。
エラーやキャンセルで部分出力が残り得るため、成功前の出力を公開しない。
保存後に元パスを置換した場合は reader を開き直し、保存済みの差分を空にして新しい編集を始める。
差分自体は保存の成功と失敗のどちらでも変更されない。
進捗通知付き API は BookControl による協調キャンセルに対応するが、処理件数を全体の完了率とは扱わない。
詳細は定跡アーキテクチャ、DB2016 の差分保存、SBK の差分保存を参照。
SBK open のメモリと速度
SbkBook::open() は全ファイルのバイト列を保持せず、state 単位で読み出して局面索引を構築する。
グラフ順の読み出しには本文上限 4 MiB のページキャッシュを使い、SFEN の借用デコードと候補手バッファの再利用で一時確保を減らす。
索引、キャッシュの管理情報、最大 state のバッファ、著者と説明の文字列は別途必要になる。
特に局面索引は局面数に比例し、プロセス全体のメモリ上限が 4 MiB になるわけではない。
全件を RAM に置いた従来方式と比べ、ファイルの読み直しにより open が遅くなる場合がある。 今回の最適化はその負担を減らすものであり、すべての入力や媒体で従来方式より速くなる保証はない。 公開 API、通常 lookup の経路、局面解決と診断の契約は維持する。
Native Book の検証と構築
Rust の NativeBook::validate_full_and_visit(visit, control) は完全検証中に、現在 snapshot の各 entry と検証に使った局面を一度ずつコールバックへ渡す。
検証後に同じ snapshot を再走査して局面を復元する処理を省ける。
呼出し順は保証せず、結果はメソッド全体の成功後に確定する。
後続の破損検出、キャンセル、コールバック失敗でも、既に生じた副作用は巻き戻さない。
詳細とコード例は完全検証を参照。
Native builder は、最終 run の復号で検証済みレコードを再利用し、重複する検証とコメントの再正規化を減らす。 入力検証、run 復号時の検証、公開前の完全検証と保存契約は維持する。
Python で利用できる範囲
今回の BookDatabasePatch と差分保存、および validate_full_and_visit() は Rust 向けである。
Python に新しい公開 API は追加しない。
既存の Python SbkBook.open() と Native builder には Rust core の内部改善が適用される。