sccache vs ccache: Caching de Compilador para CI
O ccache é o consagrado cache local de compilador para C/C++; o sccache adiciona armazenamento compartilhado/remoto e suporta mais linguagens, incluindo Rust.
Ambos fazem cache das saídas do compilador para que fontes que não mudaram não sejam recompiladas. O ccache é maduro e focado em caching local de C/C++; o sccache (da Mozilla) pode usar armazenamento remoto (S3, GCS, etc.) e suporta C/C++ mais Rust e outras, o que combina com runners de CI efêmeros.
| sccache | ccache | |
|---|---|---|
| Linguagens | C/C++, Rust, mais | C/C++ (e via wrappers) |
| Local do cache | Local ou remoto (S3/GCS/etc.) | Disco local |
| Encaixe em CI efêmero | Forte (cache remoto compartilhado) | Precisa de persistência do cache |
| Maturidade | Estabelecido | Muito maduro, amplamente usado |
| Suporte a Rust | Sim | Não nativo |
Onde o sccache vence
Em runners de CI efêmeros, os caches locais desaparecem entre os jobs. O sccache pode apontar para um backend remoto compartilhado (S3/GCS), então os cache hits sobrevivem entre runners e execuções. Ele também faz cache da compilação de Rust, o que o ccache não trata nativamente. Para CI de Rust ou builds distribuídos, o sccache é a escolha natural.
Onde o ccache vence
Para C/C++ em máquinas persistentes ou onde você consegue preservar um diretório de cache local, o ccache é extremamente maduro, simples e rápido, com configuração profunda e um longo histórico. Se você não precisa de armazenamento remoto ou de Rust, o ccache é difícil de superar.
Em CI
Com o ccache, persista o diretório de cache via a action de cache da sua CI (com key baseada em toolchain + fontes). Com o sccache, configure um backend remoto para que os hits funcionem entre runners efêmeros. De qualquer forma, o caching de compilador pode reduzir substancialmente o tempo de rebuild.
O veredito
Use o sccache para Rust, times distribuídos ou runners efêmeros que precisam de um cache remoto compartilhado; use o ccache para caching local de C/C++ maduro e simples em máquinas persistentes. Ambos aceleram builds repetidos de forma significativa.