Cuando programa con Rust, generalmente no necesita administración de memoria manual. De hecho, Rust ofrece diferentes conceptos y artefactos de gestión de memoria de bajo nivel que los de C, a saber, uno de ellos es:
El modelo de propiedad
Una de las principales fuentes de bloqueos y explotaciones de software escritos en C son los punteros colgantes. Hay otros problemas con los punteros, pero centrémonos en los punteros colgantes por ahora. En la gestión de memoria manual, uno necesita liberar la memoria manualmente. Es un problema difícil.
Un ejemplo: tienes un puntero p asignado. Por supuesto, si no necesita la memoria durante todo el tiempo de ejecución del software, debe liberarla. Esto es importante para software de larga duración como servidores. Esto no suele ser difícil. Solo libera p , cuando hayas terminado con ello. ¿O no?
- Quiero aprender budismo y busco una guía espiritual o un maestro zen que pueda ayudarme a aprender, meditar y practicar las formas budistas en mi vida. ¿Cómo puedo hacer esto?
- Soy de un fondo de comercio. Quiero desarrollar una aplicación. ¿Cómo debo empezar?
- Al igual que la caligrafía, ¿cuáles son algunas otras habilidades artísticas interesantes que se pueden aprender en cualquier momento?
- ¿Cuál es el mejor enfoque para enseñar a un niño de 7 años de edad a aprender las tablas de multiplicar?
- ¿Qué piensas de cómo los hablantes no nativos aprenden inglés?
Pero, ¿qué sucede si necesita usar el puntero en dos lugares diferentes de su programa? ¿Asignar p a un miembro de estructura y devolverlo desde una función? Esto abre una lata de gusanos.
Cuando el que llama a la función libera la copia de p , el miembro de la estructura se convierte en un puntero colgante. Por supuesto, la persona que llama necesita saber para establecer el miembro de la estructura en NULL, pero esto se olvida a menudo.
Y listo tenemos un nuevo exploit.
Rust resuelve este problema con el modelo de propiedad. Muchas bibliotecas de C ya tienen un concepto suelto de propiedad. El propietario es responsable de liberar el puntero. Un ejemplo en FFMPEG 2.7 aquí: AVPacket Struct Reference.
Esto funciona bien, pero si ningún compilador hace cumplir las reglas, abundan los errores estúpidos. Después de todo, los programadores son humanos y cometen errores.
El compilador Rust impone algunas reglas con el modelo de propiedad. Para más detalles, lea la fuente que se proporciona a continuación. Aquí solo doy un resumen de alto nivel de los fundamentos del modelo de propiedad tal como lo he entendido como un programador en C experimentado. No soy un programador experimentado de Rust.
Se dice que los programadores tienen que pagar un precio cuando programan con Rust. Si bien no necesitan administrar la memoria manualmente, tienen que luchar con el verificador de préstamos de Rust.
Esto puede ser frustrante, esta pelea, pero cuando un programa finalmente se compila sin bloqueos inseguros, se garantiza que no habrá punteros colgando. Y Rust no necesita verificaciones en tiempo de ejecución. No hay penalizaciones de rendimiento. Todo el trabajo se realiza en tiempo de compilación. Este es el poder de la comprobación forzada de reglas de tiempo de compilación.
Por favor, nuevamente, lea la fuente acerca de lo que hace exactamente el verificador de préstamos.
Fuente: https://doc.rust-lang.org/book/o…