#proc-macro #functional

functional_macro

Rust的功能宏

2个版本

0.0.2 2023年12月3日
0.0.1 2023年12月3日

#624过程宏

MIT/Apache

15KB
344

功能宏

背景

这个 的目的是帮助强制执行 纯函数

虽然它确实有一些已知的局限性(见下文),但我们仍然认为它有助于保持 mutation 在控制之下。

它是如何工作的?

  1. 我们解析每个 函数 参数并检查它们是否是 可变的 (&mut)。
  2. 我们通过一个内部 模块 重写 函数 以防止使用 globals

原始:

#[pure_functional]
fn foo(arg: i32) -> i32 {
    arg + 1
}

重写:

fn foo(arg: i32) -> i32 {
    mod inner {
        pub fn foo(arg: i32) -> i32 {
            arg + 1
        }
    }
    inner::foo(arg)
}

已知局限性

  1. 任何内部隐藏 mutabilitystruct 都不会被此 捕获。

    例如,以下 struct 将不会被此 捕获

    • Arc<Mutex<T>>.
    • Cell<T>.
    • RefCell<T>.
    • RwLock<T>.
    • UnsafeCell<T>.

    所有这些内部都封装了 UnsafeCell<T>,这就是为什么它们不会被此 捕获。

  2. 不支持 async 函数。

  3. 不支持 &self&mut self

依赖项

~0.7–11MB
~68K SLoC