Un caso para Rust
May 17, 2020
El presente
En este momento el desarrollo de sistemas se realiza con C/C++, lenguajes de programación de bajo nivel ya consolidados en aplicaciones de alto rendimiento como sistemas embebidos, drivers, web servers, sistemas operativos, video juegos, entre otros. Aplicaciones en las que quieres sacarle el jugo al hardware y estar seguro de que nunca van a tener un error crítico. Por ejemplo, el sistema embebido que controla los periféricos de un Tesla no puede arrojar un segmentation fault que deshabilite los frenos en plena autopista. El microcontrolador de tu microondas no puede tener un buffer overflow que cuando se te vaya un botón de más se sobreescriba la instrucción que manejaba el voltaje del magnetrón y haga que se sobrecargue.
Pero Kejor, si la mayoría de las cosas de este tipo están escritas en C/C++ ¿Por qué las aplicaciones no fallan tan seguido como me lo pintas?
Porque existe ingenieros expertos en hacer que no fallen. Expertos que conocen cada detalle y optimización del compilador de C++ con sus más de diez años de experiencia. Que cuando empezaron en el negocio de desarrollador de bajo nivel necesitaron tener un mentor con veinte años de experiencia para evitar que cometan esos errores catastróficos. (Y que aún así sucedían y suceden)
Dada la necesidad de un mentor y la complejidad del desarrollo para este tipos de aplicaciones, su aprendizaje puede ser abrumante. Esto evita que el desarrollo de sistemas crezca a la par de algo como el desarrollo web, particularmente en países que basan su economía en la producción materia prima y no en la creación de productos finales, como los de Latinoamérica.
El futuro
Muy bonito y todo, ¿pero que tiene que ver Rust en todo esto?
Rust (o mejor el compilador de Rust) es ese mentor con veinte años de experiencia que sabe cuando estas cometiendo barbaridades y te lo dice cordialmente. También pone a tu disposición cargo un gestionador de paquetes, llamados crates, que facilita el desarrollo con solo un archivo de configuración. Nadie extrañará escribir comandos en múltiples CMake para la compilación y enlazado de dependencias.
No más NULL, lo digo en serio, en Rust ni una variable ni un puntero puede ser nulo.
Rust reemplaza el NULL por el tipo std::Option
, que tiene un valor Some(T)
o no tiene nada None
,
y tienes que evaluar los dos casos para su uso.
Es un lenguaje de alto nivel con todas las ventajas del bajo nivel. No
hay que preocuparse por limpiar la memoria, aunque no tiene Garbage Collector.
El compilador se encarga inferir cuando se puede limpiar la memoria.
Tiene una gran comunidad, fue el lenguaje de programación más amado en la encuesta de Stack Overflow. Esto quiere decir que su comunidad es activa y quiere verlo crecer, por ejemplo WebAsembly, su entorno para el desarrollo en la web está muy bien establecido, solo mira este tutorial.
El pero
Rust es relativamente nuevo (9 años) comparado con C++ (35 años) y esto quiere decir que no todo es color de rosas, los crates están crudos, la documentación apenas esta creciendo (no tiene documentación en español), y las ventajas que ofrece el compilador pueden convertirse desventajas para volverlo atractivo al público general.
El compilador de Rust aunque es capaz de decirte cuando estas cometiendo estupideces, puede ser cansino al comienzo, es una batalla constante, te pelea por todo. Esto espanta a los aprendices, ¿quien quiere ponerse a arreglar los 10 errores del compilador de Rust cuando puede estar escribiendo una referencia nula en C sin quejas y que genere un binario en segundos?.
Aunque el compilador trata de explicarte los errores, debes comprender temas como representación en memoria, tipos de datos, referencias, el stack, el heap, mutabilidad, etc. Conceptos que pueden ser intimidantes para un estudiante.
El desarrollo de sistemas embebidos es complicado, los fabricantes de chips solo ofrecen librerías para C/C++ y aunque actualmente Rust tiene como defenderse, su única opción es coexistir.
La conclusión
Rust is Awesome
.
Rust es nuevo y es el futuro. Arregla muchos de los problemas de C y C++, pero no va a ser la lengua franca en un futuro cercano y mucho menos los va a reemplazar totalmente. Rust te ayuda a ser un mejor desarrollador, a costa de poca productividad mientras aprendes a pelear el compilador. Y aunque piense que si no sabes ingles no deberías estar programando, no existe documentación en español :‘(
Estáre haciendo tutoriales para Rust en el futuro, yo tambien estoy aprendiendo y hay muy poca comunidad en español.
Para cualquier comentario o insulto me puedes enviar un correo a blog@kejor.me