Una de las bases para ser feliz como programador es que el lenguaje que usamos a diario nos produzca la menor cantidad de dolores de cabeza. Si revisamos las últimas encuestas de stackoverflow sobre desarrolladores nos encontramos con que Rust es el lenguaje de programación más amado por los programadores. ¿Qué tiene este lenguaje que hace felices a los programadores que lo han probado? Todo ello a pesar de seguir siendo un gran desconocido para muchos programadores.
Ser el lenguaje más amado y más popular, quizás siga estando reñido con otros factores. Ya hemos hablado de la popularidad de Python y el hecho de no ser un lenguaje relativamente nuevo. Con Rust nos encontramos con el caso de ser prácticamente un recién llegado y un gran desconocido para muchos programadores. Vamos a descubrirlo en detalle y ver en qué casos de uso puede ayudarnos en nuestro trabajo diario como programadores.
Mozilla necesitaba a Rust como la pieza fundamental de Servo en Firefox
Rust surgió en 2010 en Mozilla como un proyecto personal de Graydon Hoare en busca de un lenguaje que permitiera escribir un código extremadamente rápido al mismo nivel que C o C++ pero sin los problemas de gestión de memoria que había llevado históricamente a ser extremadamente meticuloso para no cometer graves bugs en el acceso de memoria y condiciones de carrera en tiempo de ejecución.
Mozilla buscaba un lenguaje extremadamente seguro y capaz de soportar sus exigentes requisitos de rendimiento. Así Rust comenzó a evolucionar gracias al impulso de Firefox y la de un gran número de contribuidores de la comunidad, no solo de Mozilla. Hoy, forma una parte importante del núcleo principal del motor del navegador Servo usado por Firefox, aprovechando las bondades en cuanto a paralelismo, concurrencia y gestión eficiente de la memoria.
Hace poco hablamos cómo Firefox Quatum CSS había conseguido increíbles tiempos de renderizado. Ello se lo debemos al rendimiento de Rust y su gestión eficiente y segura gestión de concurrencia. Y la reducción del número de bugs ocasionados por situaciones como, por ejemplo, condiciones de carrera.
Rust conduce a la programación de sistemas a la modernidad
Cuando hablamos sobre la programación de sistemas, lo primero que se nos viene a la cabeza es esa parte de la programación en la que los administradores de sistemas utilizan scripts o pequeñas aplicaciones para levantar máquinas. Pero más allá de eso, la programación de sistema es mucho más amplia. Se define como el desarrollo de elementos software que otras aplicaciones van a usar como base. Un buen ejemplo es el que mencionamos anteriormente con Firefox y su motor de Servo, y otro muy importante es el Kernel de Linux escrito principalmente en C/C++.
Rust trae herramientas modernas al mundo de la programación de sistemas:
- Cargo. Su gestor de dependencias y sistema de generación de builds. Se encarga de la compilación y la gestión de componentes externos a nuestro código como las librerías de Rust, denominadas craters.
- Rustfmt se encarga de asegurar la consistencia del code style entre desarrolladores.
- Rust Language Server facilita la integración con diferentes IDEs para ayudar la compleción de código mostrando mensajes inline de error en el código.
Siempre nos apoyábamos en C o C++ cuando hemos necesitado tareas donde el rendimiento es importante. Por no decir vital, como en los sistemas embebidos o los sistemas de alto rendimiento como la simulación. La búsqueda de un sustituto siempre ha llevado a alternativas más lentas, en cambio, Rust asegura una excelente gestión de memoria como gran pilar fundamental junto a una sintaxis moderna.
Sus valores fundamentales es la gestión de memoria segura garantizada en tiempo de compilación, utilizando los conceptos de ownership del dato utilizado y borrowing de memoria. Además de asegurar en tiempo de compilación que no nos encontraremos con condiciones de carrera. Todo ello mediante abstracciones de alto nivel con inferencia de tipos, sin coste en tiempos de ejecución, muy cercanos a los valores que puede reflejar C/C++, incluso mejorados.
Rust es un excelente lenguaje para crear aplicaciones command-line donde podemos definir todas las dependencias y generar el binario para ser distribuido a través de cargo. Además de crear aplicaciones embebidas a un muy bajo coste de tamaño con una seguridad en tiempo de compilación de futuros errores. También cuenta con un buen sistema de error handling y de logging flexible a la hora de mantener el código.
Rust también sirve para Web, pasando por WebAssembly y mucho más
Lo más destacado de Rust en el mundo web es poder compilar a WebAssembly, lo cual permite ejecutar aplicaciones web en la mayor parte de navegadores, con una velocidad muy cercana a las apps nativas. WebAssembly es, sin duda, una tecnología muy prometedora, aún sin explotar del todo, dónde Rust puede aumentar su impacto. También existen herramientas que permiten distribuir código en librerías npm o convertir código JavaScript desde Rust. Lo cual podría situar a Rust como uno de los lenguajes dentro del stack futuro de muchos desarrollos webs.
La comunidad de desarrollo lleva años pendiente de este hecho: que Rust consiguiera ser un lenguaje multipropósito y se adentrará también en el mundo del desarrollo web, más allá del desarrollo interno de un navegador. De este modo, excelentemente documentado, nos encontramos con la web “Are we web yet?: n directorio de todos los recursos a día de hoy disponibles para usar con Rust. Si aún no conocías Rust, es interesante saber como dispone de un excelente stack HTTP donde podemos utilizar frameworks web como Rocket, incluso ser capaces de sustituir a Rails/Django o Flask en un futuro próximo.
También cuenta con distintas herramientas para crear APIs, conectores de bases de datos, clientes HTTP, CMS, sistemas de logging, etc.
Proyectos usando Rust en producción: desde sistemas distribuidos a sistemas embebidos
Aparte de Mozilla y su desarrollo en Firefox, la comunidad de empresas que usan Rust en producción sigue aumentando. Así tenemos algunos ejemplos en distintos ámbitos, como Dropbox en el que Rust es una de las piezas claves en la eficiencia de sus datacenters sirviendo contenido a más de 500 millones de usuarios.
Por otro lado, Yelp ha desarrollado su propio framework de A/B testing aprovechando la rapidez de Rust (al mismo nivel de C) y más seguro que él, lo cual ayuda a su mantenimiento.
Recientemente Amazon se unió con el desarrollo de Firecracker un ligero sistema de virtualización para sistemas serveless en la nube de AWS.
También nos encontramos a Rust formando parte de algunas herramientas de RedHat como su nuevo sistema de almacenamiento, a Microsoft usándolo como parte de la implementación de Azure para IoT, Reddit para el sistema de procesado de comentarios o a Twitter como parte de las herramientas internas del equipo de tooling.
Aquí podéis consultar las empresas y proyectos que han llevado a producción desarrollos utilizando Rust.
Aprender Rust
Aunque Rust tiene una curva de aprendizaje un poco más áspera que otros lenguajes modernos de los que hemos hablado, cuenta con una excelente documentación en su web oficial con recursos totalmente guiados, además de diversos meetups. Aquí podéis ver un excelente video de la sesión de arranque del Meetup de Madrid, MadRust, dónde explican algunos de los principios fundamentales de Rust.
Podemos empezar por “el libro” de Rust, tal como se le conoce a The Rust Programming Language escrito por Carol Nichols y Steve Klabnik, además de otras contribuciones de la comunidad Rust.
Existe una serie de ejercicios de ejemplo en el Github oficial de Rust. Decir también que en el roadmap de Rust está planeado crear más recursos para desarrolladores noveles e intermedios.
Quizás Rust sea el lenguaje que usemos a lo largo de los próximos 40 años sustituyendo a C/C++.
Más información | Rust
Ver todos los comentarios en https://www.genbeta.com
VER 18 Comentarios