¡Recomendación! Usar el gestor de dependencias y de proyectos cargo
(ver documentación original).
Primer proyecto
Desde el directorio donde se quiere crear el proyecto, ejecutar:
$ cargo new --bin mi_servidor_web
Created binary (application) `mi_servidor_web` package
- Ver la guía de estilo para los nombres de proyecto.
- Con Rust se pueden crear aplicaciones ejecutables o librerías para otros programas.
- La opción
--bin
es opcional y se asume por defecto, indica a Cargo que el resultado final será un ejecutable, y no una librería (--lib
).
Qué se ha creado
Un nuevo directorio llamado mi_servidor_web
con los siguientes archivos:
$ cd mi_servidor_web
$ ls -lR
total 8
-rw-r--r-- 1 user group 212 jun 12:00 Cargo.TOML
drwxr-xr-x 3 user group 512 jun 12:00 src
./src:
total 8
-rw-r--r-- 1 user group 45 jun 12:00 main.rs
- Más la estructura de archivos para Git. Puede usarse otro VCS usando la opción
--VCS
, o ninguno si se añade--VCS none
(ver opciones decargo new
). - El directorio raíz del proyecto podrá usarse para archivos README, licencias de uso, archivos de configuración y todo lo que no esté relacionado con el código.
- Cargo espera que los archivos del código fuente estén en el directorio
src
. - Los archivos de código fuente en Rust usan la extensión
.rs
. - En
src/main.rs
está la funciónfn main()
que es siempre el primer código que se ejecuta en cualquier programa Rust.
Modificar la configuración del proyecto
El archivo Cargo.TOML
, también llamado manifiesto, contiene información y dependencias del proyecto. Fácil de leer gracias al formato TOML, se puede editar para añadir nuevas dependencias:
[package]
name = "mi_servidor_web"
version = "0.1.0"
authors = ["User Name Email"]
edition = "2018"
[dependencies]
actix-web = "2.0"
actix-rt = "1.0"
La primera línea [package]
define una sección para configurar el proyecto. Y en la sección [dependencies]
se añaden los paquetes requeridos, llamados crates.
Vamos a crear un servidor web usando Actix-web.
Programar el servidor web
Editar el archivo src/main.rs
para incluir este código:
use actix_web::{web, App, HttpResponse, HttpServer, Responder};
async fn index() -> impl Responder {
HttpResponse::Ok().body("Hello world!")
}
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.route("/", web::get().to(index))
})
.bind("127.0.0.1:8088")?
.run()
.await
}
Compilar el proyecto
$ cargo build
Compiling libc v0.2.72
Compiling proc-macro2 v1.0.18
...
Compiling mi_servidor_web v0.1.0 (/Users/USUARIO/mi_servidor_web)
Finished dev [unoptimized + debuginfo] target(s) in Xm Ys
- Cargo invoca aquí el compilador de Rust,
rustc
. - Se requiere acceso a internet para descargar los crates requeridos.
- Se compilan todos los paquetes y se genera un ejecutable final en
target/debug
.
Ejecutar el programa
$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in X.Ys
Running `target/debug/mi_servidor_web`
- La compilación y la ejecución son dos pasos separados.
- Eso sí,
cargo run
ejecuta antescargo build
, por lo que bastará con usar el primero para compilar y ejecutar de una tacada. - También se puede ejecutar el programa directamente desde la línea de comandos.
- Cargo no compilará de nuevo los crates del proyecto si no hay cambios en las dependencias o no se ha hecho limpieza de los ficheros generados ejecutando
cargo clean
.
Abrir un navegador con la URL 127.0.0.1:8088
para mostrar el saludo de Rust.
Compilar para producción
Finalizado el proyecto, listo para ser publicado, compilar con cargo build --release
para aplicar las optimizaciones que dejan el ejecutable más rápido y compacto, aunque requerirá más tiempo de compilación.
Esta vez el ejecutable final queda en target/release
.
Última revisión: 21/07/2020
Dejar un comentario
¿Quieres unirte a la conversación?Siéntete libre de contribuir!