//! Nyashランタイムモジュール //! //! プラグインシステムとBox管理の中核 pub mod box_registry; pub mod core_box_ids; // Phase 87: CoreBoxId/CoreMethodId 型安全enum pub mod core_services; // Phase 91: CoreServices trait 定義 pub mod deprecations; pub mod gc; pub mod plugin_host; // Phase 91: PluginHost skeleton pub mod ring0; // Phase 88: Ring0Context - OS API 抽象化レイヤー pub mod gc_controller; pub mod gc_mode; pub mod gc_trace; pub mod global_hooks; pub mod leak_tracker; pub mod nyash_runtime; pub mod observe; // Lightweight observability flags (OOB etc.) pub mod plugin_config; pub mod plugin_ffi_common; pub mod plugin_loader_unified; pub mod plugin_loader_v2; pub mod provider_lock; pub mod provider_verify; pub mod scheduler; pub mod semantics; pub mod unified_registry; // Deprecation warnings with warn-once guards // pub mod plugin_box; // legacy - 古いPluginBox // pub mod plugin_loader; // legacy - Host VTable使用 pub mod extern_registry; // ExternCall (env.*) 登録・診断用レジストリ pub mod host_api; // C ABI: plugins -> host 逆呼び出しAPI(TLSでVMに橋渡し) pub mod host_handles; // C ABI(TLV) 向け HostHandle レジストリ(ユーザー/内蔵Box受け渡し) pub mod modules_registry; pub mod type_box_abi; // Phase 12: Nyash ABI (vtable) 雛形 pub mod type_meta; pub mod type_registry; // Phase 12: TypeId→TypeBox 解決(雛形) // env.modules minimal registry #[cfg(test)] mod tests; pub use box_registry::{get_global_registry, BoxFactoryRegistry, BoxProvider}; pub use core_box_ids::{CoreBoxCategory, CoreBoxId, CoreMethodId}; // Phase 87: 型安全enum pub use plugin_config::PluginConfig; pub use ring0::{get_global_ring0, init_global_ring0, Ring0Context}; // Phase 88: Ring0 公開 API pub use plugin_host::CoreInitError; // Phase 92: CoreServices 初期化エラー pub use plugin_loader_unified::{ get_global_plugin_host, init_global_plugin_host, MethodHandle, PluginBoxType, PluginHost, PluginLibraryHandle, }; pub use plugin_loader_v2::{get_global_loader_v2, init_global_loader_v2, PluginLoaderV2}; pub mod cache_versions; pub use gc::{BarrierKind, GcHooks}; pub use nyash_runtime::{NyashRuntime, NyashRuntimeBuilder}; pub use scheduler::{Scheduler, SingleThreadScheduler}; pub use unified_registry::{ get_global_unified_registry, init_global_unified_registry, register_user_defined_factory, }; // pub use plugin_box::PluginBox; // legacy // Use unified plugin loader (formerly v2) // pub use plugin_loader::{PluginLoaderV2 as PluginLoader, get_global_loader_v2 as get_global_loader}; // legacy // Phase 95: CoreServices 用 global accessor use std::sync::{Arc, OnceLock}; static GLOBAL_CORE_PLUGIN_HOST: OnceLock> = OnceLock::new(); pub fn init_core_plugin_host(host: plugin_host::PluginHost) { GLOBAL_CORE_PLUGIN_HOST .set(Arc::new(host)) .expect("[Phase 95] CorePluginHost already initialized"); } pub fn get_core_plugin_host() -> Arc { GLOBAL_CORE_PLUGIN_HOST .get() .expect("[Phase 95] CorePluginHost not initialized") .clone() } /// Phase 98: Safe accessor that returns None if not initialized pub fn try_get_core_plugin_host() -> Option> { GLOBAL_CORE_PLUGIN_HOST.get().cloned() } /// Phase 98: Helper macro to print using ConsoleService if available, otherwise eprintln #[macro_export] macro_rules! console_println { ($($arg:tt)*) => { if let Some(host) = $crate::runtime::try_get_core_plugin_host() { host.core.console.println(&format!($($arg)*)); } else { eprintln!($($arg)*); } }; } /// Runtime 初期化(Phase 95: global accessor 実装完了) /// /// Phase 94: フォールバック削除 - 常に実際の Box を使用 /// Phase 95: global に登録して get_core_plugin_host() でアクセス可能に pub fn initialize_runtime(ring0: std::sync::Arc) -> Result<(), CoreInitError> { use crate::box_factory::UnifiedBoxRegistry; use crate::box_factory::builtin::BuiltinBoxFactory; let mut registry = UnifiedBoxRegistry::with_env_policy(); // Phase 94: BuiltinBoxFactory を登録して core_required Boxes を提供 registry.register(std::sync::Arc::new(BuiltinBoxFactory::new())); // Phase 94: 常に実際の Box → Service 変換を使用(Fail-Fast原則) let plugin_host = plugin_host::PluginHost::with_core_from_registry(ring0, ®istry)?; plugin_host.ensure_core_initialized(); // Phase 95: global に登録 init_core_plugin_host(plugin_host); Ok(()) }