Introducción al lenguaje Rust.

:warning: La guía está diseñada para sistemas operativos tipo Unix :warning:

¿Qué es Rust?

Rust es un lenguaje de programación que permite un control del sistema a bajo nivel manteniendo una sintáxis de alto nivel, así mismo Rust nos da la opción de controlar detalles de bajo nivel (como el uso de memoria) sin tener que recurrir a los métodos tradicionales véase (C/C++).

Rust es un lenguaje de programación de sistemas, ésto se refiere a la actividad de crear programas dedicados al manejo de un sistema de información, básicamente la programación de sistemas se utiliza para los siguientes casos:

  • Sistemas operativos :computer:
  • Controladores de dispositivos (drivers) :dvd:
  • Sistemas de archivos :file_folder:
  • Código para dispositivos MUY limitados(IoT) :earth_americas:
  • Criptografía (cifrado) :key:
  • Manejo de memoria
  • Virtualización y contenedores :packages:
  • Juegos :video_game:
  • Etc.

Ventajas y características de Rust

Miremos a nuestro navegador web, si, ese en el que estás leyendo este texto, sea Firefox hecho por Mozilla o Chrome hecho por Google lo cierto es que ambos tienen mas de 3M de líneas de código, (Firefox un promedio de 12,900,992 y Chrome 4,490,488) escritas en C y C++, ambos al ser lenguajes de bajo nivel permiten a nuestros navegadores ser veloces pero al mismo tiempo éstos tienen problemas de seguridad ya que muchas operaciones en la memoria no son validadas, ésto lleva a “Buffer Overflows”, apuntadores nulos, “memory leaks” y errores de segmentación.

Es bien sabido que C y C++ han sido “perseguidos” por muchos errores que en su mayoría llevan a caídas de los programas o los famosos “memory leaks” que (no me dejarán mentir) incluso los programadores expertos en éstos lenguajes saben que son tediosos al momento de depurar y solucionar.

Esto es solo la punta del iceberg, pensemos un momento en los punteros nulos, la sobrecarga de los buffer, errores de segmentación y mucho mas, afortunadamente el compilador de Rust es inteligente y puede detectar éstos problemas al momento de compilar el código, asegurando así la seguridad de la memoria en tiempo de ejecución ésto se logra gracias a que el compilador retiene todo el control del diseño de la memoria sin requerir de un recolector de basura que corra en el tiempo de ejecución, además esta característica de seguridad implica que existan menos agujeros de seguridad.

Ahora veamos el otro lado, tenemos lenguajes como Python/Ruby que tienden a manejar esto por nosotros, veamos uno de éstos, Haskell en específico, Haskell tiene fama por ser muy seguro y confiable el problema es que no nos permite tener control sobre la locacización o el uso de la memoria o el uso de hardware en nuestros programas, pareciera que los lenguajes entre mas seguros son mas control sobre la memoria pierden, podría expresarse en una gráfica.

C/C++     Java/C#       Python/Ruby       Haskell

  R         u                 s               t

<----------------------------------------------->

control                                    seguridad

Rust nos permite específicar cómo deberían de comportarse las variables una vez puestas dentro de la memoria.

Rust permite romper ésta grafica y lograr ambas “metas” sin un recolector de basura, si lo ponemos en contraste con otros lenguajes como Java, C#, Python, Ruby o Go. De hecho, Rust aun no posee un recolector de basura :sweat_smile:.

Rust es un lenguaje compilado, posee reglas estrictas respecto a la seguridad aplicadas por su compilador. Como consecuencia de esto, Rust puede trabajar con un tiempo de ejecución mínimo.

Rust no solo está pensado para desarrolladores y proyectos donde el rendimiento y la optimización a bajo nivel son importantes, también está pensado para ecosistemas donde la seguridad y la estabilidad son importantes, como un plus, Rust utiliza muchas técnicas funcionales de alto nivel dento del lenguaje haciendo que se sienta como un lenguaje de alto y bajo nivel al mismo tiempo.

Instalando Rust:

La instalación de Rust en los sistemas tipo *nix es muy sencilla aunque en lo personal nos parece muy inseguro correr scripts .sh de fuentes desconocidas al revisar las sumas de verificación comprobaremos que todo está en orden.

Para sistemas tipo *nix (Gnu/Linux / MacOSX)

Suponiendo que dentro de nuestro sistema tipo *nix estamos usando Bash debemos colocar el siguiente comando:

$ curl https://sh.rustup.rs -sSf | sh

esto descargará la herramienta rustup la cual instalará la última versión de Rust por nosotros, aunque ejecutar este script de instalación no será suficiente, debemos indicar a nuestra terminal en dónde estarán alojados los binarios tanto de cargo como de rustc.

En algunos casos tendremos que agregar la siguiente línea a nuestro archivo .bashrc.

$ export PATH="$HOME/.cargo/bin:$PATH}

Nota: Los cambios no surtirán efecto totalmente hasta cerrar sesión o reiniciar la computadora.

Finalmente para comprobar que tenemos la última versión de Rustup debemos ejecutar la siguiente orden:

$ rustup update

esto revisará y ejecutará las actualizaciones correspondientes en nuestra release de Rust.

Si decidimos que Rust simplemente no es lo nuestro y deseamos limpiar nuestro sistema de el solo debemos ejecutar:

$ rustup self uninstall

– Fin de la introducción a Rust –