pub struct OnionStaticObject { /* private fields */ }
Expand description
Onion 静态对象封装。
稳定化的对象封装,用于跨函数调用、长期存储和序列化。 通过持有必要的强引用来确保对象在使用期间不被 GC 回收。
§设计目的
- 跨边界传递: 在函数调用、模块间传递对象
- 长期存储: 作为常量、全局变量等存储
- GC 稳定性: 确保对象在使用期间不被回收
- 序列化支持: 提供对象的稳定表示
§内部结构
obj
: 实际的对象数据_arcs
: GC 强引用存储,防止对象被回收
§GC 策略
根据对象类型采用不同的 GC 策略:
- 基础类型: 无需额外引用(如 Integer, String 等)
- Mut 类型: 持有单个强引用
- 复杂类型: 持有多个强引用(如 Tuple, Lambda 等)
§关键方法
new()
: 创建静态对象并自动设置 GC 引用weak()
: 获取内部对象的弱引用mutablize()
: 转换为可变对象immutablize()
: 从可变对象中提取值
Implementations§
Source§impl OnionStaticObject
impl OnionStaticObject
pub fn new(obj: OnionObject) -> Self
pub fn weak(&self) -> &OnionObject
Sourcepub fn mutablize(self, gc: &mut GC<OnionObjectCell>) -> OnionStaticObject
pub fn mutablize(self, gc: &mut GC<OnionObjectCell>) -> OnionStaticObject
将值装箱成可变容器,严格遵循幂等律的情况下,Cell里不可能出现Mut对象。 也就是说,mut mut x和mut x是等价的。
Sourcepub fn immutablize(self) -> Result<OnionStaticObject, RuntimeError>
pub fn immutablize(self) -> Result<OnionStaticObject, RuntimeError>
将值从可变容器中卸载,严格遵循幂等律 也就是说,const const x和const x是等价的。
Trait Implementations§
Source§impl Clone for OnionStaticObject
impl Clone for OnionStaticObject
Source§fn clone(&self) -> OnionStaticObject
fn clone(&self) -> OnionStaticObject
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Debug for OnionStaticObject
impl Debug for OnionStaticObject
Source§impl Default for OnionStaticObject
impl Default for OnionStaticObject
Auto Trait Implementations§
impl Freeze for OnionStaticObject
impl !RefUnwindSafe for OnionStaticObject
impl Send for OnionStaticObject
impl Sync for OnionStaticObject
impl Unpin for OnionStaticObject
impl !UnwindSafe for OnionStaticObject
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more