Rust
Instalación y mantenimiento
rustup
rustup mantiene rust desde la fuente
| Opción | Descripción |
|---|---|
update |
actualiza la instalación |
self uninstall |
elimina rust del sistema |
--version |
devuelve la versión de rustc (compilador) |
doc --book |
devuelve el manual |
cargo
cargo actúa hace de compilador (rustc), gestor de dependencias, generador de paquetes y package manager y compilador.
Los paquetes en rust se llaman crates.
| Comandos | Descripción |
|---|---|
new name |
Crea un nuevo paquete con nombre name |
build |
Genera un ejecutable dentro de name/target/debug, con la información necesaria para debugging. Este ejecutable es más grande que el definitivo. Con el argumento --release genera la versión definitiva en name/target/release |
run |
cargo build + ejecuta el binario |
check |
Verifica que el programa sea compilable sin hacerlo |
fix |
--bin "name" arregla problemas menores en el código |
update |
Actualiza las dependencias a su última revisión menor (0.8.5) |
Proyecto
cargo new name genera un directorio principal con nombre name:
name
├── Cargo.toml
└── src
└── main.rs
- inicializa git en el directorio (
--vcspara evitarlo) - el directorio principal recoge
README, licencias, configuraciones… Cargo.tomlyCargo.lockson útiles en la gestión de dependencias
Cargo.toml
Cargo.toml define manualmente el nombre, la versión y la edición de rust que utiliza el paquete
[package]
name = "name"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
rand = "0.8.5"Las dependencias son los paquetes declarados en el preludio. rust busca las dependencia con el mismo número de revisión menor y el número de parche más alto disponible; cargo update actualiza las dependencias a la última revisión menor1.
Cargo.lock especifica las versiones utilizadas a la hora de compilar.
Sintaxis y estilo
rustfmt limpia el código de un archivo .rs para que se conforme a las reglas de estilo de Rust:
- indentación es de cuatro espacios
- las líneas terminan en
;(menos la última) - los bloques de código están delimitados por
{ } /* Comentario dentro de una línea */// Bloque de comentario/// Documentación del bloque siguiente///! Documentación del bloque contenedor- las librerías se declara en el preludio con
use - los macros se denotan con
!(macro!)
El preludio precede a la función main(); a traves de use declara las librerías que van a utilizarse.
main.rs
use rand::Rng;
fn main() {
let secret_number = rand::thread_rng().gen_range(1..=100);
println!("The secret number is: {secret_number}");
}Las dependencias utilizan el versionado semántico para indicar la compatibilidad con otras versiones con la notación
mayor.menor.parche,mayorindica cambios incompatibles en la API,menorque se añade funcionalidad a la API sin que haya incompatibilidad con versiones anteriores yparcheque se corrigen errores sin afectar la compatibilidad↩︎