← Índice

4.0 El familiar va al mercado

Esta traducción fue asistida por IA y revisada superficialmente. Si encuentras errores o algo no suena natural, escríbeme — lo agradezco.

Ningún taller produce todo lo que usa. Los clavos vienen del herrero, el vidrio del vidriero, cada buena herramienta de quien mejor la hace. Un artesano que rechaza el trabajo ajeno por principio trabaja más y peor - y se enorgullece de ello por separado. Cargo sabe dónde encontrar lo que se necesita.

Lo que necesitas

Para que las tareas sobrevivan al cierre del programa, deben escribirse en disco. Pero antes de escribir - deben traducirse: una estructura de datos en memoria y bytes en un archivo son cosas distintas. Se necesita una herramienta que pueda convertir una en la otra y viceversa.

En Rust esto es serde - una biblioteca de serialización. No forma parte de la biblioteca estándar: es un paquete separado en el registro público crates.io. Junto a ella se necesita serde_json - la implementación del formato JSON.

Al mercado

cargo add añade una dependencia a Cargo.toml y fija la versión actual. Para serde se necesita la opción --features derive:

cargo add serde --features derive
cargo add serde_json

Cargo responderá más o menos así:

    Updating crates.io index
      Adding serde v1.0.x to dependencies
             Features:
             + derive
    Updating crates.io index
      Adding serde_json v1.0.x to dependencies

Aparece una nueva sección en Cargo.toml:

# Cargo.toml - CAMBIADO
[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"

[dependencies] es la lista de todo lo que el crate necesita más allá de la biblioteca estándar. version = "1" significa: cualquier versión compatible con versiones anteriores de la rama 1.x. En la próxima ejecución de make ci, Cargo descargará los paquetes, los compilará y los pondrá a disposición del código de tq.

--features derive activa una parte opcional de serde. Qué proporciona exactamente - el siguiente capítulo.

cargo add es cómodo pero no obligatorio. Las mismas líneas pueden escribirse a mano en Cargo.toml - en la próxima ejecución, cargo build notará los cambios y descargará todo solo.

El resultado

make ci pasa. En la primera ejecución Cargo descargará y compilará las nuevas dependencias - esto tarda unos segundos. El resultado queda en caché; la siguiente ejecución es más rápida.

El código de tq no ha cambiado - los catorce tests siguen siendo los mismos. Lo que cambió es el crate: ahora tiene dependencias, y Cargo sabe dónde encontrarlas.

El código completo de tq para este capítulo está en 4-memory/00-the-familiar-goes-to-market/.


Lore: Cargo.lock

Tras la primera descarga, Cargo crea Cargo.lock - una instantánea exacta de todas las dependencias: qué crates, qué versiones, con qué sumas de verificación. Si Cargo.toml dice “necesito la versión 1.x”, entonces Cargo.lock dice “hoy era la 1.0.228.”

Cargo.lock debe añadirse a git. Para crates binarios - siempre: es la garantía de una compilación reproducible. En otra máquina, en otro día, cargo build producirá exactamente el mismo resultado. Sin Cargo.lock, cada ejecución puede traer una versión ligeramente diferente.

Para bibliotecas publicadas en crates.io, Cargo.lock normalmente no se incluye en git - para que los usuarios de la biblioteca puedan elegir versiones compatibles de las dependencias por sí mismos.