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