9次发布
0.2.7 | 2023年4月30日 |
---|---|
0.2.6 | 2023年4月21日 |
0.1.0 | 2023年4月5日 |
396 在 内存管理
每月下载量 55
47KB
707 行
SPEEDY_REFS
Rust的简单、快速且实用的智能指针集合。
特性
- Rc -> 对 std
Rc
智能指针的闪电般快速的替代品。 - RefCell -> 对 std
RefCell
的闪电般快速的替代品。 - Arc - 性能相当,但更轻量级的 std
Arc
替代品 - HeapCell - 类似于
NonNull
,具有更简单的类型deallocation
和dropping
- Reon - 实现了
Sync
和Send
的只读静态指针 - RcCell -
Rc<RefCell>
的简单且更简洁的版本 - SharedCell - 用于无需借用检查的共享所有权。
- Borrow - 无需借用检查的可克隆共享所有权。类似于在Java、Go、Python等语言中使用引用的方式。
即将推出
- Atomic - 使用原子操作来控制对任何类型的可变和不可变访问,以进行多线程同步。
- Hazard - 危险指针实现。
依赖项
安装
[dependencies]
speedy_refs = "0.2.7"
示例
Reon
use std::thread;
use std::sync::{Arc, Barrier};
use speedy_refs::Reon;
fn main() {
let x = Reon::new(42);
let num_threads = 4;
let barrier = Arc::new(Barrier::new(num_threads));
let mut threads = Vec::with_capacity(num_threads);
for _ in 0..num_threads {
let x = x.clone();
let barrier = Arc::clone(&barrier);
let thread = thread::spawn(move || {
barrier.wait();
println!("Thread {:?} sees value: {}", thread::current().id(), *x);
});
threads.push(thread);
}
for thread in threads {
thread.join().unwrap();
}
}
Borrow
use speedy_refs::Borrow;
#[derive(Debug, PartialEq, Eq)]
struct Data(String, usize, bool, Vec<Self>);
fn main() {
// Create a new variable
let data = Data(String::from("Hello, World"), 100, false, vec![]);
// Create a Borrow (a reference) with the variable
let mut data_ref = Borrow::new(data);
// Create another reference to the same variable
let mut clone = Borrow::clone(&data_ref);
// Use the Borrow seemlessly
data_ref.0.push('!');
clone.1 += 55;
data_ref.2 = true;
clone.3.push(Data("".into(), 0, false, Vec::new()));
// Debug for JavaCell is same as that for Data
println!("{:?}", clone);
// Output
//Data("Hello, World!", 155, true, [Data("", 0, false, [])])
println!("{:?}", data_ref);
// Output
//Data("Hello, World!", 155, true, [Data("", 0, false, [])])
assert_eq!(
*data_ref,
Data(
String::from("Hello, World!"),
155,
true,
vec![Data("".into(), 0, false, vec![])]
)
);
assert_eq!(
*clone,
Data(
String::from("Hello, World!"),
155,
true,
vec![Data("".into(), 0, false, vec![])]
)
);
// Borrow implements AsRef and Deref of T
print(&data_ref);
}
fn print<T: std::fmt::Debug>(data: &T) {
// do something
println!("{:?}", data);
}
许可证
MIT许可证
依赖项
~0.4–1MB
~23K SLoC