構想
識別子・実装先の抽出を、登録時 (生ソースの tree-sitter 解析 → tags.json) からバンドル時 (プリプロセス出力の解析 + 内容ハッシュキャッシュ) へ移す。
プリプロセス出力を linemarker で出所ごとに束ね直し、非維持ライブラリのファイル片を再構成する (追跡機構は linemarker::Tracker として既存)。
各ファイル片の sha256 をキーに解析キャッシュを引く。ヒットすれば定義識別子・実装先をそのまま使い、ミスした片だけ tree-sitter で解析してキャッシュに書く。
以降の逆引き・-M・削除は現行と同じ。
得られるもの
解決しないもの
自己完結性の限界はそのまま 。namespace ラッパーのファイル片は namespace mylib {\n} に再構成されて名前ゼロのまま消えるし、関数分割も壊れたまま。compatibility.md の大半は有効で、書き換わるのは X-macro の節だけ。
自由関数の演算子だけのファイルも従来どおり救えない (特殊コメントで定義識別子・実装先を明示できるようにする #95 の特殊コメント案の意義は残る)。
実測 (WSL2, Intel Core 7 240H, release ビルド, Nyaan's Library 405 ヘッダー)
項目
時間
現行のバンドル 1 回 (8 include の解答)
~0.09–0.10 s
ファイル片の tree-sitter 解析: 現実的な解答 (展開後 35 KB・12 片)
+0.02 s
同: 全部 include テンプレの上限 (911 ファイル・1.8 MB)
+1.1–1.6 s
linemarker の束ね直し (上限ケース)
~10 ms
ファイル片の sha256 (上限ケース、キャッシュキー計算)
~2 ms
参考: 現行の登録 1 回 (405 ヘッダー)
1.68 s
キャッシュ無しの素朴なバンドル時解析は、看板ユースケース (全部 include テンプレ) で毎回 +1 秒超となり不成立。
キャッシュ有りなら、温かいバンドルの追加コストは上限ケースでも ~12 ms (束ね直し + ハッシュ)。ライブラリを触った直後の 1 回だけ解析を払う — 現行の「登録時に償却」と同じ償却構造を、明示的な update なしで実現できる。
論点
キャッシュの置き場所と世代管理 ($LOCAL 配下。内容ハッシュキーは伸び続けるので、ファイルパスをキーにハッシュを添える形にすれば自然に上書きされて有界になる)。
展開はフラグに依存するため、同じヘッダーでもバンドルごとに別フラグメントになり得る (それで正しい。キャッシュはフラグ違いを別エントリとして持つだけ)。
include ガードの無いファイルが同一バンドル内で複数回展開された場合、出所ごとの連結で名前は和集合になる (過剰検出側なので安全)。
spec・architecture・compatibility の大幅改訂を伴う。tags.json スキーマ v3。実装規模的にメジャーバージョン (v3.0.0) 級。
現行設計の正当化 (「列挙を登録時に行うのはホットパスへの償却のため」) は、この issue の帰結が出るまでの間も architecture.md に明文化しておく価値がある。
🤖 Generated with Claude Code
構想
識別子・実装先の抽出を、登録時 (生ソースの tree-sitter 解析 → tags.json) からバンドル時 (プリプロセス出力の解析 + 内容ハッシュキャッシュ) へ移す。
linemarker::Trackerとして既存)。-M・削除は現行と同じ。得られるもの
#ifdefの正確化: 実際のフラグで採用された分岐の名前だけを見る (現行は両分岐を安全側に登録)。library updateと変更検知の概念的消滅: 解析キャッシュは内容ハッシュキーなので陳腐化せず、「ライブラリが変更された」エラーもupdateの打ち忘れも存在しなくなる。library update(全件) が最初の失敗で中断し、後続ライブラリが更新されない #81 (update の中断)・verify のハッシュ検証範囲が広すぎ、無関係なライブラリの破損で全バンドルが止まる #79 (検証範囲) も無意味化する。library add) は消えず、-Iパスとダミー生成だけの軽い操作に痩せる。tags.json のfiles/implements/hashが不要になる (スキーマ v3)。解決しないもの
namespace mylib {\n}に再構成されて名前ゼロのまま消えるし、関数分割も壊れたまま。compatibility.md の大半は有効で、書き換わるのは X-macro の節だけ。実測 (WSL2, Intel Core 7 240H, release ビルド, Nyaan's Library 405 ヘッダー)
updateなしで実現できる。論点
🤖 Generated with Claude Code