[−][src]Attribute Macro memoize::memoize
#[memoize]
memoize is an attribute to create a memoized version of a (simple enough) function.
So far, it works on functions with one or more arguments which are Clone
- and Hash
-able,
returning a Clone
-able value. Several clones happen within the storage and recall layer, with
the assumption being that memoize
is used to cache such expensive functions that very few
clone()
s do not matter.
Calls are memoized for the lifetime of a program, using a statically allocated, Mutex-protected HashMap.
Memoizing functions is very simple: As long as the above-stated requirements are fulfilled,
simply use the #[memoize::memoize]
attribute:
use memoize::memoize; #[memoize] fn hello(arg: String, arg2: usize) -> bool { arg.len()%2 == arg2 } // `hello` is only called once. assert!(! hello("World".to_string(), 0)); assert!(! hello("World".to_string(), 0));
If you need to use the un-memoized function, it is always available as memoized_original_{fn}
,
in this case: memoized_original_hello()
.
See the examples
for concrete applications.
The following descriptions need the full
feature enabled.
The memoize
attribute can take further parameters in order to use an LRU cache:
#[memoize(Capacity: 1234)]
. In that case, instead of a HashMap
we use an lru::LruCache
with the given capacity.
This mechanism can, in principle, be extended (in the source code) to any other cache mechanism.