1 unstable release
| 0.1.0 | Nov 21, 2025 |
|---|
#1748 in Data structures
34KB
753 lines
shared-vec
shared-vec is a Rust crate that provides immutable reference-counted vector and string types allowing sharing data (or even a part of it) without lifetime-bound references.
Features
- Immutable reference-counted vector type
Vec<C, T>, whereCis a counter type implementing theCountertrait. - Immutable reference-counted string type
String<C>, whereCis a counter type implementing theCountertrait. - Common type aliases
RcVec<T>,ArcVec<T>,RcString, andArcStringfor ease of use. - Safe and efficient memory management with customizable reference counting strategies.
Usage
Add shared-vec to your Cargo.toml:
[dependencies]
shared-vec = "0.1"
Then, you can use the provided types in your Rust code:
use shared_vec::{RcVec, ArcString};
// Create
let vec: RcVec<i32> = RcVec::from_boxed_slice(Box::new([1, 2, 3]));
let string: ArcString = ArcString::from_boxed_str("Hello, world!".to_owned().into_boxed_str());
// Clone
let vec_clone = vec.clone();
let string_clone = string.clone();
// Access data
println!("{:?}", &vec[..]);
println!("{}", &string[..]);
// Borrow slices
let slice = vec.idx(1..3);
println!("{:?}", slice);
assert_eq!(slice.as_slice(), &[2, 3]);
let str_slice = string.idx(7..12);
println!("{:?}", str_slice);
assert_eq!(str_slice.as_str(), "world");
Related Projects
| Crate Name | Description | Memory Management Approach | deref or as_str |
Offset Representation | Allow Weak References |
|---|---|---|---|---|---|
substr |
Substrings as ranges | no allocation | N | usize |
|
genrc |
Ref-counted pointers allowing to reference subobjects | reference counting | Y | std::ptr::NonNull<T> |
Y |
shared-string |
Shared strings backed by Rc<Box<[u8]>> and Arc<Box<[u8]>> |
reference counting | Y | usize |
N |
shared_slice |
Shared slices backed by Rc<()> and Arc<()> |
reference counting | Y | usize |
N |
shared-vec |
Ref-counted vectors and strings simulating Rc and Arc |
reference counting | *const [T] |
Y | |
&str |
lifetime | data part of the fat pointer |
Dependencies
~0–630KB
~12K SLoC