En la recientemente celebrada Cumbre de Tecnología de Código Abierto (Open Source Technology Summit — OSTS) , ingeniero principal de Intel, comentó que su empresa está interesada en que Rust alcance en el futuro cercano el «paridad» con el aún dominante lenguaje C en el ámbito del desarrollo de sistemas y bajo nivel. bajo el título «Intel y Rust: el futuro de la programación de sistemas», también habló sobre la historia de la programación de sistemas, cómo C se convirtió en el lenguaje de programación de sistemas «por defecto», qué ventajas le ofrece Rust sobre C y cómo en el futuro cercano podrá reemplazar completamente a C en este campo de la programación.

La programación de sistemas es el desarrollo y la gestión de software que actúa como plataforma para la creación de aplicaciones, asegurando la interacción de estas últimas con el procesador, la memoria RAM, los dispositivos de entrada/salida y el hardware de red. El software de sistema crea una abstracción especial en forma de interfaces, que ayudan a desarrollar software de aplicación sin tener que profundizar en los detalles de cómo funciona el «hardware» directamente.
Triplett define la programación de sistemas como «todo lo que no es una aplicación». Esto incluye cosas como BIOS, firmware, cargadores y núcleos de sistemas operativos, diversos tipos de código embebido de bajo nivel, así como implementaciones de máquinas virtuales. Es interesante que Triplett considere que un navegador web también es software de sistema, ya que el navegador ha evolucionado para convertirse en algo más que «simplemente un programa», convirtiéndose en una «plataforma para sitios web y aplicaciones web».
En el pasado, la mayoría de los programas de sistema, incluidos BIOS, cargadores y firmware, se escribían en lenguaje ensamblador. En la década de 1960 se iniciaron experimentos para proporcionar soporte de hardware para lenguajes de alto nivel, lo que llevó a la creación de lenguajes como PL/S, BLISS, BCPL y ALGOL 68.
Luego, en los años 70, Dennis Ritchie creó el lenguaje de programación C para el sistema operativo Unix. Desarrollado a partir del lenguaje B, que ni siquiera tenía soporte para tipado, C estaba lleno de potentes funciones de alto nivel que eran ideales para escribir sistemas operativos y controladores. Varios componentes de UNIX, incluida su núcleo, fueron eventualmente reescritos en C. Posteriormente, muchos otros programas del sistema, incluida la base de datos Oracle, la mayor parte del código fuente de Windows y el sistema operativo Linux, también fueron escritos en C.
C recibió un gran apoyo en este ámbito. Pero, ¿qué fue lo que realmente motivó a los desarrolladores a cambiarse a él? Triplet considera que, para motivar a los desarrolladores a cambiar de un lenguaje de programación a otro, este último debe, sobre todo, ofrecer nuevas funciones sin perder las capacidades anteriores.
En primer lugar, el lenguaje debe ofrecer «nuevas funciones suficientemente impresionantes». «No puede ser un poco mejor. Debe ser significativamente mejor para justificar el esfuerzo y el tiempo de los ingenieros necesarios para la transición», explica. En comparación con el lenguaje ensamblador, C ofrecía muchas cosas. Contaba con un soporte de tipado seguro hasta cierto punto, garantizaba una mejor portabilidad y rendimiento con construcciones de alto nivel, y generaba en general un código mucho más legible.
En segundo lugar, el lenguaje debe proporcionar soporte para las capacidades antiguas, lo que significa que en la historia de la transición a C, los desarrolladores debían estar seguros de que no era menos funcional que el lenguaje ensamblador. Triplet explica: «Un nuevo lenguaje no puede ser simplemente mejor, también debe ser al menos igual». Además de ser más rápido y admitir cualquier tipo de datos que pudiera utilizar el lenguaje ensamblador, C también tenía lo que Triplet llamó un «escape de emergencia», es decir, soportaba inserciones de código en lenguaje ensamblador.

Triplet considera que C se está convirtiendo en lo que era el lenguaje ensamblador hace muchos años. "C es el nuevo ensamblador", afirma. Ahora los desarrolladores buscan un nuevo lenguaje de alto nivel que no solo resuelva los problemas acumulados en C, que ya son imposibles de corregir, sino que también ofrezca nuevas y sorprendentes capacidades. Tal lenguaje debe ser lo suficientemente convincente como para hacer que los desarrolladores se pasen a él, debe ser seguro, proporcionar gestión automática de memoria y mucho más.
"Cualquier lenguaje que quiera ser mejor que C debe ofrecer mucho más que solo protección contra desbordamientos de búfer si realmente quiere convertirse en una alternativa convincente. Los desarrolladores están interesados en la facilidad de uso y el rendimiento, en escribir código que no requiera explicaciones y que realice más trabajo con menos líneas. También es necesario abordar los problemas de seguridad. La simplicidad de uso y el rendimiento están intrínsecamente vinculados. Cuanto menos código necesites escribir para lograr algo, menos posibilidades tendrás de cometer errores relacionados con la seguridad o no", explica Triplet.
Comparación entre Rust y C
Ya en 2006, Graydon Hoare, un empleado de Mozilla, comenzó a escribir Rust como un proyecto personal. En 2009, Mozilla comenzó a patrocinar el desarrollo de Rust para sus propias necesidades y amplió el equipo para continuar el desarrollo del lenguaje.
Una de las razones por las que Mozilla se interesó en un nuevo lenguaje es que Firefox fue escrito en más de 4 millones de líneas de código C++ y tenía bastantes vulnerabilidades críticas. Rust fue creado teniendo en cuenta los requisitos de seguridad y paralelismo, lo que lo convierte en la opción ideal para reescribir muchos componentes de Firefox como parte del proyecto Quantum para una revisión completa de la arquitectura del navegador. Además, Mozilla utiliza Rust para desarrollar Servo, el motor de renderizado HTML que en el futuro reemplazará al actual motor de renderizado de Firefox. Muchas otras empresas han comenzado a usar Rust para sus proyectos, incluyendo Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu y muchas más.
Rust resuelve uno de los problemas más importantes del lenguaje C. Ofrece gestión automática de memoria, por lo que los desarrolladores no necesitan asignar y luego liberar manualmente la memoria para cada objeto en la aplicación. Lo que diferencia a Rust de otros lenguajes modernos es que no tiene un recolector de basura que elimine automáticamente los objetos no utilizados de la memoria, así como tampoco un entorno de ejecución necesario para su funcionamiento, como el Java Runtime Environment para Java. En su lugar, Rust tiene conceptos de propiedad, préstamos, referencias y tiempos de vida. "Rust tiene un sistema de declaración de llamadas de objeto, que permite especificar si lo usa su propietario o si simplemente es un préstamo. Si solo está tomando prestado un objeto, el compilador estará pendiente y garantizará que el original permanezca en su lugar mientras usted se refiera a él. Además, Rust se asegurará de que el objeto se elimine de la memoria tan pronto como deje de usarse, insertando la llamada correspondiente en el código durante la compilación sin costos adicionales de tiempo", explica Triplett.
La ausencia de un entorno de ejecución propio también puede considerarse una característica positiva de Rust. Triplett considera que los lenguajes que se ejecutan con él son difíciles de usar como herramientas para programación de sistemas. Como él explica: "Debes inicializar este entorno de ejecución antes de poder llamar a cualquier código, debes usar este entorno de ejecución para invocar funciones, y el propio entorno de ejecución puede ejecutar código adicional a tus espaldas en momentos inesperados."
Además, Rust busca garantizar la programación concurrente segura. Las mismas funciones que lo hacen seguro para la memoria rastrean cosas como a qué hilo pertenece qué objeto y qué objetos pueden ser transferidos entre hilos, y cuáles necesitan ser bloqueados.
Todas estas funciones hacen que Rust sea lo suficientemente convincente para que los desarrolladores lo elijan como una nueva herramienta para la programación de sistemas. Sin embargo, en términos de cálculos paralelos, Rust todavía se queda un poco atrás de C.
Triplette planea crear un grupo de trabajo especial que se dedicará a implementar en Rust las funciones necesarias para que pueda igualar, superar y reemplazar a C en el ámbito de la programación de sistemas. En , dedicado a su presentación, dijo que "el grupo FFI/C Parity está en proceso de creación y aún no ha comenzado a trabajar", mientras está dispuesto a responder cualquier pregunta, y en el futuro, publicará los planes más próximos para el desarrollo de Rust en el contexto de su iniciativa para todos los interesados.
Se puede suponer que, en primer lugar, el grupo FFI/C Parity se centrará en mejorar el soporte de multithreading en Rust, implementar soporte para BFLOAT16, un formato de representación de números en punto flotante que apareció en los nuevos procesadores Intel Xeon Scalable, así como estabilizar las inserciones de código en ensamblador.
Fuente: 3dnews.ru
