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 (
--vcs
para evitarlo) - el directorio principal recoge
README
, licencias, configuraciones… Cargo.toml
yCargo.lock
son ú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
,mayor
indica cambios incompatibles en la API,menor
que se añade funcionalidad a la API sin que haya incompatibilidad con versiones anteriores yparche
que se corrigen errores sin afectar la compatibilidad↩︎