#lru-cache #reference #compile-time #stability #data-structures #features

ref-stable-lru

编译时引用稳定的 LRU 缓存实现

3 个不稳定版本

0.2.2 2024年2月8日
0.2.1 2024年2月8日
0.1.0 2024年1月26日

#111 in 缓存

每月21次下载

MIT/Apache

14KB
280

编译时引用稳定的 LRU 缓存

主要代码是从 lru-rs 复制的,非常感谢该项目。

实现这个项目的动机主要是让 LRUCache 允许通过 get 方法获取多个不可变引用。目前,这个 crate 正处于积极开发阶段。该 crate 的目的是验证新的设计模式,并希望将其应用于更多的集合库,最好是包括 std。至于这个库本身,我更希望其提出的新的 API 被合并到 上游

主要思路是将值操作权限与数据结构本身分离。 博客文章 详细阐述了该思路。您也可以查看 uitest,它解释了 API 设计目标。

示例

以下是一个简单的示例,展示了 LRUCache 的主要功能。

let mut cache = LruCache::new(NonZeroUsize::new(2).unwrap());

cache.scope(|mut cache, mut perm| {
    assert_eq!(cache.put("apple", "red", &mut perm), None);
    assert_eq!(cache.put("banana", "yellow", &mut perm), None);
    assert_eq!(cache.put("lemon", "yellow", &mut perm), Some("red"));

    let colors: Vec<_> = ["apple", "banana", "lemon", "watermelon"]
        .iter()
        .map(|k| cache.get(k, &perm))
        .collect();
    assert!(colors[0].is_none());
    assert_opt_eq(colors[1], "yellow");
    assert_opt_eq(colors[2], "yellow");
    assert!(colors[3].is_none());
});

无运行时依赖