Skip to content
Mario Santos edited this page Dec 14, 2025 · 1 revision

Rust

Visão Geral

Rust é uma linguagem de programação de sistemas, compilada, moderna e de alto desempenho, projetada com foco em segurança de memória, concorrência segura e controle de baixo nível.

Ela é especialmente adequada para aplicações que exigem:

  • Alto desempenho

  • Uso eficiente de recursos

  • Confiabilidade

  • Controle próximo ao hardware


Paradigma de Programação

Rust é uma linguagem multi-paradigma, suportando:

  • Programação imperativa

  • Programação funcional (funções puras, closures, iteradores)

  • Programação orientada a objetos (via structs e traits)

  • Programação genérica (parametrização por tipos)

Diferente de linguagens OO tradicionais, Rust não possui herança de classes, utilizando traits para composição e polimorfismo.


Sistema de Tipos

Rust possui um sistema de tipos fortemente tipado e estático.

Características principais:

  • Tipagem explícita com inferência

  • Verificação em tempo de compilação

  • Tipos genéricos

  • Tipos algébricos (enum)

  • Pattern matching

Exemplo:

enum Resultado {
    Sucesso(i32),
    Erro(String),
}

O sistema de tipos contribui fortemente para a detecção precoce de erros.


Gerenciamento de Memória

Rust utiliza um modelo baseado em Ownership (posse), Borrowing (empréstimo) e Lifetimes.

Princípios fundamentais:

  • Cada valor tem um único dono

  • Pode haver múltiplas referências imutáveis ou

  • Uma única referência mutável

  • Tudo é validado em tempo de compilação

Isso permite:

  • Eliminar garbage collector

  • Evitar memory leaks

  • Prevenir use-after-free e data races


Segurança

A segurança é um dos pilares da linguagem.

Garantias em tempo de compilação:

  • Acesso seguro à memória

  • Ausência de null pointers (uso de Option)

  • Concorrência sem data races

  • Controle rigoroso de mutabilidade

Rust separa código:

  • Safe Rust (padrão)

  • Unsafe Rust (controle manual, usado com cuidado)


Concorrência e Paralelismo

Rust oferece suporte nativo à concorrência segura.

Características:

  • Threads do sistema operacional

  • Message passing (std::sync::mpsc)

  • Shared state seguro com Mutex e Arc

  • Verificação de segurança em tempo de compilação

O compilador impede condições de corrida antes da execução.


Abstrações

Rust oferece abstrações de alto nível sem custo em tempo de execução (zero-cost abstractions).

Exemplos:

  • Iteradores

  • Traits

  • Closures

  • Generics

Essas abstrações são resolvidas em tempo de compilação, mantendo desempenho próximo ao de C/C++.


Desempenho

Rust oferece desempenho comparável a C e C++, sendo adequado para:

  • Engines gráficas

  • Sistemas embarcados

  • Game engines

  • Sistemas operacionais

  • Aplicações de tempo real

O controle explícito de memória e a ausência de GC garantem previsibilidade de performance.


Ecossistema e Ferramentas

Rust possui um ecossistema moderno e bem integrado:

  • Cargo — gerenciador de pacotes e build system

  • Crates.io — repositório de bibliotecas

  • rustfmt — formatação automática

  • Clippy — análise estática

  • rust-analyzer — suporte avançado a IDE

Essas ferramentas aumentam a produtividade e a qualidade do código.


Legibilidade

A legibilidade está relacionada à facilidade de leitura e compreensão do código.

Rust apresenta boa legibilidade, especialmente em projetos médios e grandes, devido a:

  • Sintaxe consistente

  • Mutabilidade explícita (mut)

  • Tipos bem definidos

  • Blocos de código claros

Exemplo:

let mut position: Vector3<f32> = Vector3::new(0.0, 1.0, 0.0);
position.x += 1.0;

Conceitos como ownership e lifetimes podem reduzir a legibilidade inicial para iniciantes.


Capacidade de Escrita (Writability)

Refere-se à facilidade de expressar soluções de forma clara e eficiente.

Rust possui alta capacidade de escrita após o domínio de seus conceitos:

  • Inferência de tipos

  • Pattern matching expressivo

  • Enums ricos

  • Macros para reduzir repetição

Exemplo:

match resultado {
    Ok(valor) => println!("{}", valor),
    Err(e) => eprintln!("Erro: {}", e),
}

A exigência de pensar em posse e empréstimos aumenta a carga cognitiva inicial.


Simplicidade

Rust prioriza simplicidade conceitual, evitando recursos perigosos ou redundantes.

  • Poucas construções especiais

  • Uma forma principal de resolver problemas

  • Ausência de herança clássica

A simplicidade vem acompanhada de rigor em tempo de compilação.


Ortogonalidade

Ortogonalidade refere-se à capacidade dos recursos da linguagem combinarem entre si.

Rust apresenta alta ortogonalidade:

  • Traits combinam com generics

  • Enums suportam dados complexos

  • Pattern matching é uniforme

  • Tipos e funções são altamente combináveis


Expressividade

Rust é altamente expressiva:

  • match substitui cadeias extensas de if/else

  • Iteradores e closures reduzem verbosidade

  • Enums expressam estados de forma segura

Exemplo:

let ativos: Vec<_> = objetos
    .iter()
    .filter(|o| o.visivel)
    .map(|o| o.id)
    .collect();

Manutenibilidade

Rust possui alta manutenibilidade, especialmente em projetos de longa duração.

Fatores principais:

  • Erros detectados em tempo de compilação

  • Tipagem forte

  • Ausência de ponteiros nulos

  • Ferramentas de análise integradas

O compilador atua como guia durante refatorações.


Curva de Aprendizado

Rust possui uma curva de aprendizado íngreme.

Principais desafios:

  • Ownership e borrowing

  • Lifetimes

  • Mensagens de erro extensas

Apesar disso, após dominada, a linguagem oferece alta produtividade e confiança.


Avaliação Geral da Linguagem

Critério | Avaliação -- | -- Legibilidade | Alta (após aprendizado) Capacidade de escrita | Alta Simplicidade | Média Ortogonalidade | Alta Expressividade | Alta Manutenibilidade | Muito alta

Adequação ao Projeto

Rust é uma escolha adequada para este projeto porque:

  • Garante segurança de memória em código gráfico complexo

  • Oferece desempenho necessário para renderização

  • Facilita manutenção de sistemas de baixo nível

  • Evita erros comuns em engines gráficas tradicionais

Essas características tornam Rust ideal como base para um motor gráfico moderno.