#memoization #first #variant #foo #bar #ifuncs #foo-big

ifunky

提供在首次调用时选择一个变体(并缓存该选择)的函数,类似于无需加载器支持的 ifuncs

2 个版本

使用旧的 Rust 2015

0.1.1 2015年11月14日
0.1.0 2015年11月14日

#37#memoization

MIT 许可证

4KB
77

使用方法

Cargo.toml

[dependencies]
ifunky = "0.1"

您的代码

#[macro_use]
extern crate ifunky;

ifunky! {
    // Declare your function signature
    pub fn foo(x: u32) -> u32 {
        // And write a dispatcher that will be
        // invoked the first time the function is called
        if rand::random::<bool>() {
            foo_big as fn(u32) -> u32
        } else {
            foo_bigger as fn(u32) -> u32
        }
    }

    // That's it!

    pub fn bar(x: u32) -> u32 {
        if rand::random::<bool>() {
            bar_small as fn(u32) -> u32
        } else {
            bar_smaller as fn(u32) -> u32
        }
    }
}

fn main() {
    foo(3);
    bar(7);
}

fn foo_big(x: u32) -> u32 {
    x + 1
}

fn foo_bigger(x: u32) -> u32 {
    (x + 1) * 2
}

fn bar_small(x: u32) -> u32 {
    x - 1
}

fn bar_smaller(x: u32) -> u32 {
    (x - 1) / 2
}

无运行时依赖