Pular para o conteúdo
Skillpedia
Código em geral48 mil · #4284

rust

Faz seu agente programar em Rust. Ótimo para sistemas que exigem alta performance e segurança. Ajuda a evitar erros comuns de memória e a criar software confiável.

O que ela faz

Este guia oferece as melhores práticas para escrever código eficiente e idiomático em Rust. Ele ensina como usar recursos da linguagem como 'ownership' e 'borrowing' corretamente, lidar com erros de forma robusta e utilizar iteradores e 'pattern matching' de maneira eficaz.

Quando usar

  • ✓Ao aprender os conceitos fundamentais de Rust.
  • ✓Ao refatorar código Rust existente para torná-lo mais eficiente.
  • ✓Ao depurar erros comuns em Rust.

Exemplo do que pedir para a IA

“Como posso evitar clonar dados desnecessariamente em Rust?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/super-code/rust/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/super-code/rust/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

A IA compara exemplos de código 'ruim' com exemplos de código 'bom' em Rust. Ela explica os princípios por trás das melhores práticas, como preferir referências (`&str`) a cópias (`String`) e usar o operador `?` para tratamento de erros.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add sickn33/agentic-awesome-skills --skill rust

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/super-code/rust/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Rust: Referência de Eficiência Idiomática

Quando Usar

  • Use esta habilidade quando a tarefa corresponder a esta descrição: Diretrizes de supercódigo específicas da linguagem para Rust.

Índice

  1. Propriedade e Empréstimo
  2. Tratamento de Erros
  3. Iteradores
  4. Correspondência de Padrões
  5. Structs e Enums
  6. Concorrência
  7. Antipadrões específicos de Rust

1. Propriedade e Empréstimo {#ownership}

// ❌ Cloning to avoid thinking about lifetimes
fn get_name(user: &User) -> String {
    user.name.clone()
}

// ✅ — return a reference when the data lives long enough
fn get_name(user: &User) -> &str {
    &user.name
}
// ❌ Taking ownership when borrowing suffices
fn print_name(name: String) {
    println!("{name}");
}

// ✅
fn print_name(name: &str) {
    println!("{name}");
}
// ❌ Unnecessary .to_string() / .to_owned() in hot paths
let key = id.to_string();
map.get(&key)

// ✅ — use Borrow trait; HashMap<String, V> accepts &str as key
map.get(id)

Prefira &str em vez de String em parâmetros de função, a menos que a função precise possuir os dados.


2. Tratamento de Erros {#errors}

// ❌ .unwrap() in production code
let file = File::open(path).unwrap();

// ✅
let file = File::open(path)
    .map_err(|e| AppError::Io { path: path.to_owned(), source: e })?;
// ❌ Manual match on Result for every call
match do_thing() {
    Ok(v) => v,
    Err(e) => return Err(e),
}

// ✅ — the ? operator
let v = do_thing()?;
// ❌ Box<dyn Error> everywhere (loses type info)
fn run() -> Result<(), Box<dyn std::error::Error>> { ... }

// ✅ — use thiserror for library errors, anyhow for application errors
use anyhow::{Context, Result};
fn run() -> Result<()> {
    do_thing().context("failed during run")?;
    Ok(())
}
// ❌ Separate error enum variant for every call site
enum Error { FileOpen, FileRead, Parse, Network, ... }

// ✅ — use thiserror with #[from] for automatic conversion
#[derive(thiserror::Error, Debug)]
enum Error {
    #[error("io error")] Io(#[from] std::io::Error),
    #[error("parse error")] Parse(#[from] serde_json::Error),
}

3. Iteradores {#iterators}

// ❌ Imperative accumulation
let mut result = Vec::new();
for item in &items {
    if item.active {
        result.push(item.name.to_uppercase());
    }
}

// ✅
let result: Vec<_> = items.iter()
    .filter(|i| i.active)
    .map(|i| i.name.to_uppercase())
    .collect();
// ❌ Manual sum
let mut total = 0;
for order in &orders { total += order.amount; }

// ✅
let total: u64 = orders.iter().map(|o| o.amount).sum();
// ❌ Index-based loop
for i in 0..items.len() {
    process(&items[i]);
}

// ✅
for item in &items {
    process(item);
}
// With index:
for (i, item) in items.iter().enumerate() {
    process(i, item);
}

Encadeie iteradores de forma preguiçosa; só .collect() quando você realmente precisar de uma coleção concreta.


4. Correspondência de Padrões {#patterns}

// ❌ if-let chain that should be match
if let Some(x) = opt {
    if x > 0 {
        use(x)
    }
}

// ✅
if let Some(x) = opt.filter(|&x| x > 0) {
    use(x)
}
// or match with guard:
match opt {
    Some(x) if x > 0 => use(x),
    _ => {}
}
// ❌ match with identical arms
match status {
    Status::Active => true,
    Status::Pending => true,
    Status::Inactive => false,
}

// ✅
matches!(status, Status::Active | Status::Pending)
// ❌ Destructuring in body instead of pattern
fn area(shape: &Shape) -> f64 {
    match shape {
        Shape::Circle(c) => { let r = c.radius; r * r * PI }
        Shape::Rect(r)   => { let w = r.width; let h = r.height; w * h }
    }
}

// ✅ — destructure in pattern
match shape {
    Shape::Circle(Circle { radius, .. }) => radius * radius * PI,
    Shape::Rect(Rect { width, height })  => width * height,
}

5. Structs e Enums {#structs}

// ❌ Enum variant carrying bool for binary state
enum State { Running(bool) } // true = paused?

// ✅ — explicit variants
enum State { Running, Paused, Stopped }
// ❌ Struct com muitos campos Option (stringly optional)
struct Config {
    timeout: Option<u64>,
    retries: Option<u32>,
    base_url: Option<String>,
}

// ✅ — use Default + builder pattern ou #[derive(Default)] com padrões sensatos
#[derive(Default)]
struct Config {
    timeout: u64,      // padrão 0 = sem timeout

…
Perguntas frequentes

O que é 'ownership' e 'borrowing'?

'Ownership' é como Rust gerencia a memória: cada valor tem um dono. 'Borrowing' permite que você empreste temporariamente o acesso a um valor sem transferir a propriedade.

Por que devo evitar `.unwrap()`?

`.unwrap()` pode causar falhas inesperadas no seu programa se o valor não for o esperado. É melhor usar o operador `?` ou `match` para lidar com erros de forma segura.

O que são iteradores em Rust?

Iteradores são uma forma eficiente de processar coleções de dados, permitindo encadear operações como filtrar e mapear elementos antes de coletar o resultado final.

Detalhes

Descrição original do autor

Language-specific super-code guidelines for rust.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#4284
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas