¡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 my_web_server
     Created binary (application) `my_web_server` package

Qué se ha creado

Un nuevo directorio llamado my_web_server con la siguiente estructura:

$ cd my_web_server
$ ls -lR
total 8
-rw-r--r--  1 manuelcillero  staff  133  1 jun 12:00 Cargo.toml
drwxr-xr-x  3 manuelcillero  staff   96  1 jun 12:00 src

./src:
total 8
-rw-r--r--  1 manuelcillero  staff   45  1 jun 12:00 main.rs
  • Incluye también las carpetas y archivos para utilizar git como sistema de control de versiones. Puede indicarse otro VCS (Version Control System) usando la opción --vcs, o ninguno si se añade --vcs none (ver las opciones de Cargo 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.toml mantiene información y dependencias del proyecto, fácil de leer gracias al formato TOML.
  • 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ón fn main() que es siempre el primer código que se ejecuta en cualquier programa Rust.

Modificar la configuración del proyecto

Editar el archivo Cargo.toml para añadir una dependencia al proyecto:

[package]
name = "my_web_server"
version = "0.1.0"
authors = ["User Name Email"]
edition = "2018"

[dependencies]
actix-web = "1.0.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, HttpServer, Responder};

fn index() -> impl Responder {
    "¡Hola mundo!"
}

fn main() -> std::io::Result<()> {
    HttpServer::new(|| App::new().service(web::resource("/").to(index)))
        .bind("127.0.0.1:8080")?
        .run()
}

Compilar el proyecto

Ejecutar:

$ cargo build
   Compiling semver-parser v0.7.0
   Compiling autocfg v0.1.4
   ...
   Compiling my_web_server v0.1.0 (/Users/USUARIO/my_web_server)
    Finished dev [unoptimized + debuginfo] target(s) in Xm Ys
  • Cargo invoca aquí el compilador 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

Usando:

$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 1.10s
     Running `target/debug/my_web_server`
  • La compilación y la ejecución son dos pasos separados.
  • Eso sí, cargo run ejecuta antes cargo 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:8080 para mostrar el saludo de Rust.

Compilar para producción

Finalizado el proyecto, listo para ser publicado, ejecutar cargo build --release para compilar aplicando las optimizaciones que dejan el ejecutable más rápido y compacto, aunque requiere más tiempo de compilación.

Esta vez el ejecutable final queda en target/release.

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *