🦀


Lenguaje Rust

Programación I

Ing. Hugo Acosta · hugonex.com

Qué es Rust?

Historia

Rust es un lenguaje de programación creado por Graydon Hoare dentro del programa de Mozilla Research que empezó a trabajarlo en el año 2006.

Mozilla - Chriss Hoffman

Mozilla - Mitchel Baker

Mozilla - Whistler, Canada

Mozilla - Toronto, Canada

Mozilla - Berlin, Alemania

Concepto

Rust es un lenguaje de programación compilado, de propósito general y multiparadigma. Ha sido diseñado para ser 'un lenguaje seguro, concurrente y práctico", soportando programación funcional pura, por procedimientos, imperativa y orientada a objetos.
Rust 1.0 lanzado en Mayo, ya tiene una comunidad vibrante, un creciente ecosistema de crates (https://crates.io/) en su gestor de paquetes y desarrolladores que aprovechan sus capacidades en una variedad de proyectos

Porqué otro lenguaje de programación?

Necesidades intermedias

C/C++ Java Python
más control,
menos seguridad
menos control,
más seguridad
Rust

Más control, más seguridad.

Características

  • Memoria segura
  • Modelo de propiedad
  • Abstracciones de cero costo
  • Concurrencia y Paralelismo
  • Tiempo mínimo de ejecución
  • Sin recolector de basura

Modelo de propiedad (Ownership)

El principio básico del modelo de propiedad de Rust es que cada recurso puede pertenecer a un y sólo un "dueño".

🧠 Ownership — en código


fn main() {
    let mochila = String::from("mis cosas");
    let amigo = mochila; // ⚠️ propiedad transferida

    println!("{}", mochila); // ❌ ERROR: ya no te pertenece
}
					

✅ El compilador avisa antes de ejecutar. En C, esto sería un bug silencioso.

🤝 Borrowing — préstamo sin ceder dueño


fn main() {
    let mochila = String::from("mis cosas");
    ver_contenido(&mochila); // 👀 préstamo de solo lectura
    println!("Sigue siendo mía: {}", mochila); // ✅
}

fn ver_contenido(m: &String) {
    println!("Contenido: {}", m);
} // préstamo termina aquí
					

El & indica préstamo. La función puede ver el dato, pero no destruirlo.

Abstracciones de cero costo

  • Se compila directamente a código binario optimizado para el hardware, igual que C o C++.
  • Abstracciones de costo cero: Permite escribir código de alto nivel (con iteradores, closures, patrones) que, una vez compilado, se traduce exactamente a la misma instrucción que escribirías a mano si fueras eficiente. No hay sobrecarga de virtualización ni llamadas extra.

⚡ Zero-cost abstractions — en código


let numeros = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// Solo pares, multiplicados por 2
let resultado: Vec<i32> = numeros
    .iter()
    .filter(|&&x| x % 2 == 0)  // 👈 Solo pares
    .map(|&x| x * 2)            // 👈 x2
    .collect();

println!("{:?}", resultado); // [4, 8, 12, 16, 20]
					

Elegante como Python, rápido como C. El compilador lo optimiza igual que un bucle manual.

Sin recolector de basura

Esta es su característica más famosa y única. En lenguajes como Java, Python o JavaScript, un sistema interno (Garbage Collector) limpia la memoria automáticamente, lo cual genera pausas imprevistas. En C o C++, vos gestionás la memoria manualmente, lo cual es rápido pero propenso a errores (fugas de memoria o accesos a memoria ya liberada).Rust resuelve esto con un modelo de tres reglas llamado "Ownership Model"

Concurrencia y Paralelismo

El compilador prohíbe los problemas de concurrencia básicos. El sistema de tipos permite compartir datos entre hilos solo si el hilo es seguro para hacerlo (Send y Sync).

🏎️ Concurrencia segura — en código


use std::sync::{Arc, Mutex};
use std::thread;

fn main() {
    let contador = Arc::new(Mutex::new(0));
    let mut hilos = vec![];

    for _ in 0..10 {
        let c = Arc::clone(&contador);
        hilos.push(thread::spawn(move || {
            let mut num = c.lock().unwrap(); // 🔒
            *num += 1;
        })); // 🔓 libera automáticamente
    }
    for h in hilos { h.join().unwrap(); }
    println!("Resultado: {}", *contador.lock().unwrap()); // siempre: 10
}
					

Sin Mutex, Rust no compila. La seguridad es obligatoria, no opcional.

Enlaces a variables


   fn main() {
	   let x = 5;
   }
        			
        		

Let es un patron


  	let (x, y) = (3, 4);
        			
        		

Inferencia de tipos

Rust es un lenguaje estáticamente tipificado, lo que significa que especificamos nuestros tipos por adelantado, y estos son chequeados en tiempo de compilación.

  	let x = 5;
        			
        		

Si puede determinar el tipo de algo, Rust no requiere
que escribas el tipo.

Mutable o no?

El estado mutable compartido es la raíz de todos los males. La mayoría de los lenguajes tratan de hacer frente a este problema a través de la parte mutable, pero Rust trata con él mediante la resolución de la parte compartido.

Mutabilidad


  	let a = 4;
	a = 5; // error!
        			
        		

  	let mut a = 4;
	a = 5; // ok
        			
        		

¿Quién usa Rust?

Rust usa Rust!

  • 92% Rust
  • 3.6% C (Bibliotecas agrupadas)
  • 1.6% Shell script
  • 3.0% otros

🏢 Las grandes apuestan por Rust

🔵 Meta Herramientas de backend y compiladores internos
🟢 Google Código en Android y el kernel de Linux
🟦 Microsoft Reescribiendo partes críticas de Windows en Rust
🟠 Amazon Firecracker (motor de AWS Lambda) escrito en Rust
🐧 Linux Rust es el 2do lenguaje oficial del kernel

🏆 El lenguaje más amado

Rust lleva 9 años consecutivos siendo el lenguaje más amado según la encuesta anual de Stack Overflow. Los que lo aprenden, no quieren volver atrás.

💼 Rust y tu carrera

  • Desarrolladores Rust están entre los mejor pagados del mundo
  • Demanda creciente en sistemas, ciberseguridad, WebAssembly e IoT
  • Rust te enseña a pensar en memoria como ningún otro lenguaje
  • Diferenciador en CVs: todavía pocos lo dominan
  • Proyectos open source donde puedes contribuir hoy: crates.io

Pero y yo que hago con esto?

Internet of Things

Con un lenguaje adecuado

Rust es compatible con una amplia variedad de plataformas exóticas. Mientras que algo de esto es todavía experimental, el soporte incluye hardware ARM genérico, el tablero de desarrollo TIVA de Texas Instruments, e incluso el Raspberry Pi. Algunas de las nuevas tablas de IoT como el Tessel 2, ¡vienen con soporte oficial para Rust!

Si no entendemos aun sobre IoT

Multiples nucleos?

Los estudios sugieren que Rust ya es bueno para HPC (computación de alto rendimiento). Incluso no tienes que reescribir toda tu aplicación en Rust: su flexible interfaz para funciones foráneas (FFI) proporciona enlaces de C eficientes que te permiten exponer y llamar código Rust sin ninguna sobrecarga notable.
Rust es ideal para reescribir partes sensibles al rendimiento de tu aplicación. Se conecta bien con otros lenguajes a través de FFI y tiene un pequeño tiempo de ejecución que compite con C y C ++ en la mayoría de los casos, incluso cuando los recursos son limitados.

Sip! También podés hacer aplicaciones web

También! podés hacer Apps para Android e iOS

Recomendado por papá Elon Musk

Instalando Rust

Un solo comando 🚀


curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
					

Instala rustup: el gestor oficial de versiones de Rust

  • Funciona en Linux, Mac y Windows
  • Incluye rustc (compilador) y cargo (gestor de paquetes)
  • En Windows: descarga desde rustup.rs

Código?

Hola mundo


  	fn main() {
            println!("¡Hola, mundo!");
	}
        			
				

FizzBuzz

en C

en Python

en Rust

Youtuber Frustrado

https://www.youtube.com/@hnexcode

Pero.. Barak Obama me sigue en X

🦀


Presentación · hugonex.com/rust

Ing. Hugo Acosta

yo@hugonex.com

📚 Recursos: The Rust Book · Rustlings · crates.io