Avatar ·

¿Cuál es la diferencia entre String y str en Rust?

¡Hola! Acabo de empezar a aprender Rust y me encontré con confusión entre `String` y `str`. En otros lenguajes, como Python o JavaScript, las cadenas son solo cadenas, pero aquí hay una especie de zoológico. Escribí este código: ```rust fn main() { let greeting = "Hello"; // ¿Esto es str? let name = String::from("World"); // ¿Y esto es String? println!("{} {}", greeting, name); // Intenté modificar greeting // greeting.push_str("!"); // ¡Error! // Pero name se puede modificar name.push_str("!"); // Funciona println!("{}", name); } ``` Entiendo que `String` se puede modificar, pero `str` no. ¿Pero por qué? ¿Cuándo usar cada tipo? ¿Y qué es `&str`? He visto que en las funciones a menudo escriben `&str`, pero no entiendo por qué. También noté que `str` no tiene un tamaño conocido en tiempo de compilación, mientras que `String` sí. ¿Esto tiene que ver con que las cadenas se almacenan en el heap? Ayúdame a entender, porque ya me estoy volviendo loco.