#entries #hash-map #cache #reference #immutability #thread-safe #accepting

cachingmap

通过内部可变性接受新条目的缓存 Hashmap

1 个不稳定版本

0.2.1 2021年9月24日
0.2.0 2021年9月24日
0.1.0 2021年9月23日

#273 in 缓存

LGPL-3.0-or-later

12KB
111

缓存映射

该 crate 提供了一种映射,旨在通过在不可变状态下接受新条目来缓存中间结果。它提供了对缓存值的简单不可变引用,这些引用在添加新条目时仍然有效。为了返回无需保护或任何封装的轻量级引用,它使用了 UnsafeCell 和短小的 unsafe 代码。返回的引用保证在现有条目没有适当的可变访问的情况下不会失效。值被封装以确保当 HashMap 扩展时指针保持稳定。

⚠️ 早期版本没有使用封装的值,旧的返回引用可能会变得无效。

⚠️ 此映射不是线程安全的,但可能在多线程代码中接受(未测试)。

主要目的是将此映射包含在更大的数据结构中,并使用它来存储基于其他字段的某些计算的输出。当修改某些字段时,可能需要清除个别条目,以确保下一次返回的结果仍然有效。

当前版本是一个概念验证,有一些改进的潜力。

  • 代码很短,在单线程环境中看起来有效,但使用了 unsafe 代码
  • 可能不是线程安全的。如果它在多线程环境中编译,应该阻止它。一个线程安全的扩展可能是有用的。
  • 它使用内部 HashMap,但可以扩展到其他可索引的后端。

没有运行时依赖