El Ownership es una característica fundamental del lenguaje que se utiliza para gestionar la asignación y liberación de memoria de manera segura y prevenir errores.
Es fundamental para los programadores rastrear la memoria, ya que no hacerlo puede resultar en una "fuga de memoria" - (Leak). Rust utiliza un modelo de "propiedad" conocido como Ownership para gestionar la memoria.
El Ownership (propiedad) en Rust nos permite tener un control extremadamente preciso sobre la gestión de la memoria, garantizando la seguridad y la prevención de errores de acceso a la memoria en tiempo de ejecución.
En Rust, la memoria se puede "mover" (move) o "tomar prestada" (borrowed).
enum Light { Bright, Dull, } fn display_light(light: Light) { match light { Light::Bright => println!("bright"), Light::Dull => println!("dull"), } } fn main() { let dull = Light::Dull; display_light(dull); display_light(dull); // will not work }
En este ejemplo, el valor asignado a la variable dull
se "moverá" al ámbito de la primera función display_light
que se ejecuta. Como resultado, ya no está disponible en el ámbito de la función main. Cuando se intenta ejecutar la segunda función display_light
, el valor de la variable dull
ya no está disponible.
enum Light { Bright, Dull, } fn display_light(light: &Light) { match light { Light::Bright => println!("bright"), Light::Dull => println!("dull"), } } fn main() { let dull = Light::Dull; display_light(&dull); display_light(&dull); }
En este segundo ejemplo, agregamos el símbolo &
.
El símbolo &
indica una referencia (puntero) a una instancia de Light. En otras palabras, estamos "prestando" el valor de dull
a la ejecución de cada función display_light
, en lugar de moverlo. Esto permite que el valor de dull siga estando disponible después de llamar a la función display_light
.