La promesa de Rust
Qué comprueban ownership y los préstamos, qué errores siguen siendo posibles y por qué seguridad de memoria no significa ausencia de costes de ejecución.
Una herramienta puede compilar y aun así producir un informe equivocado. Otra puede ser rechazada antes de ejecutarse porque intenta usar un dato cuya propiedad ya transfirió. Para entender la promesa de Rust necesitamos distinguir esas dos situaciones.
Rust ofrece seguridad de memoria en código seguro, apoyándose en comprobaciones del compilador y abstracciones de biblioteca. Las implementaciones que usan unsafe deben mantener los contratos que hacen seguras sus interfaces. Esta garantía no equivale a demostrar que el programa cumple todos los requisitos de su usuario.
Una transferencia que el compilador comprueba
fn main() { let original = String::from("informe"); let recibido = original; println!("{recibido}"); // println!("{original}"); // Error E0382 al descomentar esta línea.}String posee un almacenamiento para su texto. La asignación transfiere la propiedad a recibido; el binding original deja de poder usarse. El compilador rechaza ese uso posterior. Más adelante seguirás la transferencia paso a paso y aprenderás a prestar acceso cuando necesites conservar el valor.
La comprobación estática de propiedad no necesita un contador que vigile este movimiento durante la ejecución. Crear el texto y liberar su almacenamiento sí realizan trabajo en ejecución.
Compilar no demuestra el resultado
fn main() { let precio = 10; let cantidad = 3; let total = precio + cantidad; println!("Total: {total}");}Este programa compila e imprime 13. Si el contrato era calcular el precio de tres unidades, el resultado esperado era 30. El sistema de tipos admite ambas operaciones con enteros; comprobar cuál satisface el problema requiere ejemplos y pruebas.
También siguen siendo posibles fugas de memoria, interbloqueos y condiciones de carrera lógicas. Una carrera de datos es una categoría más específica de acceso concurrente incorrecto; evitarla no resuelve todos los problemas de concurrencia.
Comprobación estática y trabajo en ejecución
| Mecanismo | Qué ocurre |
|---|---|
| Análisis de propiedad y préstamos | El compilador comprueba si los usos del dato respetan las reglas. |
| Asignación y liberación de memoria | El programa solicita y devuelve almacenamiento durante la ejecución. |
| Indexación segura de un slice | Comprueba los límites; un índice inválido puede provocar un pánico. El optimizador puede eliminar comprobaciones que demuestre innecesarias. |
RefCell |
Comprueba reglas de préstamo durante la ejecución. Se estudiará cuando necesitemos mutabilidad interior. |
Rc y Arc |
Mantienen contadores de referencias; compartir propiedad tiene costes propios. |
Rust no exige un recolector de basura para gestionar los valores ordinarios. Eso no elimina el trabajo de los asignadores, destructores ni bibliotecas. Tampoco garantiza que cualquier programa Rust sea más rápido que su equivalente en otro lenguaje. Las decisiones de representación y los resultados de medición importan.
Comprueba la distinción
- Predice qué sucede si descomentas el uso de
original: ¿falla la compilación o cambia la salida? - Ejecuta el cálculo del total. Define un ejemplo que muestre por qué compilar no basta para satisfacer el contrato.
- Clasifica el análisis de préstamos y la liberación del buffer según cuándo ocurren.
Estas tareas son práctica de lectura y ejecución manual. La lección todavía no tiene actividades evaluadas que registren evidencia de estas capacidades.