Introdução a Rust
Rust é uma linguagem de programação de sistemas construída em torno de uma ideia central: segurança de memória sem um coletor de lixo. Em vez de rastrear a memória em tempo de execução como Python ou JavaScript fazem, o compilador do Rust verifica o uso de memória do seu código em tempo de compilação, usando um conjunto de regras chamado ownership.
O código Rust compila para um binário nativo antes mesmo de rodar — o compilador (rustc) verifica cada tipo e cada regra de ownership com antecedência. Se o seu código violar qualquer uma delas, nada roda: você recebe um erro de compilação em vez de um crash, um vazamento de memória, ou uma data race.
Por que ownership importa
- Sem coletor de lixo, sem free() manual — regras de ownership aplicadas em tempo de compilação significam que a memória é limpa automática e deterministicamente, sem a sobrecarga em tempo de execução que um coletor de lixo adiciona
- Sem dereferenciamento de ponteiros null — Rust não tem null; um valor que pode estar ausente é representado com Option<T>, e o compilador força você a tratar os dois casos
- Sem data races — o borrow checker garante que dados mutáveis nunca podem ser acessados de dois lugares ao mesmo tempo, um problema que a maioria das linguagens só detecta em tempo de execução, se é que detecta
- Desempenho equivalente a C e C++ — nenhuma dessas garantias custa nada em tempo de execução; todas são verificadas uma única vez, em tempo de compilação
Uma prévia rápida
Aqui está um programa Rust real, executado de verdade no próprio compilador desta página — não é uma simulação:
fn main() {
let message: &str = "Hello from Rust!";
println!("{}", message);
}Hello from Rust!
É isso — uma variável com um tipo explícito, impressa com println!. A próxima lição executa seu primeiro programa completo e explica exatamente o que está acontecendo.
Practice Exercise
Declare uma variável chamada version do tipo i32 com o valor 5, depois imprima "Rust version:" seguido de version usando println!("Rust version: {}", version).