"Rust es el futuro de la programación de sistemas, C es el nuevo ensamblador": discurso de uno de los principales ingenieros de Intel

En la reciente Cumbre de Tecnología de Código Abierto (OSTS) josh triplet, ingeniero senior de Intel, dijo que su empresa está interesada en que Rust alcance la “paridad” con el lenguaje C que todavía domina los sistemas y el desarrollo de bajo nivel en un futuro próximo. en su discurso 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 predeterminado, qué características de Rust le dan una ventaja sobre C y cómo podría completamente reemplace C en este campo de la programación.

"Rust es el futuro de la programación de sistemas, C es el nuevo ensamblador": discurso de uno de los principales ingenieros de Intel

La programación de sistemas es el desarrollo y gestión de software que sirve como plataforma para la creación de aplicaciones, asegurando que estas últimas interactúen con el procesador, la RAM, los dispositivos de entrada/salida y los equipos de red. El software del sistema crea una abstracción especial en forma de interfaces que ayudan a crear software de aplicación sin profundizar en los detalles de cómo funciona el hardware en sí.

El propio Triplett define la programación de sistemas como “cualquier cosa que no sea una aplicación”. Incluye elementos como BIOS, firmware, cargadores de arranque y kernels del sistema operativo, varios tipos de código integrado de bajo nivel e implementaciones de máquinas virtuales. Curiosamente, Triplett cree que un navegador web también es un software de sistema, ya que hace mucho tiempo que un navegador se ha convertido en algo más que "un simple programa", convirtiéndose en una "plataforma para sitios web y aplicaciones web" independiente.

En el pasado, la mayoría de los programas del sistema, incluidos BIOS, cargadores de arranque y firmware, se escribían en lenguaje ensamblador. En la década de 1960, comenzaron los 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 la década de 1970, Dennis Ritchie creó el lenguaje de programación C para el sistema operativo Unix. Creado en el lenguaje de programación B, que ni siquiera admitía mecanografía, C estaba repleto de potentes funciones de alto nivel que eran más adecuadas para escribir sistemas operativos y controladores. Varios componentes de UNIX, incluido su núcleo, finalmente se reescribieron en C. Posteriormente, muchos otros programas del sistema, incluida la base de datos Oracle, gran parte del código fuente de Windows y el sistema operativo Linux, también se escribieron en C.

C ha recibido un tremendo apoyo en esta dirección. Pero, ¿qué hizo exactamente que los desarrolladores lo adoptaran? Triplett cree que para motivar a los desarrolladores a cambiar de un lenguaje de programación a otro, este último primero debe proporcionar nuevas funciones sin perder las antiguas.

En primer lugar, el lenguaje debe ofrecer nuevas características "razonablemente impresionantes". “No podría ser mejor. Tiene que ser significativamente mejor para justificar el esfuerzo y el tiempo de ingeniería que lleva realizar la transición”, explica. En comparación con el lenguaje ensamblador, C tenía muchas cosas que ofrecer. Admitía un comportamiento de tipo seguro, proporcionaba mejor portabilidad y rendimiento con construcciones de alto nivel y generaba código mucho más legible en general.

En segundo lugar, el lenguaje debe brindar soporte para funciones antiguas, lo que significa que en la historia de la transición a C, los desarrolladores debían asegurarse de que no fuera menos funcional que el lenguaje ensamblador. Triplett explica: "Un nuevo idioma no puede simplemente ser mejor, también debe ser igual de bueno". Además de ser más rápido y soportar cualquier tipo de datos que el lenguaje ensamblador pudiera usar, C también tenía lo que Triplett llamó una "escotilla de escape", es decir, admitía la inserción de código en lenguaje ensamblador dentro de sí mismo.

"Rust es el futuro de la programación de sistemas, C es el nuevo ensamblador": discurso de uno de los principales ingenieros de Intel

Triplett cree que C se está convirtiendo en lo que era el lenguaje ensamblador hace muchos años. "C es el nuevo ensamblador", declara. Ahora los desarrolladores están buscando un nuevo lenguaje de alto nivel que no sólo resuelva los problemas acumulados en C que ya no se pueden solucionar, sino que también ofrezca nuevas funciones interesantes. Un lenguaje de este tipo debe ser lo suficientemente convincente como para que los desarrolladores lo utilicen, debe ser seguro, proporcionar administración automática de memoria y mucho más.

“Cualquier lenguaje que quiera ser mejor que C debe ofrecer mucho más que simplemente protección contra desbordamiento del buffer si realmente quiere ser una alternativa convincente. Los desarrolladores están interesados ​​en la usabilidad y el rendimiento, escribiendo código que se explica por sí mismo y hace más trabajo en menos líneas. También es necesario abordar las cuestiones de seguridad. La facilidad de uso y el rendimiento van de la mano. Cuanto menos código tengas que escribir para lograr algo, menos oportunidades tendrás de cometer errores, relacionados o no con la seguridad”, explica Triplett.

Comparación de Rust y C

En 2006, Graydon Hoare, un empleado de Mozilla, comenzó a escribir Rust como un proyecto personal. Y en 2009, Mozilla comenzó a patrocinar el desarrollo de Rust para sus propias necesidades y también amplió el equipo para seguir desarrollando el lenguaje.

Una de las razones por las que Mozilla estaba interesado en el nuevo lenguaje es que Firefox estaba escrito en más de 4 millones de líneas de código C++ y tenía bastantes vulnerabilidades críticas. Rust se creó teniendo en cuenta la seguridad y la concurrencia, lo que lo convierte en una opción ideal para reescribir muchos de los componentes de Firefox como parte del proyecto Quantum para rediseñar completamente la arquitectura del navegador. Mozilla también está utilizando Rust para desarrollar Servo, un motor de renderizado HTML que eventualmente reemplazará al actual motor de renderizado de Firefox. Muchas otras empresas han comenzado a utilizar Rust para sus proyectos, incluidas 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 administración automática de memoria para que los desarrolladores no tengan que asignarla y luego liberarla manualmente para cada objeto de 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, ni tiene el entorno de ejecución necesario para que funcione, como Java Runtime Environment para Java. En cambio, Rust tiene los conceptos de propiedad, préstamo, referencias y vida útil. “Rust tiene un sistema para declarar llamadas a un objeto para indicar si el propietario lo está usando o simplemente tomándolo prestado. Si simplemente toma prestado un objeto, el compilador realizará un seguimiento de ello y se asegurará de que el original permanezca en su lugar mientras haga referencia a él. Rust también garantizará que el objeto se elimine de la memoria tan pronto como se complete su uso, insertando una llamada correspondiente en el código en el momento de la compilación sin tiempo adicional”, dice Triplett.

La falta de un tiempo de ejecución nativo también puede considerarse una característica positiva de Rust. Triplett cree que los lenguajes que ejecuta son difíciles de utilizar como herramientas de programación de sistemas. Como él explica: "Debe inicializar este tiempo de ejecución antes de poder llamar a cualquier código, debe usar este tiempo de ejecución para llamar funciones, y el tiempo de ejecución en sí puede ejecutar código adicional a sus espaldas en momentos inesperados".

Rust también se esfuerza por proporcionar programación paralela segura. Las mismas características que lo hacen seguro para la memoria mantienen un registro de cosas como qué subproceso posee qué objeto y qué objetos se pueden pasar entre subprocesos y cuáles necesitan un bloqueo.

Todas estas características hacen que Rust sea lo suficientemente atractivo como para que los desarrolladores lo elijan como una nueva herramienta para la programación de sistemas. Sin embargo, en términos de computación paralela, Rust todavía está un poco por detrás de C.

Triplett tiene la intención de crear un grupo de trabajo especial que se centrará en introducir las características necesarias en Rust para que pueda igualar, superar y reemplazar completamente a C en el campo de la programación de sistemas. EN hilo en RedditAl dedicar su discurso, dijo que “el grupo de Paridad FFI/C está en proceso de creación y aún no ha comenzado a trabajar”, ​​por ahora está listo para responder cualquier pregunta, y en el futuro definitivamente publicará planes inmediatos. para el desarrollo de Rust como parte de su iniciativa para todas las partes interesadas.

Se puede suponer que el grupo FFI/C Parity se centrará en primer lugar en mejorar la compatibilidad con subprocesos múltiples en Rust, introduciendo compatibilidad con BFLOAT16, un formato de punto flotante que ha aparecido en los nuevos procesadores Intel Xeon Scalable, así como en la estabilización del ensamblaje. inserciones de código.



Fuente: 3dnews.ru

Añadir un comentario