Crate tailcall

source ·
Expand description

Tailcall is a library that adds safe, zero-cost tail recursion to stable Rust. Eventually, it will be superseded by the become keyword.

Usage

To guarantee that recursive calls a function will reuse the same stack frame, annotate it with the tailcall attribute.

use tailcall::tailcall;

fn factorial(input: u64) -> u64 {
    #[tailcall]
    fn factorial_inner(accumulator: u64, input: u64) -> u64 {
        if input > 0 {
            factorial_inner(accumulator * input, input - 1)
        } else {
            accumulator
        }
    }

    factorial_inner(1, input)
}

Recursive calls which are not in tail form will result in a compile-time error.

use tailcall::tailcall;
   
#[tailcall]
fn factorial(input: u64) -> u64 {
    if input > 0 {
        input * factorial(input - 1)
    } else {
        1
    }
}

Modules

  • This module provides a simple, zero-cost trampoline. It is designed to be used by the tailcall macro, but it can also be used manually.

Attribute Macros