Saltar al contenido principal

Rustup, Rustc, Cargo y Crates

rustup

Herramienta para instalar y administrar Rust (versiones, actualizaciones, canales, etc.)

  • Se instala en ~/.cargo/bin e incluye rustc, cargo y rustup
  • Similar a nvm/fnm en Node o pyenv en Python
# Actualización
rustup update stable # Actualizar Rust
rustup update # Atajo

# Información y desinstalación
rustup --version
rustup self uninstall # Desinstalar Rust completamente
rustup doc # Documentación local de Rust

rustc

Compilador de Rust

rustc --version

Compilación manual. Para proyectos simples, sin Cargo.toml.

fn main(){
println!("Hello, World!");
}
# 1. Compilar
rustc <filename.rs> # Ejemplo: rustc hello.rs

# 2. Ejecutar
./<filename> # Ejemplo: ./hello

# Una sola línea
rustc <filename.rs> && ./<filename>

Cargo

Herramienta oficial de compilación y administrador de paquetes de Rust. Se instala automáticamente con rustup.

Archivos de configuración

  • Cargo.toml: Manifiesto del proyecto (metadatos y dependencias).
  • Cargo.lock: Registro automático de versiones exactas.
  • main.pdb: Información de depuración del proyecto.

Semantic Versioning (MAJOR.MINOR.PATCH)

  • PATCH (0.8.5 → 0.8.6): Corrección de errores, totalmente compatible
  • MINOR (0.8.5 → 0.9.0): Nuevas funciones, compatible hacia atrás
  • MAJOR (0.8.x → 1.0.0): Cambios incompatibles

Ejemplo Cargo.toml

Cargo.toml
[package]
name = "app-name"
version = "0.1.0"
edition = "2024"

[dependencies]
tokio = { version = "1.45.0", features = ["full"] }
serde = { version = "1.0.209", features = ["derive"] }
serde_json = "1.0.127"

Crear y compilar proyectos

# Crear nuevo proyecto
cargo new <project-name> # En nueva carpeta
cargo init # En carpeta actual

# Solo compilar
cargo build # Modo debug (target/debug)
cargo build --release # Modo release con optimizaciones (target/release)
cargo build -r # Atajo para --release

# Compilar y ejecutar
cargo run # Debug
cargo run --release # Release
cargo run -r # Atajo para --release

Nota: Después de cargo build, el binario se debe ejecutar manualmente:

  • Debug: ./target/debug/<app-name>
  • Release: ./target/release/<app-name>

Agregar dependencias

cargo add <package1> <package2>              # Dependencia simple
cargo add <package> -F <feature1> # Con características
cargo add <package> -F <feature1> <feature2> # Múltiples características
cargo add <package1> <package2/feature1> <package2/feature2> # Múltiples paquetes

Actualizar dependencias

# Actualizar a versiones menores compatibles
cargo update # v0.8.5 -> v0.8.6

Para versiones mayores, modificar Cargo.toml manualmente: rand = "0.8.5"rand = "0.9.0"

Utilidades

cargo check         # Análisis rápido sin generar binario
cargo test # Ejecutar pruebas
cargo doc # Generar documentación
cargo doc --open # Generar y abrir documentación
cargo --version # Ver versión de Cargo

Flujo de trabajo típico

  • Crear: cargo new <project-name>
  • Dependencias: cargo add <package>
  • Desarrollo: cargo check / cargo run
  • Testing: cargo test
  • Producción: cargo build --release

Crates

Los paquetes en Rust se llaman crates (bibliotecas, módulos o programas completos).

  • Repositorio oficial: crates.io (lib.rs es una alternativa no oficial)
  • Crates de biblioteca (lib): Funciones y estructuras reutilizables
  • Crates de ejecutable (bin): Programas compilados ejecutables