StackSafe
StackSafe prevents stack overflows in deeply recursive algorithms by providing intelligent stack management. No more crashes from recursive functions or data structures that exceed the default stack size - StackSafe automatically allocates additional stack space when needed, eliminating the need for manual stack size tuning or complex refactoring to iterative approaches.
Quick Start
Add StackSafe to your Cargo.toml
:
[]
= "0.1"
Transform recursive functions with the #[stacksafe]
attribute to prevent stack overflow:
use stacksafe;
// No stack overflow, even for deep recursion
println!;
Recursive Data Structures
Use StackSafe<T>
to wrap recursive data structures and prevent stack overflow during traversal:
use ;
How It Works
-
#[stacksafe]
attribute monitors remaining stack space at function entry points. When available space falls below a threshold (default: 128 KiB), it automatically allocates a new stack segment (default: 2 MiB) and continues execution. -
StackSafe<T>
is a wrapper type that transparently implement common traits likeClone
,Debug
, andPartialEq
with#[stacksafe]
support, allowing you to use it in recursive data structures without losing functionality.
Configuration
Customize stack management behavior:
use ;
// Trigger allocation when < 64 KiB remaining (default: 128 KiB).
set_minimum_stack_size;
// Allocate 4 MiB stacks for deep recursion (default: 2 MiB).
set_stack_allocation_size;
Feature Flags
StackSafe supports several optional features:
serde
: Provides stack-safe serialization and deserialization forStackSafe<T>
.derive-visitor
: Provides stack-safe visitor pattern implementations forStackSafe<T>
.
Platform Support
StackSafe works on all major platforms supported by the stacker
crate, including:
- Linux (x86_64, ARM64, others)
- macOS (Intel, Apple Silicon)
- Windows (MSVC, GNU)
- FreeBSD, NetBSD, OpenBSD
- And more...
License
This project is licensed under the Apache-2.0 license.
Acknowledgments
Inspired by the the excellent recursive
by Orson Peters.