Ir al contenido principal

Rust: un vistazo más (3)

En Rust existe una propiedad llamada ``Ownership``, la cual es: la característica especial que permite a Rust garantizar la seguridad de la memoria sin necesidad de un recolector de basura.

Ownership: es el un conjunto de reglas que rigen la forma en que un programa de Rust administra la memoria.

Esta característica permite que la memoria se administre a través de un sistema de propiedad con un conjunto de reglas que el compilador verifica. Si se viola alguna de las reglas, el programa no se compilará.

Heap, Stack y Garbage collection

  • Heap:  son secciones de memoria que se utilizan para almacenar datos en un programa.
  • Stack: es una estructura simple que se usa para variables locales y llamadas a funciones.
  • Garbage collection: es un recolector de basura, un proceso automático que libera memoria de un programa.

Reglas básicas de Ownership

  • Cada valor en Rust tiene un propietario ; si se transfiere la propiedad (move), el propietario anterior pierde acceso. 
  • Solo puede haber un propietario a la vez. 
  • Cuando el propietario queda fuera del ámbito, el valor se elimina.

Ownership es un concepto clave que gestiona la memoria de forma segura y eficiente sin necesidad de un recolector de basura. La idea principal es que cada valor en Rust tiene un único "propietario" (owner) en un momento dado, y cuando ese propietario sale del ámbito (scope), el valor se libera automáticamente.

Tengamos un caso como el siguiente:

fn main() {
    let s1 = String::from("Hola"); // s1 es el propietario del valor "Hola"
    let s2 = s1;                   // La propiedad se transfiere (move) a s2, s1 ya no es válido
    println!("{}", s2);           // Funciona, imprime "Hola"
    // println!("{}", s1);        // Esto daría error, porque s1 ya no tiene la propiedad
}

En este caso, s1 transfiere la propiedad del String a s2. Si intentamos usar s1 después, Rust nos lo impide en tiempo de compilación para evitar errores de memoria.

Si queremos usar un valor sin transferir propiedad, puedes usar referencias (&) o clonar el dato con .clone(). Veamos el mismo código, pero usando referencias.

fn main() {
    let s1 = String::from("Hola"); // s1 es el propietario
    let s2 = s1.clone();           // s2 obtiene una copia de "Hola", s1 sigue siendo propietario de su instancia
    println!("{}", s2);           // Imprime "Hola" (copia)
    println!("{}", s1);           // Imprime "Hola" (original)
}

s2 tiene su propia copia del valor, y s1 no se ve afectado. A diferencia del ejemplo original con move, ambos son accesibles.

  • Referencia (&): Presta el valor, sin copiar, más eficiente. 
  • Clonación (.clone()): Crea una copia nueva, más costoso pero independiente.

Continuaremos con Rust en próximas entregas.

Enlaces:

https://www.rust-lang.org
https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html

Comentarios

Entradas populares de este blog

Odin language: el lenguaje de programación orientado a datos para un desarrollo de software sensato

En esta serie sobre lenguajes de programación hablamos de Odin , un lenguaje orientado a datos. Un nuevo lenguaje de programación que nos podrá recordar a lenguajes como C++, Python, Golang o hasta Rust. Instalación (Windows): 1 2 3 4 $ git clone https://github.com/odin-lang/Odin $ cd Odin $ git pull $ build.bat release Debemos asegurarnos de crear la variable de entorno: Nombre: ODIN_HOME Valor: C:\Users\HP\Documents\pruebasOdin\Odin Ejemplo 1. Como primer programa tendremos al clásico "Hola, mundo". holamundo.odin package holamundo import " core:fmt " main : : proc ( ) { fmt . println ( " ¡Hola, mundo desde Odin! " ) } Construimos: $ odin build holamundo . odin - file Ejecutamos: $ holamundo .exe Recordar que si usamos Visual Studio Code podemos instalar el plugin de Odin Language: https://marketplace.visualstudio.com/items?itemName=DanielGavin.ols Ejemplo 2. Programa que muestre las variables que pod...

Programación Windows Batch (CMD) parte 3

Crear ciclos para efectuar operaciones tediosas nos ahorrará tiempo para realizar otras tareas. En está ocasión veremos ciclos con FOR . ¿Cuál es la síntaxis de bucle FOR en Windows Batch? Si está dentro de un archivo *.bat : FOR %%variable IN (seq) DO operaciones Si lo ejecutamos en una terminal: FOR %variable IN (seq) DO operaciones Ejemplo 1 . Recorrer una secuencia de números del 0 al 5: recorrer.bat @ echo off FOR %%i in ( 0 1 2 3 4 5 ) DO echo Hola no. %%i pause Nos imprimirá en pantalla: Hola no. 0 Hola no. 1 Hola no. 2 Hola no. 3 Hola no. 4 Hola no. 5 ¿Puedo usar contadores? Si, se pueden usar. Ejemplo 2 . Uso de contadores: contador.bat @ echo off set numeros = 1 2 3 4 5 6 7 8 9 10 set cont = 0 for %%a in ( %numeros% ) do ( echo Hola no. %%a :: Contador set /a cont+ = 1 ) echo Total: %cont% Este código nos imprimirá, además de los mensajes Hola no. 0 ..., el total de valores conta...

z/OS, ¿Qué es? y ¿Cuáles son sus herramientas?

  En este post veremos las herramientas de z/OS de IBM. z/OS es un sistema operativo de mainframe desarrollado por IBM.  Es parte de la serie IBM z Systems (anteriormente conocida como System z), que se utiliza en los sistemas mainframe de IBM. z/OS es uno de los sistemas operativos más utilizados en el mundo empresarial para ejecutar aplicaciones críticas y procesar grandes volúmenes de datos. Características clave de z/OS: Escalabilidad : z/OS es conocido por su capacidad para manejar grandes cargas de trabajo y escalabilidad vertical, lo que permite agregar recursos de hardware para satisfacer las demandas de procesamiento. Confiabilidad y disponibilidad : z/OS está diseñado para ofrecer alta disponibilidad y confiabilidad. Incorpora características como redundancia y recuperación ante fallas para garantizar la continuidad de las operaciones. Seguridad : Proporciona una amplia gama de funciones de seguridad, como autenticación, autorización y auditoría, para proteger los...