Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

¿Es usted un desarrollador que quiere aprender Rust? Para ayudarle a decidirse, este artículo presenta algunas de las características de Rust, uno de los lenguajes de programación de sistemas más populares.

En este artículo, exploraremos el lenguaje de programación Rust y sus características, como el sistema de tipos, la seguridad de la memoria y la propiedad. También repasaremos una lista de recursos que pueden ayudarle a aprender Rust.

Comencemos

¿Qué es el óxido?

Rust es un lenguaje de programación de sistemas. Comenzó como un proyecto personal de Graydon Hoare, un desarrollador, allá por 2006. En menos de una década, se ha convertido en la elección preferida para la programación de sistemas y aplicaciones afines. El salario medio de un programador de Rust es de unos 120.000 dólares.

Por lo tanto, si quiere cambiar de C a Rust o está buscando un nuevo lenguaje, ¡aprender Rust puede ser una gran elección! Según la encuesta Desarrollador StackOverflow, Rust ha sido votado como el lenguaje de programación más querido, durante siete años consecutivos.

imagen-96
Fuente de la imagen: StackOverflow

Rust ofrece la velocidad de los lenguajes de programación de sistemas de bajo nivel como C y C y la seguridad de los lenguajes de programación de alto nivel como Python.

Desde proyectos notables como Dropbox y Firefox hasta WebAssembly y la programación embebida, Rust se utiliza ampliamente en todos los ámbitos del desarrollo de software. Rust ofrece soporte de gestión de paquetes "out-of-the-box" a través de Cargo.

Cargo: El gestor de paquetes para Rust

Carga es el gestor de paquetes para Rust. Puede utilizar cargo para instalar paquetes desde cajasel registro de paquetes de Rust. Además de ser un gestor de paquetes que le permite buscar, instalar y gestionar paquetes, cargo también sirve como ejecutor de pruebas, generador de documentación y sistema de compilación.

Ahora que ya tiene una visión general de Rust, echemos un vistazo más de cerca a algunas de las características de Rust que lo hacen destacar como un lenguaje de programación de sistemas con una amplia adopción.

Mensajes de error útiles

Mensajes de error útiles

Como programador principiante, se topará con errores y pasará una cantidad significativa de tiempo depurando su código. Utilizará los mensajes de error y las advertencias que le proporcione el compilador para solucionar esos problemas. Y los mensajes útiles pueden ayudarle a depurar más rápidamente.

Un ejemplo de mensaje de error

Cuando su código no compila con éxito, Rust proporciona mensajes de error útiles que ofrecen explicaciones sobre lo que hay que arreglar en su código y dónde.

En este ejemplo, la variable num2 está definida dentro de la función inner(). Por lo tanto, está limitada al ámbito de la función. Si intenta acceder a ella fuera de la función, el compilador lanza un error:

fn main() {
 let num1 = 10;
 fn inner(){
 let num2 = 9; 
 }
 println!("El valor de num2 es: {}", num2);
}

Y el mensaje de error da información sobre lo que hay que arreglar.

error[E0425]: no se puede encontrar el valor `num2` en este ámbito
 -->
 src/main.rs:6:42
 |
6 | println!("El valor de num2 es: {}", num2);
 | ^^^^ help: existe una variable local con un nombre similar: `num1`

Anuncios durante la compilación

El compilador también proporciona advertencias útiles sobre problemas en su código. Cuando define variables pero nunca las utiliza en el resto del programa, Rust le da un mensaje de advertencia, como se muestra.

fn main() {
 let num1 = 10;
 let num2 = 9;
 println!("El valor de num1 es: {}", num1);
}

Aquí, la variable num2 se declara pero nunca se utiliza.

advertencia: variable no utilizada: `num2`
 -->
 src/main.rs:3:9
 |
3 | let num2 = 9;
 | ^^^^ ayuda: si esto es intencionado, antepóngale un guión bajo: `_num2`
 |

Lenguaje fuertemente tipado

Otra razón por la que debería utilizar Rust para sus proyectos de desarrollo es su sistema de tipos. El óxido es un lenguaje fuertemente tipadolo que significa que no soporta la coerción de tipos. La coerción de tipos es cuando un lenguaje puede convertir implícitamente un valor de un tipo de datos a otro.

Por ejemplo, el código Python de la siguiente celda de código se ejecutará sin errores. Esto se debe a que en Python, un número distinto de cero tiene un valor de verdad de Verdadero, y por lo tanto, la sentencia si se ejecuta sin errores-a pesar de que el número 10 es un entero-y no un booleano.

num1 = 10
if num1:
 num2 = 9
print(f "num2 es {num2}")

# Salida: num2 es 9

Por otro lado, Rust no coerce tipos. Así que el siguiente código arrojará un error:

fn main() {
 let num1 = 10;
 if num1{
 let num2 = 9; 
 }
}

El error informa de un desajuste de tipo, donde se esperaba un booleano y se encontró un entero.

error[E0308]: mismatched types
 -->
 src/main.rs:3:8
 |
3 | if num1{
 | ^^^^ expected `bool`, found integer

Seguridad de la memoria

La seguridad de la memoria es otra característica de Rust que lo hace atractivo para los programadores. Intentaremos proporcionar una visión general de cómo funciona.

Las variables deben inicializarse antes de ser utilizadas

En Rust, todas las variables deben ser inicializadas antes de poder ser utilizadas. En lenguajes como C, el siguiente código en el que num no está inicializada compilará y se ejecutará sin errores. El valor de la variable no inicializada es algún valor basura.

#include <stdio.h>

int main(void) {
 int num;
printf("El valor de num es %d", num);
return 0;
}
// Salida: El valor de num es 0

Si intenta hacer algo similar en Rust, se encontrará con un error en tiempo de compilación. Rust, por tanto, no tiene noción de recolección de basura.

fn main() {
 let num:i32;
 println!("El valor de num es: {}",num);
}
error[E0381]: el binding usado `num` no está inicializado
 -->
 src/main.rs:3:40
 |
2 | let num:i32;
 | --- binding declarado aquí pero dejado sin inicializar
3 | println!("El valor de num es: {}",num);
 | ^^^ `num` usado aquí pero no está inicializado
 |

Seguridad de la memoria en tiempo de compilación

Rust garantiza la seguridad de la memoria en tiempo de compilación. Tomemos un ejemplo sencillo. Aquí, aunque la sentencia condicional si tiene un valor booleano de verdadero, lo que significa que el valor de num siempre será 100, obtendremos un error cuando intentemos imprimir el valor de num.

fn main() {
 let num:i32;
 if true{
 num = 100;
 }
 println!("El valor de num es: {}", num);
}

Esto se debe a que la evaluación condicional se produce en tiempo de ejecución, y el compilador no podrá garantizar que num tenga un valor en tiempo de compilación.

error[E0381]: used binding `num` is possibly-uninitialized
 -->
 src/main.rs:6:41
 |
2 | let num:i32;
 | --- binding declared here but left uninitialized
3 | if true{
 | ---- if this `if` condition is `false`, `num` is not initialized
4 | num = 100;
5 | }
 | - aquí puede faltar un brazo `else` que inicialice `num`
6 | println!("El valor de num es: {}", num);
 | ^^ `num` se utiliza aquí pero está posiblemente-no-inicializado

Si observa detenidamente el mensaje de error, verá que con una sentencia más, podemos asegurarnos de que num tendrá un valor. Así, el siguiente código se ejecutará sin errores. Porque de esta forma, el compilador puede determinar que num tendrá un valor-en tiempo de compilación-por lo que no hay errores.

fn main() {
 let num:i32;
 if true{
 num = 100;
 }
 else{
 num = 50;
 }
 println!("El valor de num es: {}", num);
}
El valor de num es: 100

Inmutabilidad de las variables

También es útil tener en cuenta que las variables en Rust son inmutables por defecto. Esto significa que, como desarrollador, no tiene que preocuparse de sobrescribir accidentalmente el valor de una variable en particular. He aquí un ejemplo:

fn main() {
 let num1 = 10;
 num1 = 5;
 println!("El valor de num1 es: {}", num1);
}

Como num1 está inicializado a 10, cuando intenta asignarle un valor de 5, obtiene un mensaje de error que dice 'no se puede asignar dos veces a la variable inmutable num1‘.

error[E0384]: no se puede asignar dos veces a la variable inmutable `num1`
 -->
 src/main.rs:3:5
 |
2 | let num1 = 10;
 | ----
 | |
 | primera asignación a `num1`
 | ayuda: considere hacer mutable este binding: `mut num1`
3 | num1 = 5;
 | ^^^^^^^^ no puede asignar dos veces a variable inmutable

Propiedad y préstamo

La propiedad garantiza la seguridad de la memoria. Funcionalmente, la propiedad en Rust puede resumirse de la siguiente manera:

Cada objeto debe tener uno y sólo uno propietario. Si el propietario sale del ámbito, entonces el objeto es eliminado.

Tomemos un ejemplo sencillo. Aquí, inicializamos una cadena str1 y luego pasamos su valor a str2. Como cualquier objeto sólo puede tener un propietario, el objeto str1 se abandona en cuanto su valor se mueve a str2.

fn main() {
 let str1 = String::from("Rust");
 let str2 = str1;
 println!("El valor de str1 es: {}", str1);
}
¡error[E0382]: borrow of moved value: `str1`
 -->
 src/main.rs:4:42
 |
2 | let str1 = String::from("Rust");
 | ---- move occurs because `str1` has type `String`, which does not implement the `Copy` trait
3 | let str2 = str1;
 | ---- value moved here
4 | println!("El valor de str1 es: {}", str1);
 | ^^^^ valor prestado aquí después del movimiento

Aunque esto parece intuitivo, para entender y apreciar mejor cómo funciona la propiedad, es útil aprender los conceptos de préstamo y referencias.

Desarrollo rápido

Hasta ahora, hemos discutido varias características útiles del lenguaje de programación Rust. Repasemos algunas:

  • Rust está optimizado tanto para la velocidad como para la seguridad.
  • Viene con una herramienta de gestión de paquetes incorporada y construye un sistema.
  • También cuenta con una rica biblioteca estándar.

En esencia, Rust ofrece todo lo que un desarrollador puede pedir. Por lo tanto, con Rust, puede desarrollar aplicaciones rápidamente con una depuración mínima y construcciones más rápidas.

Desarrollo multiplataforma

Desarrollo rápido

Con Rust, puede elegir desarrollar en la plataforma de su elección. Rust es compatible con las plataformas más comunes: Linux, MacOS y Windows.

El desarrollo de aplicaciones es generalmente fácil, ya que puede compilar el código fuente de Rust en un ejecutable sin depender de otras herramientas de compilación y compiladores externos.

Comunidad solidaria

Una comunidad de apoyo contribuye en gran medida a simplificar su viaje de aprendizaje. Rust tiene una enorme base de usuarios que no hace más que crecer con cada año que pasa.

La popularidad de Rust en la encuesta de desarrolladores de StackOverflow indica que existe una gran comunidad de usuarios, con muchos desarrolladores experimentados dispuestos a compartir sus conocimientos y experiencia.

Además de la documentación oficial, también existe un sitio de documentación generada por los usuarios y un foro de debate. También puede consultar el subreddit de Rust y los grupos de LinkedIn en busca de discusiones relevantes.

Recursos de aprendizaje para empezar con Rust

Recursos didácticos para empezar con el óxido

Esta sección enumera algunos recursos útiles para ayudarle a empezar con Rust. No es una lista exhaustiva, pero incluye algunos tutoriales, cursos y libros recomendados para ayudarle en su viaje de aprendizaje.

#1. Óxido por ejemplo

Óxido By Example le enseñará los fundamentos de Rust y las bibliotecas estándar a través de una serie de ejemplos que puede codificar a lo largo en un editor en línea.

Los temas tratados incluyen crates, cargo: la herramienta de gestión de paquetes para Rust, generics, traits, manejo de errores, y mucho más.

#2. Crujidos

Crujidos es otro recurso de aprendizaje oficial para el lenguaje de programación Rust. Es similar a Rust por ejemplo. Sin embargo, requiere que configure su entorno de desarrollo local, clone un repo de ejemplo y resuelva problemas sencillos para aprender estos conceptos.

#3. Pista de óxido

óxido

El Pista de óxido en Exer cism tiene más de 100 ejercicios para ayudarle a aprender y poner a prueba su comprensión de Rust. Exercism es una plataforma gratuita en la que, además de codificar su camino a través de los ejercicios, puede obtener tutoría de programadores experimentados.

#4. Curso intensivo de óxido

imagen-68

El Ultimate Óxido C rash Curso impartido por Nathan Stocks en Udemy cubre lo siguiente:

  • Fundamentos de la programación en Rust
  • Sistema de módulos en Rust
  • Tipos de datos y flujo de control
  • Referencias y préstamos
  • Estructuras, rasgos y colecciones

#5. Ultimate Rust 2: Conceptos intermedios

imagen-67

Lo último enÓxido 2 es un curso de seguimiento del Ultimate Rust Crash Course y cubre los siguientes temas:

  • Cierres
  • Iteradores
  • Manejo de errores
  • Pruebas unitarias y de integración
  • Registro, multihilo y canales

#6. Rust lang: La guía completa para principiantes 2023

imagen-69

Este curso Udemy impartido por Catalin Stefan es un curso completo sobre la programación en Rust. Algunos de los temas tratados incluyen:

  • Fundamentos de Rust
  • Tipos de datos, estructuras de control
  • Funciones, rasgos
  • Gestión de la memoria
  • Concurrencia

#7. Programando Rust: Desarrollo rápido y seguro de sistemas

Programming Rust de O'Reilly es un popular libro de programación en Rust que le enseñará lo siguiente:

  • Tipos de datos fundamentales
  • Propiedad y préstamo
  • Programación asíncrona
  • Aplicaciones multihilo rápidas
  • Cierres, iteradores
  • Colecciones

#8. El lenguaje de programación Rust, 2ª edición

Vista previa Producto Valoración Precio
El lenguaje de programación Rust, 2ª edición El lenguaje de programación Rust, 2ª edición $36.52

El Lenguaje de Programación Rust está escrito por renombrados colaboradores de la comunidad Rust. Este libro cubre todo lo que necesita saber sobre Rust, incluyendo:

  • Propiedad y préstamos
  • Genéricos, rasgos
  • Punteros inteligentes, multihilo
  • Pruebas y gestión de errores

#9. Guía de referencia completa de programación en Rust

La Guía de referencia completa de programación en Rust de Packt cubre lo siguiente:

  • Implementación de estructuras de datos en Rust
  • Escritura de componentes reutilizables y comprobables en Rust
  • Diseño de aplicaciones multihilo Diseño de algoritmos y
  • Aplicaciones de Rust en WebAssembly, redes y aplicaciones de línea de comandos

#10. Proyectos creativos para programadores de Rust

Si usted es un desarrollador experimentado aprendiendo Rust, entonces la construcción de unos pocos proyectos en su dominio de interés será suficiente para obtener una buena comprensión del lenguaje. Creative Projects for Rust Programmers de Packt es un libro que enseña Rust aplicándolo a proyectos como:

  • Construcción de servicios web Restful
  • juegos 2D con
  • Desarrollo de aplicaciones web con WebAssembly
  • Emuladores de lenguaje máquina
  • ¡y mucho más!

Conclusión

Este artículo ha presentado una visión general de Rust como lenguaje de programación de sistemas, incluyendo características como la seguridad de la memoria, la gestión mejorada de paquetes y mucho más. También hemos enumerado recursos de aprendizaje para ayudarle a ponerse en marcha con Rust.

Como siguiente paso, puede elegir uno o más de los recursos de aprendizaje mencionados para aprender los fundamentos de Rust. ¡Feliz programación en Rust!

También puede explorar algunos de los mejores proveedores de alojamiento de servidores Óxido.

  • Bala Priya C
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder