Phase 89-B 完了: Ring0 候補の棚卸し調査 **調査結果**: - fs 系: 243箇所 (read_to_string: 80+, write: 40+, File::open: 30+) - io 系: 87箇所 (Write: 30+, Read: 20+, stdin: 10+) - time 系: 143箇所 (Instant::now: 40+, Duration: 30+, elapsed: 25+) - thread 系: 37箇所 (thread::sleep: 20+, thread::spawn: 10+) - println! 残存: 1,948箇所 (Phase 89-A で 56箇所移行済み) **成果物**: - /tmp/ring0_*_inventory.txt 詳細リスト (計 510行) - ring0-inventory.md 更新 (Section 3-7 追加) - Phase 90 実装計画案 (A-E: 5段階、8-13時間予定) **次のステップ**: Phase 90-A (fs 系移行) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
12 KiB
12 KiB
Ring0 Inventory(初回棚卸しメモ)
このドキュメントは、Phase 85-ring0-runtime のための「Ring0 候補呼び出し」の棚卸しメモだよ。
ここでは Task 調査で分かった概況だけをまとめておき、詳細な一覧化や移行は後続フェーズで扱う。
1. println!/eprintln! 呼び出し
println!/eprintln!の合計呼び出し回数: 3,955 回- デバッグログ/一時ログ/ユーザ向けメッセージが混在している。
- Ring0 の
LogApi/Console相当として、最優先で整理したい対象。
- 方針メモ:
- 将来的には
Ring0Context.log/Ring0Context.io経由に寄せる。 - 代表パス(selfhost/hack_check/VM/LLVM)の
println!/eprintln!から段階的に移行する。
- 将来的には
Phase 88 移行状況(2025-12-02)
移行済みパス(2箇所):
| ファイル | 行 | Before | After |
|---|---|---|---|
src/runner/selfhost.rs |
27 | eprintln!("[selfhost][oob-strict] ...") |
ring0.log.error("[selfhost][oob-strict] ...") |
src/runner/selfhost.rs |
177 | eprintln!("❌ PyVM error ...") |
ring0.log.error("❌ PyVM error ...") |
残存パス(3,953箇所):
| カテゴリ | 出現回数 | 移行予定 |
|---|---|---|
| println! | 2,200 | Phase 89-A |
| eprintln! | 1,753 | Phase 89-B |
Phase 89 以降で段階的に移行予定。
Phase 89-A 移行状況(2025-12-02)
移行済み(56箇所):
- src/runner/selfhost.rs: 11箇所を ring0.log.* に移行
- src/runner/modes/vm.rs: 22箇所を ring0.log.* に移行
- src/runner/modes/vm_fallback.rs: 4箇所を ring0.log.* に移行
- src/runner/modes/common_util/hack_check.rs: 19箇所を ring0.log.* に移行
残存(2,093箇所、main codebase のみ):
- 総数: 2,149箇所(全体)
- main codebase (src/ + crates/nyash_kernel/): 1,948箇所
- plugins: 201箇所(別途対応)
2. Box / プラグイン / カーネル実装の数
src/boxes: 34 Boxplugins/: 22 プラグインcrates/nyash_kernel: 12 カーネル実装
ざっくり分類案(Phase 85 時点の暫定):
- core_required:
- StringBox, IntegerBox, BoolBox, ArrayBox, MapBox, ConsoleBox など、言語の基本型+コンソール。
- core_optional:
- FileBox, PathBox, RegexBox, MathBox, TimeBox, JsonBox, TomlBox など、標準ユーティリティ系。
- selfhost_required:
- Stage1CliBox, AotCompilerBox, MirJsonBuilderBox など、selfhost/Stage1 ライン専用。
- user_plugin:
- P2P, HTTP, GUI, Python 連携 等の外部拡張。
※ 正確な一覧とファイルパスは、後続フェーズで Box 定義ファイルを機械的に列挙して作る。
3. Factory Priority 問題(Phase 15.5 の再確認)
- 現状の Factory Priority が
BuiltinFirst(ビルトイン優先)となっている箇所があり、- プラグインで上書きしたいケースでも、ビルトイン版が優先されてしまう。
- これは:
- 「core_required な Box」と「user_plugin を使って差し替えたい Box」の境界が曖昧なことの副作用でもある。
- 方針メモ:
- Ring1-core の整理と合わせて、Factory Priority を
- core_required は常にビルトイン
- core_optional / user_plugin は設定やプロファイルで切り替え可能 に整理していく。
- Ring1-core の整理と合わせて、Factory Priority を
4. 今後の棚卸しタスク(TODO メモ)
std::fs/File::open/std::io::stdinなどの呼び出し地点を一覧化。SystemTime::now/Instant::now/thread::sleepなど時間・スレッド系 API の呼び出し地点を一覧化。- hakmem / nyrt 経由の低レベル API 呼び出し(alloc/free など)を一覧化。
- 代表パス(selfhost/hack_check/VM/LLVM)のみを対象にした「最小 Ring0 呼び出しセット」を定義する。
3. IO/time 系 Ring0 候補(Phase 89-B 調査結果)
3.1 std::fs 系呼び出し
調査日: 2025-12-02
- 総出現回数: 243 箇所(全体)
- main codebase (src/ + crates/nyash_kernel/): 171 箇所
- plugins: 72 箇所
代表的な呼び出し
| 関数 | 用途 | 推定回数 |
|---|---|---|
std::fs::read_to_string() |
ファイル読み込み | 80+ |
std::fs::write() |
ファイル書き込み | 40+ |
std::fs::File::open() |
ファイルオープン | 30+ |
std::fs::File::create() |
ファイル作成 | 20+ |
std::fs::canonicalize() |
パス正規化 | 15+ |
std::fs::create_dir_all() |
ディレクトリ作成 | 15+ |
std::fs::metadata() |
ファイル情報取得 | 10+ |
主要ファイル(Top 20)
| ファイル | 出現回数 | 移行優先度 |
|---|---|---|
src/runner/modes/common_util/resolve/strip.rs |
13 | 高 |
src/runner/modes/common_util/exec.rs |
5 | 高 |
src/runner/mod.rs |
5 | 高 |
src/runner/stage1_bridge/mod.rs |
4 | 中 |
src/runner/selfhost.rs |
4 | 高 |
src/runner/modes/llvm.rs |
4 | 中 |
src/runner/dispatch.rs |
4 | 中 |
src/runner/pipe_io.rs |
3 | 中 |
src/runner/modes/vm.rs |
3 | 高 |
src/runner/modes/common_util/resolve/using_resolution.rs |
3 | 中 |
移行方針(Phase 90-A 案)
優先経路:
- src/runner/selfhost.rs (4箇所) - セルフホスト実行経路
- src/runner/modes/vm.rs (3箇所) - VM実行経路
- src/runner/modes/common_util/resolve/strip.rs (13箇所) - 名前解決経路
実装方針:
ring0.io.file_read(path) -> Result<String, IoError>ring0.io.file_write(path, content) -> Result<(), IoError>ring0.io.file_open(path, mode) -> Result<FileHandle, IoError>ring0.io.dir_create(path) -> Result<(), IoError>
推定工数: 10-20箇所の移行(Phase 90-A)
3.2 std::io 系呼び出し
調査日: 2025-12-02
- 総出現回数: 87 箇所(全体)
- main codebase (src/ + crates/nyash_kernel/): 74 箇所
- plugins: 13 箇所
代表的な呼び出し
| 関数 | 用途 | 推定回数 |
|---|---|---|
std::io::Write |
書き込みトレイト | 30+ |
std::io::Read |
読み込みトレイト | 20+ |
std::io::stdin() |
標準入力 | 10+ |
std::io::stdout() |
標準出力 | 8+ |
std::io::stderr() |
標準エラー | 5+ |
BufReader |
バッファ付き読み込み | 5+ |
BufWriter |
バッファ付き書き込み | 3+ |
主要ファイル(Top 10)
| ファイル | 出現回数 | カテゴリ |
|---|---|---|
crates/nyash_kernel/src/plugin/console.rs |
10+ | Ring1 candidate |
src/runner/core_executor.rs |
3 | selfhost |
src/runner/stage1_bridge/mod.rs |
5 | Stage1 |
src/runner/pipe_io.rs |
3 | pipe I/O |
src/runtime/ring0/std_impls.rs |
6 | Ring0 impl |
移行方針(Phase 90-B 案)
優先経路:
- src/runtime/ring0/std_impls.rs (6箇所) - 既存Ring0実装の統合
- src/runner/pipe_io.rs (3箇所) - パイプ入出力経路
- crates/nyash_kernel/src/plugin/console.rs (10箇所) - Ring1候補として保持
実装方針:
ring0.io.stdin_read() -> Result<String, IoError>ring0.io.stdout_write(s: &str) -> Result<(), IoError>ring0.io.stderr_write(s: &str) -> Result<(), IoError>
推定工数: 5-10箇所の移行(Phase 90-B)
3.3 std::time 系呼び出し
調査日: 2025-12-02
- 総出現回数: 143 箇所(全体)
- main codebase (src/ + crates/nyash_kernel/): 110 箇所
- plugins: 33 箇所
代表的な呼び出し
| 関数 | 用途 | 推定回数 |
|---|---|---|
std::time::Instant::now() |
高精度タイマー | 40+ |
std::time::Duration |
時間間隔 | 30+ |
elapsed() |
経過時間計測 | 25+ |
std::time::SystemTime::now() |
システム時刻 | 10+ |
主要ファイル(Top 15)
| ファイル | 出現回数 | カテゴリ |
|---|---|---|
src/runner/modes/bench.rs |
18 | ベンチマーク |
src/boxes/sound_box.rs |
11 | Box実装 |
src/mir/join_ir/lowering/if_dry_runner.rs |
8 | JoinIR |
src/boxes/time_box.rs |
8 | Box実装 |
src/boxes/socket_box.rs |
7 | Box実装 |
src/runtime/global_hooks.rs |
6 | ランタイム |
src/macro/macro_box_ny.rs |
5 | マクロ |
src/runner/modes/common_util/selfhost_exe.rs |
4 | selfhost |
src/runner/modes/common_util/io.rs |
4 | I/O |
src/backend/aot/compiler.rs |
4 | AOT |
移行方針(Phase 90-C 案)
優先経路:
- src/runner/modes/common_util/io.rs (4箇所) - タイムアウト制御
- src/runner/modes/common_util/selfhost_exe.rs (4箇所) - セルフホスト実行
- src/runtime/global_hooks.rs (6箇所) - ランタイムフック
実装方針:
ring0.time.now() -> Result<SystemTime, TimeError>ring0.time.monotonic_now() -> Result<Instant, TimeError>ring0.time.elapsed(start: Instant) -> Durationring0.time.sleep(ms: u64) -> Result<(), TimeError>
推定工数: 10-15箇所の移行(Phase 90-C)
3.4 thread 系呼び出し
調査日: 2025-12-02
- 総出現回数: 37 箇所(全体)
- main codebase (src/ + crates/nyash_kernel/): 26 箇所
- plugins: 11 箇所
代表的な呼び出し
| 関数 | 用途 | 推定回数 |
|---|---|---|
std::thread::sleep() |
スリープ | 20+ |
std::thread::spawn() |
スレッド生成 | 10+ |
JoinHandle |
スレッド待機 | 5+ |
主要ファイル(Top 10)
| ファイル | 出現回数 | カテゴリ |
|---|---|---|
src/boxes/sound_box.rs |
11 | Box実装 |
src/boxes/p2p_box.rs |
4 | Box実装 |
src/boxes/socket_box.rs |
1 | Box実装 |
src/runtime/global_hooks.rs |
2 | ランタイム |
src/runtime/plugin_loader_unified.rs |
2 | プラグイン |
src/macro/macro_box_ny.rs |
1 | マクロ |
移行方針(Phase 90-D 案)
優先経路:
- src/runtime/global_hooks.rs (2箇所) - ランタイムフック
- src/boxes/sound_box.rs (11箇所) - Ring1候補として保持
- src/boxes/p2p_box.rs (4箇所) - Ring1候補として保持
実装方針:
ring0.thread.sleep(ms: u64) -> Result<(), ThreadError>ring0.thread.spawn<F>(f: F) -> Result<ThreadHandle, ThreadError>ring0.thread.join(handle: ThreadHandle) -> Result<(), ThreadError>
推定工数: 3-5箇所の移行(Phase 90-D)
4. Phase 90 実装計画案
Phase 90-A: fs 系移行(推定 10-20箇所)
対象:
- src/runner/selfhost.rs (4箇所)
- src/runner/modes/vm.rs (3箇所)
- src/runner/modes/common_util/resolve/strip.rs (13箇所)
実装:
ring0.io.file_open(path, mode)ring0.io.file_read(path)ring0.io.file_write(path, content)ring0.io.dir_create(path)
推定工数: 2-3時間
Phase 90-B: io 系移行(推定 5-10箇所)
対象:
- src/runtime/ring0/std_impls.rs (6箇所)
- src/runner/pipe_io.rs (3箇所)
実装:
ring0.io.stdin_read()ring0.io.stdout_write(s)ring0.io.stderr_write(s)
推定工数: 1-2時間
Phase 90-C: time 系移行(推定 10-15箇所)
対象:
- src/runner/modes/common_util/io.rs (4箇所)
- src/runner/modes/common_util/selfhost_exe.rs (4箇所)
- src/runtime/global_hooks.rs (6箇所)
実装:
ring0.time.now()ring0.time.monotonic_now()ring0.time.elapsed(start)ring0.time.sleep(ms)
推定工数: 2-3時間
Phase 90-D: thread 系移行(推定 3-5箇所)
対象:
- src/runtime/global_hooks.rs (2箇所)
- src/runtime/plugin_loader_unified.rs (2箇所)
実装:
ring0.thread.sleep(ms)ring0.thread.spawn(f)ring0.thread.join(handle)
推定工数: 1-2時間
Phase 90-E: 統合テスト
対象:
- selfhost 実行経路の完全動作確認
- VM/LLVM バックエンドの動作確認
- プラグインロードの動作確認
推定工数: 2-3時間
Phase 90 総推定工数
合計: 8-13時間(約1-2日)
完了条件:
- ✅ 全 Ring0 候補の移行完了
- ✅ テスト全パス
- ✅ println!/eprintln! 残存 1,948箇所以下(Phase 89-A から追加なし)
5. 今後の棚卸しタスク(Phase 91 以降)
- hakmem / nyrt 経由の低レベル API 呼び出し(alloc/free など)を一覧化。
- 代表パス(selfhost/hack_check/VM/LLVM)のみを対象にした「最小 Ring0 呼び出しセット」を定義する。
- Ring1-core の境界整理(core_required / core_optional / user_plugin)
これらは Phase 86–87 で Ring0Context に寄せていくための下準備だよ。