Executando verificação de segurança...
4

No JavaScript, objetos são tratados como referência, mas tipos primitivos não (números e strings, por exemplo). No Rust, qualquer variável que eu utilize preciso tomar esse cuidado com ownership e borrowing ou apenas caso a variável seja uma struct?

Ótimo artigo, consegui entender bem mesmo sem nunca ter programado em Rust 🤝.

5

esqueci de mencionar que tipos que implementam Copy como referencias e numeros, ou você implementando usando o macro derive, ele copia o valor inves de mover. Mas se não implementar Copy ele vai mover a variavel por padrão, se tiver a sorte de implementar Clone, vocề pode usar o metodo clone, mas ai é explicito. Copy e Clone são traits, traits são como interfaces, se você implementar para alguma uma struct você precisa implementar todos os metodos da trait sem uma implementação padrão para a struct, ou se tiver um derive pode usar o macro #[derive(...)], bibliotecas normalmente tem macros derive para gerar implementações padrão, como o serde pra serializar e deserializar em qualquer formato, ou o bevy pra criar componentes e entidades.
E tambem se quiser você pode fazer referencias pra qualquer tipo, como str, ints e arrays/slices.
Só pra esclarecer, o rust tem 2 tipos de strings, tem a struct String, e &str.
String tem o ownership da string dentro, já &str é uma referencia pra uma string, o tipo primitivo str poderia ser utilizado sozinho, se ele tivesse um tamanho fixo conhecido em tempo de compilação, o que não é o caso, por isso "escondemos" atrás de uma referencia.

structs são parecidas com classes, com a diferença que não suportam herança, ele reforça polimorfismo sem herança, e as structs em rust podem ser uma tupla ou uma lista de chaves e valores como um obj no js, eu usei structs de tupla no exemplo para ser mais curto.

1