🚀 feat: Phase 9.78b Step 1&2完了 - ChatGPT5による実装

ChatGPT5が実装したPhase 9.78b Step 1&2の統合

## 🎯 実装内容
1. Phase 9.78b Step 1: BoxDeclarationをcore::modelへ移動
   - src/core/mod.rs, model.rs 新規作成
   - BoxDeclarationを純粋データモデルとして分離

2. Phase 9.78b Step 2: NyashRuntime骨組み作成
   - src/runtime/nyash_runtime.rs 追加
   - 統一Box管理の基盤

3. ビルドエラー修正
   - Arc重複インポート修正
   - as_str() → as_ref() 変更
   - parent_name.to_string() 型変換
   - インポートパス調整

## 📊 ビルド結果
-  フルビルド成功 (47.34秒)
-  ユニットテスト: 145/145成功
-  統合テスト: 16/16成功
-  WASMビルド成功 (1.9MB)
-  MIRテスト: 1失敗 (ref_new命令)

## 🚀 次のステップ
- Phase 9.78b Step 3: BoxFactory dyn化
- Codexの設計に基づく段階的実装継続
This commit is contained in:
Moe Charm
2025-08-20 18:57:10 +09:00
parent 86b9f7719b
commit 41361a2f50
15 changed files with 571 additions and 95 deletions

View File

@ -10,6 +10,7 @@ use crate::box_trait::{NyashBox, StringBox, IntegerBox, BoolBox, VoidBox, Shared
use crate::instance_v2::InstanceBox;
use crate::parser::ParseError;
use super::BuiltinStdlib;
use crate::runtime::{NyashRuntime, NyashRuntimeBuilder};
use std::sync::{Arc, Mutex, RwLock};
use std::collections::{HashMap, HashSet};
use thiserror::Error;
@ -222,6 +223,9 @@ pub struct NyashInterpreter {
/// 📚 組み込み標準ライブラリ
pub(super) stdlib: Option<BuiltinStdlib>,
/// 共有ランタイムBoxレジストリ等
pub(super) runtime: NyashRuntime,
}
impl NyashInterpreter {
@ -229,12 +233,15 @@ impl NyashInterpreter {
pub fn new() -> Self {
let shared = SharedState::new();
// Register user-defined box factory with unified registry
// ランタイムを構築し、ユーザー定義Boxファクトリを注入グローバル登録を避ける
use crate::box_factory::user_defined::UserDefinedBoxFactory;
use crate::runtime::register_user_defined_factory;
let factory = UserDefinedBoxFactory::new(shared.clone());
register_user_defined_factory(Arc::new(factory));
let udf = Arc::new(UserDefinedBoxFactory::new(shared.clone()));
let runtime = NyashRuntimeBuilder::new().with_factory(udf).build();
// Step 5: SharedState分解の第一歩として、
// box_declarationsの保管先をRuntimeに寄せる
let mut shared = shared; // 可変化
shared.box_declarations = runtime.box_declarations.clone();
Self {
shared,
@ -245,11 +252,21 @@ impl NyashInterpreter {
evaluation_stack: Vec::new(),
invalidated_ids: Arc::new(Mutex::new(HashSet::new())),
stdlib: None, // 遅延初期化
runtime,
}
}
/// 共有状態から新しいインタープリターを作成(非同期実行用)
pub fn with_shared(shared: SharedState) -> Self {
// 共有状態に紐づいたランタイムを構築
use crate::box_factory::user_defined::UserDefinedBoxFactory;
let udf = Arc::new(UserDefinedBoxFactory::new(shared.clone()));
let runtime = NyashRuntimeBuilder::new().with_factory(udf).build();
// Step 5: Runtimeのbox_declarationsに寄せ替え
let mut shared = shared; // 可変化
shared.box_declarations = runtime.box_declarations.clone();
Self {
shared,
local_vars: HashMap::new(),
@ -259,6 +276,7 @@ impl NyashInterpreter {
evaluation_stack: Vec::new(),
invalidated_ids: Arc::new(Mutex::new(HashSet::new())),
stdlib: None, // 遅延初期化
runtime,
}
}