Biblioteca estándar de Rust: revisión completa
La biblioteca estándar de Rust (std) es la base sobre la que se construye cualquier aplicación en este lenguaje. Proporciona un conjunto de herramientas robustas, eficientes y seguras para resolver tareas típicas, desde trabajar con colecciones hasta la gestión de memoria de bajo nivel. A diferencia de muchos otros lenguajes, la biblioteca estándar de Rust está diseñada para minimizar la dependencia de crates externos para operaciones básicas, manteniendo al mismo tiempo un rendimiento cercano a C/C++.
Módulos principales de la biblioteca estándar
La biblioteca estándar está organizada en módulos lógicos. Veamos los más importantes:
std::collections— estructuras de datos:Vec,HashMap,HashSet,BTreeMap,LinkedListy otras.std::io— trabajo con entrada/salida: lectura/escritura de archivos, trabajo con flujos, buffering.std::fs— sistema de archivos: creación, eliminación, copia de archivos y directorios.std::thread— multitarea: creación de hilos, sincronización medianteMutex,Arc.std::sync— primitivas de sincronización: canales (mpsc), barreras, semáforos.std::net— programación de red: sockets TCP/UDP, direcciones.std::time— trabajo con tiempo: mediciones, temporizadores, duraciones.std::mem— gestión de memoria: tamaños de tipos, alineación,swap,replace.
Colecciones: de Vec a HashMap
Las colecciones en Rust no son solo contenedores. Implementan una API rica y garantizan la seguridad de la memoria en tiempo de compilación. La colección más popular es Vec<T>, un arreglo dinámico.
fn main() { let mut numbers: Vec<i32> = vec![1, 2, 3, 4]; numbers.push(5); // Iteración con modificación for num in &mut numbers { *num *= 2; } // Filtrado let evens: Vec<&i32> = numbers.iter() .filter(|&&x| x % 2 == 0) .collect(); println!("{:?}", evens); // [2, 4, 6, 8, 10]}HashMap es un arreglo asociativo con hashing. Es importante destacar que por defecto se utiliza un algoritmo hash criptográficamente seguro (SipHash), lo que previene ataques HashDoS.
use std::collections::HashMap;
fn main() { let mut scores = HashMap::new(); scores.insert(String::from("Alice"), 100); scores.insert(String::from("Bob"), 85); // Obtención segura del valor match scores.get(&String::from("Alice")) { Some(score) => println!("Score: {}", score), None => println!("No encontrado"), } // Recorrido con iterador for (name, score) in &scores { println!("{}: {}", name, score); }}Trabajo con entrada/salida y archivos
El módulo std::io proporciona tanto herramientas de alto nivel como de bajo nivel para trabajar con flujos de datos. Merecen especial atención los traits Read y Write.
use std::fs::File;use std::io::{self, Read, Write};
fn read_file(path: &str) -> io::Result<String> { let mut file = File::open(path)?; let mut contents = String::new(); file.read_to_string(&mut contents)?; Ok(contents)}
fn write_file(path: &str, data: &str) -> io::Result<()> { let mut file = File::create(path)?; file.write_all(data.as_bytes())?; Ok(())}
fn main() -> io::Result<()> { write_file("example.txt", "Hello, Rust También en la biblioteca
Wolverine C# (.NET): guía completa con ejemplos prácticos
ORM para Java: comparación de Hibernate, MyBatis, JPA y Spring Data
Trabajo con Markdown en Kotlin: bibliotecas, análisis y generación
Criptografía en Kotlin: cifrado y hash con ejemplos