mau 0.1.1

A Rust procedural macro library for memoization with MauQueue optimization
Documentation

Mau

一个用于 Rust 的过程宏库,提供内存化(memoization)功能和 MauQueue 优化。

功能特性

  • 自动缓存: 使用 #[memo] 宏自动为函数添加缓存功能
  • MauQueue 优化: 通过 MauQueue 将复杂的循环逻辑转换为高效的代码
  • 线程安全: 内置线程安全的缓存机制
  • 零运行时开销: 编译时代码生成,无运行时性能损失

安装

Cargo.toml 中添加:

[dependencies]
mau = "0.1.0"

使用示例

基础内存化

use mau::memo;

#[memo]
fn fibonacci(n: u64) -> u64 {
    match n {
        0 | 1 => n,
        _ => fibonacci(n - 1) + fibonacci(n - 2),
    }
}

fn main() {
    println!("{}", fibonacci(40)); // 高效计算,结果会被缓存
}

MauQueue 优化

use mau::memo;

#[memo]
fn optimized_calculation(nums: &Vec<i32>, n: usize) -> i32 {
    match n {
        0 => return 0,
        _ => {
            let start = n.saturating_sub(4);
            let end = n.saturating_sub(1);
    
            // MauQueue 会被转换为高效的循环代码
            let result = MauQueue(
                move || start,
                move || end,
                |i| {
                    let current_value = nums[i];
                    let prev_max = optimized_calculation(nums, i);
                    std::cmp::max(prev_max, prev_max + current_value)
                }
            );
            result
        }
}

工作原理

内存化机制

#[memo] 宏会:

  1. 创建一个线程安全的哈希表缓存
  2. 生成一个无缓存版本的函数
  3. 在原函数中添加缓存查找和存储逻辑

MauQueue 转换

MauQueue(start_fn, end_fn, optimize_fn) 会被转换为:

{
    let mut max = 0;
    let start = start_fn();
    let end = end_fn();
    for i in start..=end {
        max = optimize_fn(i);
    }
    max
}

许可证

本项目采用 MIT 或 Apache-2.0 双许可证。