Avatar ·

Pourquoi les structures de données récursives sont interdites en Rust et comment les créer correctement ?

Bonjour, collègues ! J'ai commencé à apprendre Rust et je suis tombé sur une erreur incompréhensible. Je veux créer une simple liste chaînée, comme en C ou Python : ```rust struct Node { value: i32, next: Node, // erreur : recursive type `Node` has infinite size } ``` Le compilateur dit : "recursive type `Node` has infinite size". Je comprends que Rust est strict sur les tailles des types, mais pourquoi est-ce un problème ? En C, je peux faire `struct Node { int value; struct Node* next; }` — là, c'est un pointeur, et ça marche. En Python, on peut même stocker un objet en lui-même. Pourquoi Rust interdit-il une telle récursion ? Et comment faire alors des listes, des arbres et autres structures récursives ? J'ai entendu parler de `Box`, mais je ne comprends pas pourquoi cela résout le problème. Expliquez-moi, s'il vous plaît, en termes simples avec des exemples. Merci d'avance ! <<>>

Pourquoi Rust interdit-il la récursion directe ?

Le problème est que Rust doit connaître la taille exacte de chaque type au moment de la compilation. Lorsque vous écrivez next: Node, le compilateur essaie de calculer