Você sabe o que é uma linguagem de programação multiparadigma? Basicamente, é aquela em que é possível programar com diferentes métodos de desenvolvimento. Essa é uma das características da linguagem Rust, pois com ela é possível utilizar a linguagem funcional, orientada a objetos, além de imperativa.
E não é só isso! De acordo com o ranking da Stack Overflow, a linguagem de programação está em primeiro lugar como a mais amada entre a comunidade de pessoas programadoras, com a marca de 86,1% das respostas.
Se você não conhece essa linguagem, não se preocupe! Fizemos este post para que você entenda por que ela é tão querida pela comunidade. A seguir, vamos explicar:
- O que é Rust?
- Quais as principais características da Rust?
- Quais as vantagens e desvantagens do Rust?
- Exemplo de código com a linguagem Rust
Vamos lá? Boa leitura!
O que é Rust?
A linguagem Rust é relativamente nova, pois a primeira versão de código aberto foi lançada em 2010 pela Mozilla. Ela é utilizada para o desenvolvimento de diferentes tipos de aplicações, como ferramentas de linha de comando, web services, ferramentas para DevOps, jogos, aplicativos de IoT — Internet of Things — e muito mais.
As características da linguagem permitem que ela tenha performance suficiente para ser utilizada tanto no desenvolvimento de sistemas de nível mais baixo quanto no de aplicações de alto nível. Não é à toa que ela surgiu como uma alternativa para o C++, entretanto, com algumas características mais modernas, que ajudam a evitar falhas e problemas de segurança.
Principais características da Rust?
O Rust contém algumas características que a diferem das linguagens semelhantes a ela, como a linguagem C ou C++. Confira as principais a seguir!
Performance
Muitas linguagens de programação utilizam um coletor de lixo, também chamado Garbage Collector. Trata-se de um mecanismo que libera a memória alocada por variáveis que não estão mais em utilização. O Rust prepara boa parte do gerenciamento de memória durante o processo de compilação. Dessa forma, não necessita de um componente a mais para desempenhar essa atividade.
Essa característica garante mais velocidade à aplicação, já que ela não precisa de um runtime junto com o objeto executável. Desse modo, há um ganho em performance. Por isso, uma das aplicações em Rust são para o desenvolvimento de bibliotecas que podem ser acessadas por diferentes tipos de linguagens por meio de interfaces, inclusive em aplicações web.
Confiabilidade
O compilador do Rust é extremamente eficiente. Ele é capaz de detectar diferentes erros de programação que possam interferir no funcionamento da aplicação. Além disso, o Rust conta com um sistema de gestão de memória em tempo de execução. Isso significa que sempre que uma variável deixa de ser utilizada pela aplicação, ela é eliminada automaticamente.
Essa característica permite maior velocidade no acesso à memória durante a execução da aplicação. No mais, ela garante que não exista estado de memória inválido, ou seja, não existem ponteiros nulos ou sozinhos, que causariam falhas de segmentação de memória.
Produtividade
O Rust conta com um compilador superinteligente. Por isso, consegue identificar erros de programação que podem passar despercebidos em outras linguagens. Ele ainda conta com uma vasta documentação, rica em detalhes, explicações e exemplos sobre como utilizar a linguagem.
Ele também oferece ferramentas de compilação e suporte inteligente, que podem ser integradas em diversos editores de códigos disponíveis. Todas essas características ajudam a aumentar a produtividade das pessoas programadoras.
Vantagens e desvantagens da linguagem Rust:
Uma das vantagens do Rust é a utilização de tipagem estática. Embora exista uma discussão entre a comunidade programadora sobre a preferência entre tipagem estática ou dinâmica, essa característica garante ao Rust mais confiabilidade em suas aplicações.
Isso porque a tipagem estática é definida em tempo de desenvolvimento e quando há a compilação, o Rust faz todo o gerenciamento para evitar erros em tempo de execução.
Outro ponto positivo dessa linguagem é a sua verificação de empréstimo, também chamada de borrow checker. Trata-se de um recurso que verifica quando uma referência perde a sua funcionalidade. Isso acontece, por exemplo, quando uma variável recebe o valor de outra. Confira o código a seguir.
fn main() {
let mensagem = String::from("Vamos estudar Rust?");
let pergunta = mensagem;
println!("{}", mensagem);
println!("{}", pergunta);
}
/*saída:
move occurs because `mensagem` has type `std::string::String`, which does not implement the `Copy` trait
let pergunta = mensagem;
*/
Ao tentar implementar esse código, o compilador retorna um erro em que diz que existe uma cópia indevida da variável mensagem. Isso acontece porque ao atribuir o valor correspondente de mensagem à pergunta, o Rust entende que a primeira variável não é mais necessária. Entretanto, não existe o coletor de lixo e esse valor não pode ficar perdido na aplicação, o que causaria um acesso inválido à memória.
Existem situações em que é preciso utilizar um recurso semelhante. Por isso, o Rust permite a execução desse tipo de situação com uma pequena modificação no código. Perceba que adicionamos o símbolo & antes da variável mensagem. Dessa forma, foi possível executar a atribuição sem que o compilador retorne o erro anterior. Veja abaixo:
fn main() {
let mensagem = String::from("Vamos estudar Rust?");
let pergunta = &mensagem;
println!("{}", mensagem);
println!("{}", pergunta);
}
/* saída:
Vamos estudar Rust?
Vamos estudar Rust?
*/
O que pode ser considerado uma desvantagem em Rust é o rigor do compilador, ou seja, as pessoas programadoras precisam se esforçar muito mais para evitar erros durante o processo de compilação.
Entretanto, isso acaba proporcionando um aprendizado de melhores práticas de programação, pois o objetivo do Rust language é oferecer velocidade e segurança em suas aplicações e boa parte disso corresponde a um código bem escrito.
Exemplo de código com a linguagem Rust
Nada melhor que um exemplo para demonstrar como o Rust programming language funciona. Confira o código a seguir.
fn main() {
let dias_semana = vec!["Segunda-feira", "Terça-feira", "Quarta-feira","Quinta-feira", "Sexta-feira","Sábado","Domingo"];
for dia in &dias_semana {
println!(" {}", dia);
}
}
/* saída:
Segunda-feira
Terça-feira
Quarta-feira
Quinta-feira
Sexta-feira
Sábado
Domingo
*/
Nesse exemplo criamos uma variável com um array, que é indicado pela declaração vec!. Ela contém os dias da semana e utilizamos a estrutura de repetição for..in para imprimir cada elemento da variável.
Viu só como linguagem Rust é uma excelente alternativa para aplicações que precisam de um bom gerenciamento de memória e velocidade? Além disso, é uma ferramenta versátil, pois pode ser utilizada tanto para o desenvolvimento de sistemas de baixo nível quanto em aplicações web.
Gostou do nosso conteúdo sobre Rust lang? Então, confira este post sobre as definições e diferenças entre linguagens de alto nível vs linguagem de baixo nível!