[][src]Crate tailcall

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.

This example deliberately fails to compile
use tailcall::tailcall;
   
#[tailcall]
fn factorial(input: u64) -> u64 {
    if input > 0 {
        input * factorial(input - 1)
    } else {
        1
    }
}

Attribute Macros

tailcall

Transforms a function definition so that all recursive calls within the body are guaranteed to use a single stack frame (via tail recursion).