Mostrando las entradas con la etiqueta cargo. Mostrar todas las entradas
Mostrando las entradas con la etiqueta cargo. Mostrar todas las entradas

miércoles, 14 de junio de 2023

¿Qué es Rust?


Rust es un nuevo lenguaje de programación que tuvo su versión 1.0 en 2015:

  • Rust es un lenguaje compilado estáticamente con un papel similar al de C++
    • rustc usa LLVM como backend.
  • Rust admite muchas plataformas y arquitecturas:
    • x86, ARM, WebAssembly, …
    • Linux, Mac, Windows,…
  • Rust se utiliza para una amplia gama de dispositivos:
    • firmware y cargadores de arranque,
    • pantallas inteligentes,
    • teléfonos móviles,
    • escritorios,
    • servidores.

Rust encaja en la misma área que C++:
  • Alta flexibilidad.
  • Alto nivel de control.
  • Se puede programar para dispositivos muy limitados, como teléfonos móviles.
  • No tiene runtime, ni recolección de basura.
  • Se centra en la fiabilidad y la seguridad sin sacrificar el rendimiento.
Pasemos al programa Rust más simple posible, un programa clásico de Hello World:

fn main() {
    println!("Hello 🌍!");
}

$ cargo run
   Compiling hello_cargo v0.1.0 (/home/emanuel/Projects/rust/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.26s
     Running `target/debug/hello_cargo`
Hello 🌍!

Lo que ves:
  • Las funciones se introducen con fn.
  • Los bloques están delimitados por llaves como en C y C++.
  • La función principal es el punto de entrada del programa.
  • Rust tiene macros higiénicas, println! es un ejemplo de esto.
  • Las cadenas Rust están codificadas en UTF-8 y pueden contener cualquier carácter Unicode.

Puntos clave:
  • Rust es muy parecido a otros lenguajes en la tradición C/C++/Java. Es imperativo (no funcional) y no intenta reinventar las cosas a menos que sea absolutamente necesario.
  • Rust es moderno con soporte completo para cosas como Unicode.
  • Rust usa macros para situaciones en las que desea tener una cantidad variable de argumentos (sin sobrecarga de funciones).
  • Las macros que son "higiénicas" significa que no capturan accidentalmente identificadores del ámbito en el que se utilizan. Las macros de Rust son en realidad solo parcialmente higiénicas.

lunes, 5 de junio de 2023

El ecosistema de Rust


El ecosistema de Rust consta de una serie de herramientas, de las cuales las principales son:

  • rustc: el compilador de Rust que convierte los archivos .rs en binarios y otros formatos intermedios.
  • cargo: el administrador de dependencias de Rust y la herramienta de compilación. Cargo sabe cómo descargar dependencias alojadas en https://crates.io y las pasará a rustc cuando construyas el proyecto. Cargo también viene con un runtime de prueba incorporado que se utiliza para ejecutar pruebas unitarias.
  • rustup: el instalador y actualizador de la cadena de herramientas de Rust. Esta herramienta se usa para instalar y actualizar rustc y cargo cuando se lanzan nuevas versiones de Rust. Además, rustup también puede descargar documentación para la biblioteca estándar. Puede tener varias versiones de Rust instaladas a la vez y rustup le permitirá cambiar entre ellas según sea necesario.


domingo, 4 de junio de 2023

Vamos a instalar Cargo para programar en Rust


No se si da para un post porque tengo linux, y es solo ejecutar : 

$ sudo apt install cargo rust-src rustfmt

y listo!! 

Si todo salio bien, van a hacer : 

$ cargo --version
cargo 1.65.0

Y se imprime la versión de cargo. 

Vamos a hacer un hola mundo, creemos un proyecto: 

cargo new hello_cargo
cd hello_cargo

En Cargo.toml podemos ver datos del proyecto y las dependencias : 

$ ls
Cargo.toml  src

$ cat Cargo.toml 
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

Y podemos ver el código rust en src/main.rs

$ cat src/main.rs
fn main() {
    println!("Hello, world!");
}

Y con cargo build compilamos y cargo run corremos : 

$ cargo build
   Compiling hello_cargo v0.1.0 (...rust/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.87s

$ cargo run 
    Finished dev [unoptimized + debuginfo] target(s) in 0.04s
     Running `target/debug/hello_cargo`
Hello, world!

Y listo!!