Registro de decisão de arquitetura: linguagem de programação Rust
Número da decisão: AR-001
Título da decisão: adoção da linguagem de programação Rust
Data: 1º de dezembro de 2021
Estado: aceito
Declaração do problema
À medida que continuamos a desenvolver aplicações de software, observamos que está cada vez mais difícil mitigar possíveis vulnerabilidades de segurança e evitar erros em tempo de execução. Com as linguagens de programação existentes, como C e C++, continuamos a enfrentar problemas como estouros de buffer, vazamentos de memória e comportamento indefinido que levam a falhas nas aplicações. Precisamos de uma linguagem de programação que ofereça garantias de segurança de memória e seja eficiente o bastante para dar suporte a aplicações críticas em desempenho.
Considerações
Várias linguagens de programação são projetadas para tratar os problemas existentes. Entre elas, a linguagem de programação Rust ganhou atenção significativa da comunidade de desenvolvedores devido às suas características de design singulares. As considerações incluem;
Segurança de memória e proteção
Desempenho e eficiência
Apoio da comunidade e adoção
Curva de aprendizado
Ferramentas e ecossistema
Compatibilidade com sistemas de software existentes.
Restrições
Adotar uma nova linguagem de programação exige retreinar os desenvolvedores, o que leva tempo e recursos. Integrar a linguagem ao fluxo de trabalho de desenvolvimento existente pode ser um desafio. Devemos garantir compatibilidade com os sistemas existentes e evitar mudanças incompatíveis para manter a continuidade.
Implementação
Nossa equipe de desenvolvimento passará por treinamento para aprender e se familiarizar com a linguagem de programação Rust.
Criaremos um novo projeto em Rust, em caráter experimental, para avaliar sua compatibilidade e adequação aos nossos propósitos de desenvolvimento.
Migraremos gradualmente os sistemas existentes escritos em C e C++ para Rust.
Colaboraremos com a comunidade Rust para explorar as ferramentas e bibliotecas disponíveis que possam aprimorar o nosso fluxo de trabalho de desenvolvimento.
Monitoraremos o desempenho do Rust e o compararemos regularmente com o desempenho das linguagens de programação existentes.
Adotaremos uma abordagem de longo prazo que equilibre os custos de treinamento, integração e os benefícios potenciais do uso do Rust.
Justificativa
Adotamos o Rust devido às suas características singulares, projetadas para oferecer garantias de segurança de memória e proteção, mantendo desempenho e eficiência. O robusto sistema de tipos do Rust, o verificador de empréstimos (borrow checker) e os conceitos de segurança de memória o tornam muito adequado para desenvolver aplicações críticas em desempenho e em segurança. Além disso, o Rust tem uma comunidade significativa de desenvolvedores, o que nos permite acessar uma ampla gama de ferramentas, bibliotecas e ecossistema que apoiam o nosso fluxo de trabalho de desenvolvimento. Embora o Rust tenha uma curva de aprendizado, acreditamos que os benefícios de adotá-lo superam os custos e oferecem uma excelente oportunidade de crescimento e inovação contínuos.
Consequências
A adoção do Rust exigirá um investimento significativo de tempo e recursos para treinar desenvolvedores e integrar a linguagem ao fluxo de trabalho de desenvolvimento existente.
Adotar o Rust pode causar algum grau de problemas de compatibilidade com sistemas existentes, exigindo refatoração e modificações.
A adoção do Rust pode aumentar o número de desenvolvedores que podem contribuir para o nosso projeto, ao atrair desenvolvedores Rust que queiram trabalhar em projetos empolgantes.
A adoção pode levar a melhor desempenho, eficiência e segurança em comparação com as linguagens existentes.
Por fim, adotar o Rust traz o benefício potencial de reduzir vulnerabilidades de segurança em nossas aplicações.