Categoria

Rust

Tasks, spawn e JoinHandle no Tokio
Rust

Tasks, spawn e JoinHandle no Tokio

No ecossistema Rust, o Tokio é um runtime assíncrono que permite escrever código concorrente de forma eficiente. Uma task no Tokio é uma unidade leve de execução agendada pelo runtime, similar a uma thread, mas muito mais barata em termos de recursos. Enquanto threads do sistema operacional consomem megabytes de memória cada, tasks Tokio ocupam apenas alguns kilobytes.

05/05/2026
Testes unitários e de integração no Rust
Rust 05/05/2026

Testes unitários e de integração no Rust

O Rust possui um sistema de testes integrado à linguagem e ao gerenciador de pacotes Cargo. O atributo #[test] marca uma função como teste, e a macro assert! verifica se uma condição é verdadeira:

Testing async code com tokio-test
Rust 05/05/2026

Testing async code com tokio-test

Testar código assíncrono em Rust apresenta desafios únicos. Diferente de funções síncronas, futures precisam de um runtime para serem executadas, e o comportamento temporal pode tornar testes lentos ou imprevisíveis. O tokio-test é uma biblioteca auxiliar que fornece ferramentas para testar código assíncrono baseado no runtime Tokio de forma determinística e eficiente.

Slice: referências para partes de coleções
Rust 05/05/2026

Slice: referências para partes de coleções

Um slice (ou "fatia") é uma referência para uma sequência contígua de elementos dentro de uma coleção, sem possuir a propriedade (ownership) dos dados. Diferente de um vetor ou array que detém seus elementos, um slice apenas "empresta" uma visão parcial ou total de uma coleção existente.

Smart pointers e o trait Deref
Rust 05/05/2026

Smart pointers e o trait Deref

Smart pointers são estruturas de dados que se comportam como ponteiros, mas possuem metadados e capacidades adicionais. Diferentemente das referências simples (&), que apenas apontam para um valor sem ownership, smart pointers como Box<T>, String e Vec<T> gerenciam a propriedade dos dados que apontam.

Stream trait e processamento assíncrono de dados
Rust 05/05/2026

Stream trait e processamento assíncrono de dados

O Stream trait é a abstração fundamental do ecossistema Rust para processamento assíncrono de sequências de valores. Assim como Iterator permite iterar sobre coleções de forma síncrona, Stream permite consumir valores que chegam ao longo do tempo de forma assíncrona.

Send e Sync: os traits de concorrência
Rust 05/05/2026

Send e Sync: os traits de concorrência

Programação concorrente é notoriamente difícil. Data races, deadlocks e comportamento indefinido são apenas alguns dos problemas que assombram desenvolvedores em linguagens como C e C++. Rust oferece uma abordagem radicalmente diferente: garantir segurança em tempo de compilação através de seu sistema de tipos.

Serde: serialização e desserialização em Rust
Rust 05/05/2026

Serde: serialização e desserialização em Rust

Serde é um framework de serialização e desserialização para Rust, considerado essencial no ecossistema da linguagem por sua eficiência, segurança de tipos e flexibilidade. Ele permite converter estruturas de dados Rust em formatos intercambiáveis (como JSON, YAML, TOML) e vice-versa, sem sacrificar a segurança de tipos que Rust oferece.

Redis com redis crate: cache e pub/sub
Rust 05/05/2026

Redis com redis crate: cache e pub/sub

Redis é um armazenamento de estrutura de dados em memória, open-source, que funciona como banco chave-valor. Suporta diversos tipos de dados como strings, hashes, listas, sets e sorted sets, além de oferecer funcionalidades avançadas como cache com expiração, filas de mensagens e pub/sub. Por sua velocidade e simplicidade, é amplamente utilizado em aplicações Rust para cache, sessões de usuário, filas de tarefas e comunicação em tempo real.

RefCell<T> e interior mutability
Rust 05/05/2026

RefCell<T> e interior mutability

O padrão interior mutability (mutabilidade interior) é uma das características mais poderosas e controversas do sistema de tipos de Rust. Ele permite que você mute dados através de referências imutáveis, contornando as regras de borrowing que o compilador normalmente impõe em tempo de compilação.