Prólogo
Lo hemos escuchado muchas veces, más cuando nos vemos envueltos en situaciones críticas al momento de producir software, necesitamos desarrollar herramientas que requieren ser rápidas, precisas y de bajo consumo de recursos.
Existe una cantidad vasta de lenguajes de programación, bibliotecas y frameworks que nos pueden ayudar a realizar nuestro trabajo, aun así no todos son lo que definiríamos como "La herramienta correcta" para el trabajo que necesitamos entregar en dos semanas a un cliente altamente exigente.
Cuando nos adentramos al lenguaje de programación Rust no tenemos línea alguna que nos especifique los límites de el lenguaje, pues el objetivo principal de Rust es el otorgar control, la adquisición de poder e independencia por parte del programador.
Rust cumple conos paradigmas y su naturaleza extensible permite que los programadores desarrollen sus ideas sin límites que pueden llegas a ser molestos después de lidiar una o dos veces con ellos, pensemos en lenguajes de programación como C o C++, estos dos lenguajes son las bases de mucha de la tecnología usada actualmente, la mayoría de los dispositivos que usamos cuentan con un sistema operativo escrito mayormente en C o C++, sin embargo estos lenguajes de programación no son perfectos, el control que le es ofrecido al usuario no está regulado por criterios de ningún tipo lejos de la sintaxis y algunas protecciones básicas en la memoria (sin mencionar la protección que otorga el sistema operativo en muchos casos).
Aun así los lenguajes de programación como C o C++ no poseen una regulación muy profunda, lo cual puede llevar a cometer los errores más comunes que se conocen en estos lenguajes como:
- Memory leaks
- Data races
- Stack & Buffer overflow
- Null pointers
- Segfaults
- etc.
Pensemos en el enfoque principal de Rust, ser un lenguaje de programación de sistemas, un nivel en el que se trabaja con un manejo avanzado de la memoria del sistema, representación extensiva de datos, concurrencia, trabajar con diferentes hilos de ejecución y más. Esto puede ser visto como algo duro o difícil pues es muy fácil cometer errores que pueden congelar, dañar parcial o totalmente un sistema funcional e incluso los programadores de sistemas con más experiencia no están libres de cometer errores menores que dejan sus programas expuestos a vulnerabilidades, cierres inesperados o corrupción de datos parcial o total.
Rust no se limita solo a programación de sistemas, al ser extremadamente modular permite aplicaciones CLI, GUI's con gtk-rs o incluso puedes desplegar tus propias web-apps utilizando rocket, un poderoso framework hecho completamente en Rust.
Incluso si eres un programador que trabaja a bajo nivel puedes reescribir tus proyectos en Rust para mejorar su tiempo de ejecución, seguridad, concurrencia o legibilidad sin miedo a introducir nuevos errores o vulnerabilidades.
En este libro comunitario aprenderás a manejar las bases del lenguaje de programación Rust, podrás aplicar tus conocimientos para mejorar o realizar nuevos proyectos, no esperes más, toma tu computadora, una libreta y empieza a aprender con nosotros.
-- Future Lab