主要な実装: - PHI(b1)統計追跡: phi_total_slots/phi_b1_slotsをJSON出力 - 関数単位統計API: JitStatsBox.perFunction()で詳細統計取得 - JITイベントシステム: compile/execute/fallback/trapをJSONL形式で記録 - Store/Load命令対応: ローカル変数を含む関数のJIT実行が可能に 新しいBox: - JitStatsBox: JIT統計の取得 - JitConfigBox: JIT設定の管理(将来用) - JitEventsBox: イベントのJSONL出力(将来用) - JitPolicyBox: 実行ポリシー管理(将来用) CLI拡張: - --jit-exec, --jit-stats, --jit-dump等のフラグ追加 - --jit-directモードでの独立JIT実行 - NYASH_JIT_*環境変数によるきめ細かい制御 ドキュメント: - Phase 10.7実装計画の詳細化 - Phase 10.9 (ビルトインBox JIT) の計画追加 - JIT統計JSONスキーマ v1の仕様化 ChatGPT5との共同開発により、JIT基盤が大幅に強化されました。 次はPhase 10.9でビルトインBoxのJIT対応を進め、 Python統合(Phase 10.1)への道を開きます。 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
164 lines
5.1 KiB
Rust
164 lines
5.1 KiB
Rust
/*! 🎯 Nyash Box実装モジュール
|
||
* Everything is Box哲学に基づく各Box型の実装
|
||
*
|
||
* ## 📦 利用可能なBox一覧
|
||
*
|
||
* ### 🔤 基本データ型Box
|
||
* - **StringBox**: 文字列操作 - `"Hello".length()`, `str.split(",")`
|
||
* - **IntegerBox**: 整数計算 - `42.add(8)`, `num.toString()`
|
||
* - **BoolBox**: 真偽値 - `true.not()`, `flag.toString()`
|
||
*
|
||
* ### 🧮 計算・ユーティリティBox
|
||
* - **MathBox**: 数学関数 - `Math.sin(x)`, `Math.random()`
|
||
* - **TimeBox**: 時間操作 - `Time.now()`, `time.format()`
|
||
* - **RandomBox**: 乱数生成 - `Random.int(10)`, `Random.choice(array)`
|
||
*
|
||
* ### 🖥️ システム・IO Box
|
||
* - **ConsoleBox**: コンソール出力 - `console.log()`, `console.error()`
|
||
* - **DebugBox**: デバッグ支援 - `debug.trace()`, `debug.memory()`
|
||
* - **SoundBox**: 音声再生 - `sound.beep()`, `sound.play(file)`
|
||
*
|
||
* ### 🗄️ コレクション・データBox
|
||
* - **MapBox**: キー値ストレージ - `map.set(key, val)`, `map.get(key)`
|
||
* - **NullBox**: NULL値表現 - `null.toString()` → "void"
|
||
*
|
||
* ### 🖼️ GUI・グラフィックBox
|
||
* - **EguiBox**: デスクトップGUI - `gui.setTitle()`, `gui.run()`
|
||
*
|
||
* ### 🌐 Web専用Box (WASM環境)
|
||
* - **WebDisplayBox**: HTML表示 - `display.show(html)`
|
||
* - **WebConsoleBox**: ブラウザコンソール - `webConsole.log()`
|
||
* - **WebCanvasBox**: Canvas描画 - `canvas.drawRect()`
|
||
*
|
||
* ### 🔗 通信・ネットワークBox
|
||
* - **SimpleIntentBox**: P2P通信 - `intent.send()`, `intent.on()`
|
||
*
|
||
* ## 💡 使用例
|
||
* ```nyash
|
||
* // 基本的な使い方
|
||
* local str, num, result
|
||
* str = "Nyash"
|
||
* num = 42
|
||
* result = str.concat(" v") + num.toString()
|
||
*
|
||
* // GUIアプリ作成
|
||
* local app
|
||
* app = new EguiBox()
|
||
* app.setTitle("My App")
|
||
* app.run()
|
||
* ```
|
||
*/
|
||
|
||
// Nyashは意図的にJavaScript/TypeScriptスタイルのcamelCase命名規約を採用
|
||
#![allow(non_snake_case)]
|
||
|
||
// 各Boxモジュールを宣言
|
||
pub mod string_box;
|
||
pub mod integer_box;
|
||
pub mod bool_box;
|
||
pub mod math_box;
|
||
pub mod time_box;
|
||
pub mod debug_box;
|
||
pub mod random_box;
|
||
// These boxes use web APIs that require special handling in WASM
|
||
#[cfg(not(target_arch = "wasm32"))]
|
||
pub mod timer_box;
|
||
#[cfg(not(target_arch = "wasm32"))]
|
||
pub mod canvas_event_box;
|
||
#[cfg(not(target_arch = "wasm32"))]
|
||
pub mod canvas_loop_box;
|
||
#[cfg(not(target_arch = "wasm32"))]
|
||
pub mod audio_box;
|
||
#[cfg(not(target_arch = "wasm32"))]
|
||
pub mod qr_box;
|
||
pub mod sound_box;
|
||
pub mod map_box;
|
||
pub mod console_box;
|
||
pub mod jit_config_box;
|
||
pub mod jit_stats_box;
|
||
pub mod jit_policy_box;
|
||
pub mod jit_events_box;
|
||
|
||
// Web専用Box群(ブラウザ環境でのみ利用可能)
|
||
#[cfg(target_arch = "wasm32")]
|
||
pub mod web;
|
||
|
||
// GUI Box(条件付きコンパイル)
|
||
#[cfg(all(feature = "gui", not(target_arch = "wasm32")))]
|
||
pub mod egui_box;
|
||
|
||
// 共通で使う型とトレイトを再エクスポート
|
||
// pub use string_box::StringBox; // レガシー実装、box_trait::StringBoxを使用すること
|
||
// pub use integer_box::IntegerBox; // レガシー実装、box_trait::IntegerBoxを使用すること
|
||
// pub use bool_box::BoolBox; // レガシー実装、box_trait::BoolBoxを使用すること
|
||
pub use math_box::{MathBox, FloatBox};
|
||
pub use time_box::{TimeBox, DateTimeBox};
|
||
pub use debug_box::DebugBox;
|
||
pub use random_box::RandomBox;
|
||
#[cfg(not(target_arch = "wasm32"))]
|
||
pub use timer_box::TimerBox;
|
||
#[cfg(not(target_arch = "wasm32"))]
|
||
pub use canvas_event_box::CanvasEventBox;
|
||
#[cfg(not(target_arch = "wasm32"))]
|
||
pub use canvas_loop_box::CanvasLoopBox;
|
||
#[cfg(not(target_arch = "wasm32"))]
|
||
pub use audio_box::AudioBox;
|
||
#[cfg(not(target_arch = "wasm32"))]
|
||
pub use qr_box::QRBox;
|
||
pub use sound_box::SoundBox;
|
||
pub use map_box::MapBox;
|
||
pub use console_box::ConsoleBox;
|
||
pub use jit_config_box::JitConfigBox;
|
||
pub use jit_stats_box::JitStatsBox;
|
||
pub use jit_policy_box::JitPolicyBox;
|
||
pub use jit_events_box::JitEventsBox;
|
||
|
||
// EguiBoxの再エクスポート(非WASM環境のみ)
|
||
#[cfg(all(feature = "gui", not(target_arch = "wasm32")))]
|
||
pub use egui_box::EguiBox;
|
||
|
||
// Web Box群の再エクスポート(WASM環境のみ)
|
||
#[cfg(target_arch = "wasm32")]
|
||
pub use web::{WebDisplayBox, WebConsoleBox, WebCanvasBox};
|
||
|
||
pub mod null_box;
|
||
|
||
// High-priority Box types
|
||
pub mod array;
|
||
pub mod buffer;
|
||
pub mod file;
|
||
pub mod future;
|
||
pub mod json;
|
||
pub mod result;
|
||
pub mod http;
|
||
pub mod stream;
|
||
pub mod regex;
|
||
pub mod socket_box;
|
||
pub mod http_message_box;
|
||
pub mod http_server_box;
|
||
|
||
// P2P通信Box群 (NEW! - Completely rewritten)
|
||
pub mod intent_box;
|
||
pub mod p2p_box;
|
||
|
||
// null関数も再エクスポート
|
||
pub use null_box::{NullBox, null};
|
||
|
||
// High-priority Box types re-export
|
||
pub use array::ArrayBox;
|
||
pub use buffer::BufferBox;
|
||
pub use file::FileBox;
|
||
pub use future::{NyashFutureBox, FutureBox};
|
||
pub use json::JSONBox;
|
||
pub use result::{NyashResultBox, ResultBox};
|
||
pub use http::HttpClientBox;
|
||
pub use stream::{NyashStreamBox, StreamBox};
|
||
pub use regex::RegexBox;
|
||
pub use socket_box::SocketBox;
|
||
pub use http_message_box::{HTTPRequestBox, HTTPResponseBox};
|
||
pub use http_server_box::HTTPServerBox;
|
||
|
||
// P2P通信Boxの再エクスポート
|
||
pub use intent_box::IntentBox;
|
||
pub use p2p_box::P2PBox;
|