Avatar ·

¿Por qué están prohibidas las estructuras de datos recursivas en Rust y cómo crearlas correctamente?

¡Hola, colegas! Empecé a estudiar Rust y me encontré con un error que no entiendo. Quiero hacer una lista enlazada simple, como en C o Python: ```rust struct Node { value: i32, next: Node, // error: recursive type `Node` has infinite size } ``` El compilador dice: "recursive type `Node` has infinite size". Entiendo que Rust es estricto con los tamaños de los tipos, pero ¿por qué es esto un problema? En C puedo hacer `struct Node { int value; struct Node* next; }` — ahí hay un puntero y funciona. En Python incluso se puede almacenar un objeto dentro de sí mismo. ¿Por qué Rust prohíbe tal recursión? ¿Y cómo entonces hacer listas, árboles y otras estructuras recursivas? He oído sobre `Box`, pero no entiendo por qué resuelve el problema. Explíquenlo, por favor, en palabras simples con ejemplos. ¡Gracias de antemano! <<>>

¿Por qué Rust prohíbe la recursión directa?

El problema es que Rust necesita saber el tamaño exacto de cada tipo en tiempo de compilación. Cuando escribes next: Node, el compilador intenta calcular