aether/engine/
mod.rs

1//! Aether Engine - 高性能引擎管理模块
2//!
3//! 提供三种独立的引擎模式,适用于不同场景:
4//!
5//! ## 1. GlobalEngine - 全局单例模式
6//!
7//! **适用场景**:单线程、高频调用、需要最大化性能
8//!
9//! ```rust
10//! use aether::engine::GlobalEngine;
11//!
12//! // 使用全局单例(隔离环境,但保留AST缓存)
13//! let result = GlobalEngine::eval_isolated("Set X 10\n(X + 20)")?;
14//! println!("Result: {}", result);
15//! ```
16//!
17//! **特点**:
18//! - ✅ 性能最优(只创建一次引擎)
19//! - ✅ AST缓存效果最佳(可达142x加速)
20//! - ✅ 环境隔离(每次eval前清空变量)
21//! - ⚠️ 需要线程同步(Mutex)
22//!
23//! ## 2. PooledEngine - 引擎池模式
24//!
25//! **适用场景**:单线程内需要多个引擎实例、避免频繁创建开销
26//!
27//! ```rust
28//! use aether::engine::EnginePool;
29//!
30//! // 创建引擎池(建议4-8个)
31//! let mut pool = EnginePool::new(4);
32//!
33//! // 多次使用(复用引擎实例)
34//! for i in 0..100 {
35//!     let mut engine = pool.acquire(); // 自动获取
36//!     let code = format!("Set X {}\n(X * 2)", i);
37//!     engine.eval(&code)?;
38//! } // 作用域结束自动归还
39//! ```
40//!
41//! **特点**:
42//! - ✅ 复用引擎实例(避免频繁创建)
43//! - ✅ 自动归还(RAII模式)
44//! - ✅ 环境隔离(每次获取前清空)
45//! - ⚠️ 线程局部(每个线程独立池)
46//!
47//! ## 3. ScopedEngine - 闭包模式
48//!
49//! **适用场景**:临时执行、需要完全隔离、偶尔使用
50//!
51//! ```rust
52//! use aether::engine::ScopedEngine;
53//!
54//! // 使用闭包(每次都是新引擎)
55//! let result = ScopedEngine::with(|engine| {
56//!     engine.eval("Set X 10")?;
57//!     engine.eval("(X + 20)")
58//! })?;
59//! ```
60//!
61//! **特点**:
62//! - ✅ 完全隔离(每次新建引擎)
63//! - ✅ API简洁(类似Py3o)
64//! - ⚠️ 性能较低(无法利用缓存)
65//!
66//! ## 模式对比
67//!
68//! | 特性 | GlobalEngine | PooledEngine | ScopedEngine |
69//! |------|-------------|--------------|--------------|
70//! | 性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
71//! | 多引擎 | ❌ | ✅ | ❌ |
72//! | 环境隔离 | ✅ | ✅ | ✅ |
73//! | AST缓存 | ✅ | ✅ | ❌ |
74//! | 内存占用 | 低 | 中 | 低 |
75//! | 使用场景 | 单线程高频 | 避免频繁创建 | 临时执行 |
76
77pub mod global;
78pub mod pool;
79pub mod scoped;
80
81pub use global::GlobalEngine;
82pub use pool::{EnginePool, PooledEngine};
83pub use scoped::ScopedEngine;