2 个版本

0.2.1 2023年11月13日
0.2.0 2023年11月5日

#1153 in 过程宏

MIT/Apache

13KB
211 代码行

MemoEYES 👁️

两个过程宏,用于自动实现函数的记忆化,使递归函数调用 更快

可能会在将来更新,将两个宏合并为一个具有不同参数的单个宏

#[lru_cache]

此宏创建一个全局静态变量,并使用它进行记忆化。它也是一个LRU缓存,这使得它更加方便

#[lru_cache(max = 10)]
fn fib(n: u128) -> u128 {
    if n < 2 {
        return n;
    }
    fib(n - 1) + fib(n - 2)
}

let result = fib(186);
// result: 332825110087067562321196029789634457848

#[memo]

此宏更加明确(更符合Rust的哲学),并且不使用unsafe代码。它修改函数,使其具有一个额外的参数,该参数是一个 HashMap<TUPLE_OF_INPUT_TYPES, OUTPUT_TYPE>

使用它可以直接访问查找表,而无需通过unsafe块和隐式代码

#[memo]
fn fib(n: u128) -> u128 {
    if n < 2 {
        return n;
    }
    fib(n - 1) + fib(n - 2)
}

let mut memo = HashMap::new();
let result = fib(186, &mut memo);
// result: 332825110087067562321196029789634457848

贡献

这是什么?

想更多地了解函数记忆化,并想学习类似属性的宏。自己解决了。不重要但 命名灵感

依赖项

~1.7–2.5MB
~40K SLoC