Pular para o conteúdo

Introdução ao Rust

Rust é uma linguagem de programação de sistemas, do tipo que você usaria para os mesmos trabalhos que C ou C++: sistemas operacionais, engines de jogos, navegadores, bancos de dados e ferramentas de linha de comando, em que velocidade e controle importam.

O que faz o Rust especial é que ele entrega esse desempenho de baixo nível sem as armadilhas clássicas. Em C, é fácil ler sem querer uma memória que já foi liberada ou causar uma data race (condição de corrida). Em Rust, um código assim normalmente nem compila: o compilador barra você na hora do build.

O Rust começou como um projeto pessoal de Graydon Hoare, que depois o levou para a Mozilla em busca de patrocínio. A versão estável 1.0 saiu em 2015. Hoje ele é mantido pela Rust Foundation e por uma grande comunidade open source.

Historicamente, você precisava escolher entre duas opções, cada uma com seu preço:

  • Linguagens de baixo nível (C, C++): rápidas e próximas do hardware, mas é você quem gerencia a memória na mão. Erros viram travamentos e falhas de segurança.
  • Linguagens de alto nível (Python, Java, Go): seguras e fáceis, mas dependem de um garbage collector (coletor de lixo), o que custa desempenho e previsibilidade.

A grande ideia do Rust é uma terceira opção: ele garante a segurança de memória em tempo de compilação usando um sistema chamado ownership (posse), que você vai aprender mais adiante neste curso. Sem garbage collector e sem free() manual: o compilador descobre sozinho quando uma memória não é mais necessária.

Um mapa aproximado de onde o Rust fica em relação a linguagens que você talvez conheça:

Linguagem Velocidade Segurança de memória Garbage collector
C / C++ Rápida Manual, sujeita a erros Não
Go Boa Segura Sim
Python Mais lenta Segura Sim
Rust Rápida Segura (verificada na compilação) Não

Resumindo: o Rust busca a velocidade do C e a segurança das linguagens de alto nível ao mesmo tempo. Para uma comparação mais detalhada, lado a lado e com código de verdade, veja Rust vs outras linguagens.

Você provavelmente já usa Rust sem saber:

  • Firefox: partes do motor de renderização são escritas em Rust
  • Cloudflare e Discord: serviços de backend em que desempenho é crítico
  • O kernel do Linux: agora aceita drivers escritos em Rust
  • Ferramentas de linha de comando: favoritas rápidas como ripgrep, bat e fd
  • WebAssembly: o Rust é uma das principais escolhas para rodar código com velocidade nativa no navegador

Você ainda não precisa entender cada detalhe. Só repare como o código é fácil de ler:

fn main() {
let name = "Rustacean";
println!("Olá, {name}!");
}

Saída:

Olá, Rustacean!
▶ Experimente você mesmo

“Segurança de memória” parece algo abstrato, então vamos a um caso concreto. Digamos que você tem uma lista com três notas e pede a décima, que não existe.

Em C, isso é permitido. O programa lê, sem avisar, o que estiver na memória logo depois da sua lista. Você pode receber um número aleatório, um travamento ou uma falha de segurança, e nada avisa você.

O Rust não deixa isso passar. Se o compilador consegue ver o erro, ele se recusa a compilar o programa:

fn main() {
let scores = [90, 85, 77];
println!("{}", scores[9]);
}
error: this operation will panic at runtime
--> src/main.rs:3:20
|
3 | println!("{}", scores[9]);
| ^^^^^^^^^ index out of bounds: the length is 3 but the index is 9

A mensagem (em inglês) diz que essa operação causaria um panic em tempo de execução: o índice está fora dos limites, já que o tamanho é 3 e o índice é 9.

E quando você não tem certeza se um item existe, o Rust oferece um jeito educado de perguntar. O .get() responde “aqui está” ou “não tem nada aqui” (None), em vez de entregar lixo para você:

fn main() {
let scores = [90, 85, 77];
println!("primeira nota: {}", scores[0]);
println!("décima nota: {:?}", scores.get(9));
}

Saída:

primeira nota: 90
décima nota: None
▶ Experimente você mesmo

Não se preocupe com [...], .get() ou None por enquanto. Você vai aprender isso direitinho em Arrays e Option. O importante agora: toda uma classe de bugs do tipo “ler memória que não devia” é pega antes de o programa rodar ou tratada com segurança enquanto ele roda.

Resposta sincera: a primeira ou as duas primeiras semanas podem ser frustrantes. Conceitos como ownership e borrowing (empréstimo) são realmente novos, e o compilador vai recusar código que você acha que deveria funcionar. Mas esse atrito é o compilador ensinando você a escrever código mais seguro, e a ficha cai mais rápido do que a maioria das pessoas espera.

Este curso foi feito para suavizar essa curva: passos pequenos, exemplos reais e um botão Experimente você mesmo em tudo.

Mude o programa de “Um gostinho” para que ele cumprimente você pelo nome, e adicione uma segunda linha que diga Bem-vindo ao Rust!. Dica: cada println! imprime uma linha, então você precisa de dois.

Ver solução
fn main() {
let name = "Ana";
println!("Olá, {name}!");
println!("Bem-vindo ao Rust!");
}

Saída:

Olá, Ana!
Bem-vindo ao Rust!
▶ Experimente você mesmo

Guarde a palavra Rust e o ano 2015 em dois nomes e depois imprima a frase Rust 1.0 foi lançado em 2015. usando os dois. Dica: você pode colocar mais de um {nome} dentro do mesmo println!.

Ver solução
fn main() {
let language = "Rust";
let year = 2015;
println!("{language} 1.0 foi lançado em {year}.");
}

Saída:

Rust 1.0 foi lançado em 2015.
▶ Experimente você mesmo
  • Rust é uma linguagem de sistemas rápida e segura: velocidade de C, sem garbage collector.
  • Ele evita bugs de memória em tempo de compilação por meio do ownership.
  • É usado em navegadores, kernels, serviços na nuvem, ferramentas de linha de comando e WebAssembly.
  • A curva de aprendizado existe, mas é curta, e o compilador está do seu lado.

A seguir: instalar o Rust e rodar seu primeiro programa no seu computador.

Teste o que aprendeu

1. Como o Rust consegue segurança de memória sem um garbage collector?

2. De acordo com a tabela de comparação, o que Rust e Go têm em comum?

3. Como as pessoas que programam em Rust se chamam?

Pontuação: 0 / 3

  • Introduction — The Rust Book (em inglês): para quem o livro oficial foi feito e como ele está organizado. É o melhor companheiro gratuito para este curso.
  • rust-lang.org: a página oficial, com os argumentos de “Por que Rust?” (desempenho, confiabilidade, produtividade) e histórias de empresas que usam a linguagem.
  • Aprenda Rust: a lista oficial de recursos de aprendizado, incluindo o Rust by Example e os exercícios do Rustlings.
  • Announcing Rust 1.0 — Rust Blog (em inglês): o post de 2015 que marcou o Rust como estável, e o que essa “estabilidade” promete para o seu código.
  • Rust Foundation (em inglês): a organização sem fins lucrativos que apoia o projeto Rust e quem o mantém.