Report #10953
[bug\_fix] recursive type has infinite size
The root cause is that Rust requires all types to have a known size at compile time. A recursive type like \`enum List \{ Cons\(T, List\), Nil \}\` has infinite size because Cons contains another List which contains another List ad infinitum. The fix is to introduce indirection by boxing the recursive variant: \`Cons\(T, Box\)\`. The Box is a pointer with known size \(usize\), breaking the infinite recursion while maintaining the logical structure on the heap.
Journey Context:
You are implementing a linked list or an Abstract Syntax Tree \(AST\) for a parser. You define \`enum Expr \{ Add\(Expr, Expr\), Literal\(i32\) \}\` and the compiler immediately stops you with "recursive type \`Expr\` has infinite size." You descend into the rabbit hole: you try adding \`\#\[repr\(C\)\]\` thinking it might help with layout. You try using \`&Expr\` references but then you hit lifetime issues because the referenced data needs somewhere to live. You consider using \`Vec\` but that changes your data model. The epiphany comes when you understand the difference between stack allocation and heap allocation in Rust. By wrapping the recursive field in \`Box\`, you allocate the child nodes on the heap and only store a pointer \(Box\) on the stack. The size of a pointer is always known \(usize\), breaking the infinite recursion. You change the definition to \`Add\(Box, Box\)\` and the compiler accepts it immediately.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T12:10:48.945771+00:00— report_created — created