`

rust cell

    博客分类:
  • rust
 
阅读更多
fn test_cell(){
    use std::cell::Cell;
    struct Foo{
        x:  u32,
        y:  Cell<u32>
    }
    let foo = Foo {x:1,y:Cell::new(3)};
    assert_eq!(1,foo.x);
    println!("y:{:?}",foo.y.get());
    foo.y.set(6);
    println!("y:{:?}",foo.y.get());
}

y:3
y:6


RefCell<T>提供了borrow/borrow_mut方法,对应Cell<T>的get/set方法.
RefCell<T>虽然没有分配空间,但它是有运行时开销的,因为它自己维护着一个运行时借用检查器,如果在运行时出现违反借用规则的情况,比如持有多个可变借用,则会引发线程panic
fn test_refCell(){
    use std::cell::RefCell;
    let x = RefCell::new(vec![1,2,3,4]);
    println!("{:?}",x.borrow());
    x.borrow_mut().push(6);
    println!("{:?}",x.borrow());
}

[1, 2, 3, 4]
[1, 2, 3, 4, 6]
分享到:
评论

相关推荐

    cell-gc:Rust中的一个很小的GC,带有安全的API

    细胞 一个用于Rust的简单垃圾收集器。 目的是帮助您在Rust中快速构建VM。 因此,此GC专为: 安全不依赖于linters或编译器插件与高性能实现相一致的API(尽管现在cell-gc并不Swift) 乐趣注意事项cell-gc用于VM。 ...

    Once_cell:Rust库,用于单个分配单元和无宏的惰性静态

    Once_cell:Rust库,用于单个分配单元和无宏的惰性静态

    Rust 智能指针基础用法总结

    本资源总结了Rust中的常见智能指针用法,和示例代码。 例如Box,Raw Pointer裸指针 Rc计数指针 Cell与RefCell内部可变性 Weak指针 Arc原子计数指针 和Mutex锁 的用法和示例

    rust-debruijn:Rust中的De Bruijn图

    锈渣De Bruijn图构建和路径压缩库。...以实现内存高效计数和DeBruijn图压缩可配置为绞合和非绞合输入序列广泛的单元测试套件在生产中用于10x Genomics的Supernova,Lang Ranger,Cell Ranger和Cell Ranger VDJ管道。

    multilist:Rust 的安全、侵入式双向链表

    multilist是一个 Rust 数据结构,表示一组侵入式双向链表,按数字索引。 多表拥有的对象可以属于任意数量的组成链表。 每个对象只使用一个分配,而不管它在多少个列表中。 当第一次添加一个对象时(例如通过push_...

    rust-alloc-no-stdlib:通用分配器的接口,因此no_std rust库可以在有或没有stdlib链接的情况下分配内存

    通过使用calloc预先分配最大数据限制并使用seccomp禁止将来的系统调用,该库还应该可以将需要动态分配的rust应用程序完全监禁。 用法 共有3种分配内存的方式,每种方式各有利弊 在堆栈上 根本不需要stdlib,这是...

    redis-cell:Redis模块,可通过单个命令在Redis中提供速率限制

    表明,redis-cell的运行速度非常快,运行时间是基本Redis SET两倍(从Redis客户端看到,每个命令的运行时间大约为0.1毫秒)。安装。 如果有兴趣拥有当前不支持的体系结构或操作系统的二进制文件,请打开一个问题。 ...

    rustprimer-v1.13-大家新年快乐.pdf

    Cell, RefCell 类型系统中的几个常见 Trait Into/From 及其在 String 和 &str; 互转上的应用 AsRef, AsMut Borrow, BorrowMut, ToOwned Deref 与 Deref coercions Cow 及其在 String 和 &str; 上的应用 Send 和 Sync...

    gcmodule:受CPython gcmodule启发的Rust垃圾收集

    gcmodule 垃圾回收受...use std :: cell :: RefCell;type List = Cc&lt;RefCell&gt;&gt;&gt;&gt;;let a: List = Default :: default ();let b: List = Default :: default ();a. borrow_mut (). push ( Box :: new (b. clone ()));b

    循环数据结构在稳定、安全、Rust 中的概念实现的证明。

    循环数据结构在稳定、安全、Rust 中的概念实现的证明。这展示了static-rc crate 和ghost-cell crate 的综合能力。动机为什么要重视安全?关于数据结构的两个事实的简单组合:它们很普遍,经常用于存储用户控制的输入...

    send-cell:具有运行时的不可变内存区域发送检查

    发送单元 不推荐使用:不推荐使用此板条箱,而建议使用。 fragile::Fragile类型具有基本... 除非您明确声明,否则您有意提交以供包含在send-cell中的任何贡献均应按照上述MIT许可进行许可,而无需任何其他条款或条件。

    Joshua Yanovski 的 Ghost Cell 论文的实现。

    安全在 GhostCell 论文中,来自德国 MPI-SWS 的 Joshua Yanovski 和他的同事使用他们在Rust Belt 项目中开发的分离逻辑正式证明了GhostCell的安全性。我个人会相信他们。官方实现可以在...

    Web3极客日报 #6

    如何理解Rust中的可变与不可变?...@洋芋:本文介绍了Rust标准库中的Cell, RefCell,其作为提供内部可变性的容器,弥补了Rust所有权机制在灵活性上和某些场景下的不足。 学习Polkadot的好地方:Polkadot Wiki ...

    vcell:就像“Cell”一样,但具有易失性读写操作

    vcell 就像一样,但具有读/写操作 执照 获得许可 Apache 许可证,版本 2.0( 或 ) MIT 许可证( 或 ) 在您的选择。 贡献 除非您另有明确说明,否则根据 Apache-2.0 许可证的定义,您有意提交的包含在作品中的...

    solkit:用于终端的纸牌收藏和纸牌构建套件

    Free cell和Klondike混合物,或American Toad和Klondike混合物 列数更少或更多的Klondike Klondike有两个甲板和4个地基,从Ace升序排列,其他4个地基从King降序排列 全新的单人纸牌游戏,例如“ Pile'em up游戏 ...

    actix-web-buffering:RequestResponse主体缓冲,支持后台处理到磁盘上的临时文件

    cell :: RefCell, pin :: Pin, rc :: Rc, sync :: Arc, task :: {Context, Poll}, }; use actix_service :: Transform; use actix_web :: { dev :: {Body, Service, ServiceRequest, ServiceResponse}, web, ...

    iggy:影响图分析,一致性检查,诊断,修复和预测

    iggy + opt_graph iggy和opt_graph中是影响图形和观察到的系统行为(两个测量状态之间签订的变化)的一致性为基础的分析工具。 对于许多(生物)系统,都可以使用因果网络,布尔网络和影响图来描述其组件之间的相互...

Global site tag (gtag.js) - Google Analytics