#interning #string-interning #symbols #garbage-collection

refuse-pool

利用Refuse垃圾收集器的字符串内部化器

5个版本

0.0.6 2024年8月11日
0.0.5 2024年8月10日
0.0.4 2024年8月2日
0.0.3 2024年5月3日
0.0.2 2024年4月3日

208内存管理

Download history 4/week @ 2024-04-26 209/week @ 2024-05-03 9/week @ 2024-05-17 6/week @ 2024-05-24 1/week @ 2024-05-31 84/week @ 2024-07-26 318/week @ 2024-08-02 307/week @ 2024-08-09

709 每月下载

MIT/Apache

125KB
2.5K SLoC

垃圾回收的“内部化”字符串。

内部化是一种使许多相同事物共享相同底层资源的过程。此crate引入了两种由Refuse垃圾收集器驱动的类型

  • RootString:一个类似于Root<String>的类型,确保所有相同精确字节序列的实例都引用相同的分配。
  • RefString:一个指向RootStringRef<String>类型。
use refuse::CollectionGuard;
use refuse_pool::{RefString, RootString};

let a = RootString::from("a");
let a_again = RootString::from(String::from("a"));

// Both a and a_again point to the same underlying storage.
assert_eq!(a.root_count(), 2);
// Comparing two RootStrings is cheap.
assert_eq!(a, a_again);

// a_ref can be used to gain a reference to a string,
// but only until the string is unreachable.
let a_ref = a.downgrade();

let mut guard = CollectionGuard::acquire();
assert_eq!(a_ref.load(&guard), Some("a"));

drop(a);
drop(a_again);
guard.collect();
assert_eq!(a_ref.load(&guard), None);

依赖项

~3–8.5MB
~67K SLoC