O "Hello World" habitual
Este é um artigo muito simples, só para validar se está tudo a funcionar devidamente com o nosso ambiente e ir introduzindo conceitos.
Vamos aprender Rust ? Antes de começarmos com processos de instalações e escrever algum código, é importante perceber **onde estamos a meter os pés** neste percurso que muitos dizem complicado. Esta introdução muito simples tem como objetivo entregar algum contexto para entendermos porquê de Rust e porque o Rust funciona como funciona — e será assim que vamos embater tantas vezes no compilador - dizem (spoiler: dizem que dá luta, mas que isso é bom). Vamos ver...
Rust é uma linguagem de programação de sistemas criada pela Mozilla - seria mais correto dizer que começou com uma iniciativa experimental e pessoal de Graydon Hoare, um engenheiro de software em 2006 - em 2010 (e lançada estável em 2015) que promete uma coisa que parecia impossível:
"Performance de C/C++ com segurança de memória garantida em tempo de compilação."
É o tipo de linguagem usada para construir as fundações que outras coisas correm por cima:
Analogia: Se Python/JavaScript fosse como construir casas com madeira (fácil, rápido, mas podemos facilmente pegar fogo), Rust seria como construir com aço e cimento armado (exige planeamento, mas não cai).
Desde os anos 70 que existe um dilema na programação:
|
Linguagens como C/C++
|
Linguagens como Java/Python/JS
|
|---|---|
|
✅ Muito rápidas
|
✅ Fáceis de usar
|
|
✅ Controlo total da memória
|
✅ Sem crashes de memória
|
|
❌ Bugs de memória (70% dos CVEs da Microsoft e Google vêm daqui)
|
❌ Lentas (garbage collector)
|
|
❌ Crashes difíceis de debugar
|
❌ Mais memória consumida
|
Nunca iremos conseguir descobrir o custo destes bugs: A Microsoft estimou em 2019 que 70% das vulnerabilidades de segurança que eles corrigiam vinham de problemas de memória. O Google reportou números semelhantes para o Chrome.
Em vez de um garbage collector (como Java/Go) que limpa a memória em runtime, ou um programador responsável (como C/C++) que pode errar, o Rust introduziu um sistema de ownership verificado em tempo de compilação.
Uma comparação simples:

|
Pilar
|
Significado
|
Analogia
|
|---|---|---|
|
Ownership
|
Cada pedaço de memória só pode ter um dono de cada vez
|
Um livro só pode estar na estante de uma pessoa
|
|
Borrowing
|
Podes emprestar referências, mas com regras
|
Podes emprestar o livro, mas regras claras sobre quem lê e quando
|
|
Lifetimes
|
O compilador verifica que as referências não sobrevivem aos dados
|
O empréstimo tem prazo de validade
|
|
Zero-cost abstractions
|
Funcionalidades de alto nível não custam performance em runtime
|
Iteradores em Rust são tão rápidos como loops manuais em C (1)
|
(1) Isso significa que o compilador pega o seu código elegante e cheio de funções e o transforma, por baixo dos panos, num código de máquina puramente linear, exatamente idêntico (ou às vezes até melhor) ao que um programador experiente escreveria manualmente em C.
|
Conceito
|
Python/JavaScript
|
Java/C#
|
C/C++
|
Rust
|
|---|---|---|---|---|
|
Null
|
None/null por todo o lado |
null causa NullPointerException |
Ponteiros nulos
|
Option — obrigatório tratar |
|
Erros
|
Exceções (
try/except) |
Exceções
|
Códigos de erro ignoráveis
|
Result — o compilador obriga |
|
Mutabilidade
|
Tudo mutável por defeito
|
Tudo mutável por defeito
|
Tudo mutável
|
Imutável por defeito, mutabilidade explícita
|
|
Threads
|
GIL (Python) limita; JS é single-thread
|
Threads com risco de data races
|
Threads com risco de data races
|
Compilador impede data races
|
|
Memória
|
Garbage collector
|
Garbage collector
|
Manual (com riscos)
|
Ownership system (sem GC, sem riscos)
|
Depois de alguma pesquisa, encontra-se abaixo um resumo das vantagens e desvantagens que encontrei referenciadas.
Performance previsível
- Sem garbage collector a pausar o programa
- Controlo total sobre alocações de memória
- Tão rápido quanto C/C++ na maioria dos casos
Segurança de memória garantida
- Classes inteiras de bugs não compilam
- Sem segmentation faults em código safe
- Sem data races em código multi-thread
Compilador como professor
- Mensagens de erro excelentes (melhores que qualquer outra linguagem)
- Sugere correções, explica o porquê
- Aprendes conceitos profundos só por ler os erros
Ecossistema moderno
- cargo é considerado o melhor gestor de pacotes da indústria
- crates.io com milhares de bibliotecas de qualidade
- rust-analyzer oferece IDE experience de topo
Concorrência sem medo
- Podes usar todas as cores do CPU sem risco de corrupção
- Async/await é poderoso e bem suportado (Tokio)
Adoção crescente
- Linux kernel aceita Rust desde 2022
- Microsoft, Google, AWS, Cloudflare, Discord, Dropbox usam em produção
- "Linguagem mais amada" no Stack Overflow por 9 anos seguidos (2016-2024)
Multi-plataforma
- Corre em: servidores, browsers (WASM), desktop, mobile, IoT, embedded, consolas
Curva de aprendizagem íngreme ⚠️
- Os primeiros 2-3 meses são difíceis
- O borrow checker vai rejeitar código que "parece correcto"
- Conceitos como ownership, lifetimes e Send/Sync exigem mudança mental
- Esta é a razão #1 pela qual as pessoas desistem
Tempo de compilação
- Projetos grandes demoram a compilar (minutos em CI)
- cargo check é rápido, cargo build --release é lento
Ecossistema ainda a amadurecer
- GUIs nativas não são tão boas quanto Electron/Qt
- Menos bibliotecas que Python para certas áreas (ex: data science pura)
- Game dev é possível (Bevy) mas menos maduro que Unity/Unreal
Muito verboso às vezes
- Lidar com Result e Option explicitamente cansa no início
- Lifetimes em assinaturas de funções podem parecer burocracia
Debugging async pode ser complexo
- Stack traces em código async são menos informativas
- Exige ferramentas específicas
Menos ofertas de emprego (por enquanto)
- Ainda é nicho vs Java/Python/JS
- Mas a tendência é de crescimento forte e salários altos
Vamos ver se os próximos tempos serão desafiantes e se estamos á altura do desafio ! Comecemos ?
Este é um artigo muito simples, só para validar se está tudo a funcionar devidamente com o nosso ambiente e ir introduzindo conceitos.
Como em qualquer tema relacionado com informática, neste caso programação em Rust, para podermos tirar o melhor partido do recurso ou aprendizagem, teremos que preparar o nosso sistema para que este se encontre melhor adaptado para esse objetivo. Iremos então começar por estes passos que permitirão começar sem surpresas.
Uma lista de recursos de leitura que podem ser utilizados na aprendizagem da linguagem de programação Rust. Esta lista irá evoluindo gradualmente consoante novos recursos sejam encontrados. Se conhecer algum recurso que considere útil, poderá partilhar o mesmo nos comentários.
Ainda sem comentários aprovados. Sê o primeiro a escrever!