Avatar ·

Por que estruturas de dados recursivas são proibidas em Rust e como criá-las corretamente?

Olá, colegas! Comecei a estudar Rust e me deparei com um erro estranho. Quero fazer uma lista encadeada simples, como em C ou Python: ```rust struct Node { value: i32, next: Node, // erro: recursive type `Node` has infinite size } ``` O compilador diz: "recursive type `Node` has infinite size". Eu entendo que Rust é rigoroso quanto aos tamanhos dos tipos, mas por que isso é um problema? Em C, posso fazer `struct Node { int value; struct Node* next; }` — lá tem um ponteiro, e funciona. Em Python, posso até armazenar um objeto dentro de si mesmo. Por que Rust proíbe essa recursão? E como fazer listas, árvores e outras estruturas recursivas? Ouvi falar sobre `Box`, mas não entendo por que ele resolve o problema. Expliquem, por favor, em palavras simples com exemplos. Desde já, obrigado! <<>>

Por que Rust proíbe recursão direta?

O problema é que Rust precisa saber o tamanho exato de cada tipo em tempo de compilação. Quando você escreve next: Node, o compilador tenta calcular