Recolector de basura en Rust

Nilesh Katuwal 7 junio 2022
Recolector de basura en Rust

Este artículo enseñará qué usa Rust en lugar de un recolector de basura.

Recolección de basura en Rust

Rust es un lenguaje de programación de propósito general. En lugar de un recolector de basura, Rust logra estas propiedades a través de un sistema de tipos sofisticado pero complejo.

Esto hace que Rust sea extremadamente eficiente pero relativamente difícil de aprender y usar.

Por lo general, la recolección de elementos no utilizados se realiza de forma periódica o según sea necesario, como cuando el montón de elementos no utilizados está casi lleno o supera un cierto umbral. Dependiendo del algoritmo, luego busca variables no utilizadas y libera su memoria.

Por ejemplo, Rust insertaría las instrucciones LLVM/assembly correspondientes para liberar la memoria cuando la variable deja el alcance del programa o su tiempo de vida expira en el momento de la compilación. Rust también admite técnicas de recolección de basura, como el conteo de referencias atómicas.

Usando un sistema de tipo afín, monitorea qué variable aún está reteniendo un objeto y llama a su destructor cuando expira el alcance de esa variable. El sistema de tipo afín se puede observar en la siguiente operación.

fn main() {
    let p: String = "Good Morning".into();
    let m = p;
    println!("{}", p);
}

Rendimientos:

<anon>:4:24: 4:25 error: use of moved value: `p` [E0382]
<anon>:4         println!("{}", p);

<anon>:3:13: 3:14 note: `p` moved here because it has type `collections::string::String`, which is moved by default
<anon>:3         let m = p;
                     ^

Los rendimientos anteriores demuestran perfectamente que la propiedad se rastrea en todo momento a nivel de idioma.

Rust emplea un enfoque relativamente novedoso para la gestión de la memoria que incorpora el concepto de propiedad de la memoria. Las pistas de Rust pueden leer y escribir en la memoria.

Detecta cuando el programa usa memoria y la libera cuando ya no es necesaria. Hace cumplir las reglas de memoria en tiempo de compilación, lo que hace que los errores de memoria en tiempo de ejecución sean prácticamente imposibles.

No hay necesidad de rastrear la memoria manualmente. En cambio, el compilador es responsable de ello.

La característica más distintiva de Rust, la propiedad, tiene profundas implicaciones para el resto del lenguaje. Es esencial comprender cómo funciona la propiedad porque permite que Rust brinde garantías de seguridad de la memoria sin un recolector de basura.

Rust adopta un enfoque diferente: la memoria se devuelve automáticamente cuando la variable que la posee sale del alcance.