mau 0.1.0

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 {
    if n <= 1 {
        n
    } else {
        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 {
    if 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 双许可证。