Anuncios

Bienvenidos sean a este post, hoy veremos como crear nuestro «espacio de trabajo».

Anuncios

Al igual que en otros lenguajes, podemos establecer un workspace (espacio de trabajo) donde podemos establecer que trabajarán bajo el ala de este. Esto está pensado principalmente cuando nuestros proyectos comienzan a tomar dimensiones muy grandes. Porque nos permite tener un código en crates separados para manejar de una mejor manera su complejidad. Al trabajar de esta manera, también nos permite crear crates localmente, compartir el mismo Cargo.lock y el mismo directorio de salida.

Anuncios

Para entender este concepto, vamos a generar un ejemplo básico para analizar como crearlo. Primero creen un directorio y dentrro de este generen un archivo con el nombre de Cargo.toml y agreguen el siguiente código:

Cargo.toml
[workspace]
members = ["mi_crate","app"]
resolver = "1"
Anuncios

Establecemos la etiqueta workspace y luego seguido por dos propiedades. La primera es para indicar cuales son los miembros integrantes del espacio de trabajo. La segunda es para indicar que resolvedor de workspace debe usar. Si le pasamos el valor de 1, utiliza el actual en el lenguaje pero si necesitan el utilizado hasta 2024 deben usar el valor de 3.

Anuncios

Tenemos dos miembros, por los nombres tenemos un crate y una aplicación. Nuestro siguiente paso será crear a ambos y para ello tenemos dos opciones: creamos los directorios y archivos completamente a mano o usamos a cargo para crearlo. Yo voy a optar por la segunda opción.

Anuncios
Nota:
No se preocupen por los avisos y errores que devuelve cargo porque los solucionaremos con las modificaciones.
Anuncios

Dentro del directorio que creamos vamos a ejecutar el siguiente comando:

$ cargo new mi_crate --lib
Anuncios

Este genera nuestro crate, lo siguiente es ir a lib.rs en el directorio src del nuevo proyecto y modificar el código existente de la siguiente manera:

src/lib.rs
Rust
pub fn saludar() {
println!("Holis");
}
Anuncios

Para simplificar este tema, solo vamos a tener una función que nos devuelve un mensaje en la consola. Tiene la particularidad de ser pública para ser accedida desde cualquier otro proyecto. Es la única modificación que debemos realizar.

Anuncios

Nuestro siguiente paso es crear a la aplicación, para ello en el directorio raíz del workspace ejecuten el siguiente comando:

$ cargo new app
Anuncios

Esto va a generar nuestro proyecto que es la aplicación que ejecutaremos. Lo siguiente es ir a main.rs del directorio src y modificaremos su código existente de la siguiente manera:

src/main.rs
Rust
fn main() {
mi_crate::saludar();
}
Anuncios

En este simplemente hacemos un llamado de la función en el crate. Un código simple para solo verificar como fuuciona. Aunque esto no termina acá, nuestro siguiente paso es modificar el código existente en Cargo.toml de la aplicación de la siguiente manera:

Cargo.toml
[package]
name = "app"
version = "0.1.0"
edition = "2024"
[dependencies]
mi_crate = { path = "../mi_crate" }
Anuncios

En realidad, la única modificación a realizar es en dependencies. Agregamos al crate que generamos anteriormente. Simplemente aplican el nombre y luego mediante la propiedad path asignaremos su ubicación. Con esto ya tenemos todo lo necesario para verificar nuestro proyecto pero antes veamos como quedó su estructura:

.
├── app
│   ├── Cargo.toml
│   └── src
│   └── main.rs
├── Cargo.lock
├── Cargo.toml
└── mi_crate
├── Cargo.toml
└── src
└── lib.rs
Anuncios

Como pueden ver, todos los proyectos deben estar en el directtorio del workspace. En el directorio raíz del workspace ejecuten el comando de cargo para compilarlo. Si no devuelve ninguna falla, podemos pasar a ejecutarlo y debemos tener la siguiente salida:

$ cargo run
Compiling mi_crate v0.1.0 (/home/tinchicus/lenguajes/rust/blog/01/espacio/mi_crate)
Compiling app v0.1.0 (/home/tinchicus/lenguajes/rust/blog/01/espacio/app)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.38s
Running `target/debug/app`
Holis
$
Anuncios

Como pueden observar, podemos tener múltiples recursos en un mismo lugar. Como mencionamos al inicio, facilitando el manejo de los mismos a la hora de administrarlos y depurarlos.

Anuncios

En resumen, hoy hemos visto a cargo workspace, que es, para que sirve, como se utiliza y un ejemplo práctico para ver como aplicarlo. Espero les haya sido de utilidad y les dejo un link a GitHub donde estan los codigos creados hoy:

https://github.com/tinchicus/RUST-codes/tree/main/cargo%20workspace

Les dejo algunas de mis redes sociales para seguirme o recibir una notificacion cada vez que subo un nuevo post:

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50