Saltar para o conteúdo principal
Desenvolvimento em Rust

Serviços de desenvolvimento em Rust

Construímos sistemas de produção em Rust onde um crash, uma data race ou um percurso lento não são opção. O núcleo crítico para o desempenho do nosso próprio produto está escrito em Rust, por isso não é uma linguagem que estamos a experimentar: temo-la em produção.

O que está incluído

Onde o Rust conquista o seu lugar

O Rust oferece desempenho ao nível do C, com segurança de memória e de threads garantida em tempo de compilação. Não há pausas do garbage collector e desaparece uma classe inteira de crashes. Usamo-lo onde essas propriedades compensam, e dizemos-lhe quando uma stack mais simples o serviria melhor.

No âmbito
  • Software de sistemas e de redes: protocolos, proxies, agentes, daemons
  • Backends e serviços de plano de dados de alto débito e baixa latência
  • Pipelines de multimédia em tempo real e de processamento de sinal
  • Componentes críticos em desempenho dentro de uma aplicação existente (via FFI / módulos nativos)
  • Bibliotecas nativas multiplataforma partilhadas entre desktop e mobile
  • Módulos WebAssembly compilados a partir de Rust para o browser
Como trabalhamos

Como construímos em Rust

Uma abordagem idiomática e orientada a testes. Apoiamo-nos no sistema de tipos e no borrow checker para tornar impossíveis categorias inteiras de bugs, e nas ferramentas para manter a base de código limpa à medida que cresce.

  1. 1

    Design e spike

    Modelamos o domínio em tipos, validamos as partes arriscadas com um spike focado e confirmamos que o Rust é a escolha certa antes de avançar.

  2. 2

    Construção idiomática

    Design centrado na ownership, erros modelados como tipos e tratados explicitamente, e código assíncrono onde há concorrência em jogo.

  3. 3

    Testar e verificar

    Testes unitários e de integração, property tests onde fazem sentido, e benchmarks para que as afirmações de desempenho sejam medidas, e não adivinhadas.

  4. 4

    Reforçar e rever

    clippy clean, dependências auditadas com cargo-audit, blocos unsafe justificados e minimizados, cada alteração revista por pares.

  5. 5

    Lançar e integrar

    Builds reproduzíveis, fronteiras FFI ou de serviço limpas e a documentação de que a sua equipa precisa para assumir o código após a transição.

Entregáveis

O que recebe

Rust de nível de produção que a sua equipa consegue manter, e não um protótipo engenhoso que só o autor entende.

O que recebe
  • Uma base de código em Rust clippy-clean, bem documentada e com uma estrutura de módulos clara
  • Uma suíte de testes unitários e de integração, com property tests onde fizer sentido
  • Benchmarks para os percursos críticos em desempenho, com números de referência
  • Builds reproduzíveis e CI integrado desde o início
  • Uma auditoria de dependências e de código unsafe, com tudo o que é arriscado assinalado
  • Notas de arquitetura e uma sessão de transição para os seus engenheiros
Stack e abordagem

A toolchain de Rust em que trabalhamos

Rust estávelRust assíncronoLogging estruturadoTratamento de erros tipadocargo-audit, clippyFFI, WebAssembly

Crates maduros e bem mantidos, e uma árvore de dependências pequena que a sua equipa consegue auditar e assumir após a passagem.

Perguntas

Perguntas sobre desenvolvimento em Rust

O Rust é a escolha certa para o meu projeto?

O Rust destaca-se quando o desempenho, a fiabilidade e a segurança importam ao mesmo tempo: software de sistemas, redes, pipelines em tempo real ou percursos críticos dentro de uma aplicação maior. Para uma aplicação web CRUD comum ou um MVP rápido, uma stack de mais alto nível como Go ou TypeScript costuma chegar mais depressa a produção. Dizemos-lhe com franqueza o que se adequa, em vez de recorrer ao Rust por defeito.

Conseguem adicionar Rust a um sistema existente?

Sim. Um padrão comum é manter a sua stack atual e substituir apenas o componente crítico em desempenho por uma biblioteca em Rust exposta via FFI, ou um serviço Rust autónomo por trás da sua API. Obtém a velocidade e a segurança onde elas contam, sem uma reescrita.

Como mantêm o Rust unsafe sob controlo?

Tratamos o unsafe como último recurso, isolamo-lo atrás de abstrações seguras e documentamos os invariantes de que cada bloco unsafe depende. As dependências são auditadas com cargo-audit, e toda a base de código tem de passar no clippy antes de ser integrada.

Comprovam as afirmações de desempenho?

Fazemos benchmarks aos percursos que importam e entregamos-lhe os números de referência, para que «rápido» seja algo que pode verificar e não algo em que tem de acreditar. Se um objetivo não for cumprido, fica a saber, e nós sabemos onde procurar.

Tem um problema de sistemas que vale a pena fazer bem.

Diga-nos o que tem de ser rápido, seguro e correto. Avaliamos o âmbito e dizemos-lhe se o Rust é a resposta.