"Rust é o futuro da programação do sistema, C é o novo montador" - um discurso de um dos principais engenheiros da Intel

No recente Open Source Technology Summit (OSTS) Josh Triplett, engenheiro sênior da Intel, disse que sua empresa está interessada em que Rust alcance “paridade” com a linguagem C que ainda domina os sistemas e o desenvolvimento de baixo nível em um futuro próximo. Em seu discurso Sob o título "Intel e Rust: O Futuro da Programação de Sistemas", ele também falou sobre a história da programação de sistemas, como C se tornou a linguagem de programação de sistemas padrão, quais recursos do Rust lhe dão uma vantagem sobre C e como ele poderia completamente substitua C neste campo da programação.

"Rust é o futuro da programação do sistema, C é o novo montador" - um discurso de um dos principais engenheiros da Intel

A programação de sistemas é o desenvolvimento e gerenciamento de software que serve de plataforma para a criação de aplicativos aplicativos, garantindo que estes interajam com o processador, RAM, dispositivos de entrada/saída e equipamentos de rede. O software do sistema cria uma abstração especial na forma de interfaces que ajudam a criar software aplicativo sem se aprofundar nos detalhes de como o próprio hardware funciona.

O próprio Triplett define programação de sistemas como “qualquer coisa que não seja um aplicativo”. Inclui coisas como BIOS, firmware, bootloaders e kernels de sistema operacional, vários tipos de código incorporado de baixo nível e implementações de máquinas virtuais. Curiosamente, Triplett acredita que um navegador web também é um software de sistema, uma vez que o navegador há muito tempo se tornou mais do que “apenas um programa”, tornando-se uma “plataforma autônoma para sites e aplicações web”.

No passado, a maioria dos programas de sistema, incluindo BIOS, bootloaders e firmware, eram escritos em linguagem assembly. Na década de 1960, experimentos começaram a fornecer suporte de hardware para linguagens de alto nível, levando à criação de linguagens como PL/S, BLISS, BCPL e ALGOL 68.

Então, na década de 1970, Dennis Ritchie criou a linguagem de programação C para o sistema operacional Unix. Criado na linguagem de programação B, que nem sequer tinha suporte para digitação, C estava repleto de funções poderosas de alto nível que eram mais adequadas para escrever sistemas operacionais e drivers. Vários componentes do UNIX, incluindo seu kernel, foram eventualmente reescritos em C. Posteriormente, muitos outros programas de sistema, incluindo o banco de dados Oracle, grande parte do código-fonte do Windows e o sistema operacional Linux, também foram escritos em C.

C recebeu um tremendo apoio nessa direção. Mas o que exatamente fez os desenvolvedores mudarem para ele? Triplett acredita que, para motivar os desenvolvedores a mudar de uma linguagem de programação para outra, esta deve primeiro fornecer novos recursos sem perder os recursos antigos.

Primeiro, a linguagem deve oferecer novos recursos “razoavelmente impressionantes”. “Ele não poderia estar melhor. Tem que ser significativamente melhor para justificar o esforço e o tempo de engenharia necessários para fazer a transição”, explica ele. Comparado à linguagem assembly, C tinha muito a oferecer. Ele suportava um comportamento seguro de tipo, fornecia melhor portabilidade e desempenho com construções de alto nível e gerava um código geral muito mais legível.

Em segundo lugar, a linguagem deve fornecer suporte para recursos antigos, o que significa que na história da transição para C, os desenvolvedores tiveram que ter certeza de que ela não era menos funcional que a linguagem assembly. Triplett explica: “Uma nova linguagem não pode apenas ser melhor, mas também deve ser igualmente boa”. Além de ser mais rápido e suportar qualquer tipo de dados que a linguagem assembly pudesse usar, C também tinha o que Triplett chamou de "saída de emergência" - ou seja, suportava a inserção de código em linguagem assembly dentro de si.

"Rust é o futuro da programação do sistema, C é o novo montador" - um discurso de um dos principais engenheiros da Intel

Triplett acredita que C agora está se tornando o que a linguagem assembly era há muitos anos. “C é a nova montadora”, declara. Agora os desenvolvedores estão procurando uma nova linguagem de alto nível que não apenas resolva os problemas acumulados em C que não podem mais ser corrigidos, mas também ofereça novos recursos interessantes. Essa linguagem deve ser atraente o suficiente para que os desenvolvedores mudem para ela, deve ser segura, fornecer gerenciamento automático de memória e muito mais.

“Qualquer linguagem que queira ser melhor que C deve oferecer muito mais do que apenas proteção contra buffer overflow se realmente quiser ser uma alternativa atraente. Os desenvolvedores estão interessados ​​em usabilidade e desempenho, escrevendo código que seja autoexplicativo e que faça mais trabalho em menos linhas. As questões de segurança também precisam ser abordadas. Facilidade de uso e desempenho andam de mãos dadas. Quanto menos código você precisar escrever para conseguir algo, menos oportunidades terá de cometer erros, relacionados à segurança ou não”, explica Triplett.

Comparação de ferrugem e C

Em 2006, Graydon Hoare, funcionário da Mozilla, começou a escrever Rust como um projeto pessoal. E em 2009, a Mozilla começou a patrocinar o desenvolvimento do Rust para suas próprias necessidades, e também expandiu a equipe para desenvolver ainda mais a linguagem.

Uma das razões pelas quais a Mozilla estava interessada na nova linguagem é que o Firefox foi escrito em mais de 4 milhões de linhas de código C++ e tinha algumas vulnerabilidades críticas. Rust foi construído com segurança e simultaneidade em mente, tornando-o uma escolha ideal para reescrever muitos dos componentes do Firefox como parte do projeto Quantum para redesenhar completamente a arquitetura do navegador. A Mozilla também está usando Rust para desenvolver o Servo, um mecanismo de renderização HTML que eventualmente substituirá o atual mecanismo de renderização do Firefox. Muitas outras empresas começaram a usar Rust em seus projetos, incluindo Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu e muitas outras.

Rust resolve um dos problemas mais importantes da linguagem C. Ele oferece gerenciamento automático de memória para que os desenvolvedores não precisem alocá-la manualmente e depois liberá-la para cada objeto no aplicativo. O que diferencia o Rust de outras linguagens modernas é que ele não possui um coletor de lixo que remove automaticamente objetos não utilizados da memória, nem possui o ambiente de tempo de execução necessário para fazê-lo funcionar, como o Java Runtime Environment para Java. Em vez disso, Rust possui os conceitos de propriedade, empréstimo, referências e vida útil. “Rust tem um sistema para declarar chamadas a um objeto para indicar se o proprietário o está usando ou apenas pegando emprestado. Se você simplesmente pegar emprestado um objeto, o compilador acompanhará isso e garantirá que o original permaneça no lugar enquanto você fizer referência a ele. Rust também garantirá que o objeto seja removido da memória assim que seu uso for concluído, inserindo uma chamada correspondente no código em tempo de compilação sem tempo adicional”, diz Triplett.

A falta de um tempo de execução nativo também pode ser considerada uma característica positiva do Rust. Triplett acredita que as linguagens em que é executado são difíceis de usar como ferramentas de programação de sistemas. Como ele explica: “Você deve inicializar este tempo de execução antes de poder chamar qualquer código, você deve usar este tempo de execução para chamar funções, e o próprio tempo de execução pode executar código adicional nas suas costas em momentos inesperados”.

Rust também se esforça para fornecer programação paralela segura. Os mesmos recursos que o tornam seguro para a memória controlam coisas como qual thread possui qual objeto e quais objetos podem ser passados ​​entre threads e quais precisam de um bloqueio.

Todos esses recursos tornam o Rust atraente o suficiente para que os desenvolvedores o escolham como uma nova ferramenta para programação de sistemas. Porém, em termos de computação paralela, Rust ainda está um pouco atrás de C.

Triplett pretende criar um grupo de trabalho especial que se concentrará na introdução dos recursos necessários ao Rust para que ele possa igualar, superar e substituir totalmente o C na área de programação de sistemas. EM tópico no Reddit, dedicado ao seu discurso, disse que “o grupo FFI/C Parity está em processo de criação e ainda não começou a trabalhar”, por enquanto está pronto para responder a quaisquer perguntas, e no futuro publicará definitivamente planos imediatos para o desenvolvimento do Rust como parte de sua iniciativa para todas as partes interessadas.

Pode-se presumir que o grupo FFI/C Parity se concentrará primeiro em melhorar o suporte multi-threading em Rust, introduzindo suporte para BFLOAT16, um formato de ponto flutuante que apareceu nos novos processadores escaláveis ​​Intel Xeon, bem como estabilizando assembly inserções de código.



Fonte: 3dnews.ru

Adicionar um comentário