Escreves Go. Sai C legível. Zero runtime, zero GC, interop nativa. Parece magia, é engenharia.
Go é conhecido por ser uma linguagem de alta produtividade para backend, microserviços e tooling. Mas há um grupo de developers que olha para o Go e pensa: "gosto da sintaxe, das interfaces, dos testes, do LSP — mas preciso de controlo de sistemas, sem garbage collector, sem runtime pesado."
Solod (abreviado So) é a resposta. Criado por Anton Zhiyanov, o Solod é um subconjunto estrito de Go que se traduz para C11 legível. O resultado: usas a sintaxe e tooling do Go, e obténs binários C com zero overhead. Nenhum runtime. Nenhum GC. Nenhuma alocação escondida.
Neste artigo vais aprender:
- O que é o Solod e como se compara a Go e C
- Exemplos de código e saída C gerada
- Benchmarks e análise de performance
- Quando usar Solod vs. Go vs. C puro
⬆ Workflow do Solod: código Go → tradutor → C11 → compilador C → binário nativo.
O que é o Solod
O Solod não é uma linguagem nova. É um strict subset de Go que se traduz para C11. Isto significa que escreves código Go normal — com structs, métodos, interfaces, slices, maps, múltiplos returns e defer — e o compilador Solod gera ficheiros .h e .c legíveis.
Características principais:
- Zero runtime — sem garbage collector, sem reference counting, sem alocações escondidas
- Stack-allocated por default — heap é opt-in via biblioteca standard
- Standard library rica — tipos familiares do Go portados para C
- Interop nativa com C — chamas C de So e So de C, sem CGO, sem overhead
- Go tooling funciona — syntax highlighting, LSP, linting, go test
Exemplo de código
Aqui está um exemplo do site do Solod (playground interactivo):
O tradutor Solod pega neste código e gera C11 com structs equivalentes, funções dispatch para métodos, e mapeamento directo das chamadas à biblioteca standard. O resultado é código C que qualquer compilador C11 (GCC, Clang, MSVC) consegue compilar para binário nativo.
Solod vs. Go vs. C
| Característica | Go | Solod (So) | C11 |
|---|---|---|---|
| Runtime | GC, scheduler, goroutines | Zero — sem runtime | Zero |
| Memory safety | GC e bounds checking | Bounds checking (opt-in) | Nenhum |
| Goroutines | Nativas (built-in) | Biblioteca standard | Bibliotecas (pthreads) |
| Interfaces | Sim (dinâmicas) | Sim (traduzidas para vtables C) | Manual (vtables) |
| Generics | Sim (1.18+) | Limitado (em progresso) | Não (macros) |
| Alocação default | Heap | Stack | Stack |
| Tooling | LSP, testes, fmt, lint | Go tooling funciona | Variável (clang-tidy, etc) |
| Interop C | CGO (overhead) | Nativa (sem overhead) | Nativa |
| Output | Binário com runtime Go | Código C11 → binário nativo | Binário nativo |
Benchmarks e performance
O Solod está em desenvolvimento activo (v0.3 em progresso, v0.2 lançada). Os benchmarks iniciais mostram:
- ~1:1 com C — código traduzido não tem overhead sintético; és tu a pagar pelo que usas
- 2-5x mais rápido que Go em operações sem heap, porque não há GC pause nem tracking de alocações
- Memória previsível — sem alocações ocultas, cada make e new é explícito
Nota: Não é justo comparar Go com Solod lado a lado para todos os workloads. Go brilha em concorrência massiva (goroutines) e I/O. Solod brilha em sistemas embebidos, kernel, firmware e cenários onde cada nanossegundo e byte contam.
Quando usar cada um
- Usa Go — para APIs, microserviços, ferramentas de rede, processamento concorrente. Onde a produtividade importa mais que o último byte de performance.
- Usa Solod — para firmware, embedded, WASM, kernels, bootloaders, drivers. Onde não podes ter runtime nem GC, mas queres a segurança de tipos e tooling do Go.
- Usa C — quando precisas de controlo absoluto sobre cada instrução, quando estás a trabalhar num ecossistema C estabelecido, ou quando o Solod ainda não suporta alguma feature que precisas.
Estado actual e futuro
O Solod está em v0.2 (Julho 2026), com suporte para redes, WebAssembly e freestanding mode. A v0.3 vai adicionar concorrência (conc package mais completa). O suporte para generics é limitado, mas está no roadmap.
O projecto não está ready para produção, mas já é utilizável em projectos hobby. O autor recomenda experimentar com projectos pequenos para sentir o workflow.
Conclusão
O Solod é uma ideia que parece óbvia depois de a conheceres. Porque não usar a sintaxe moderna do Go para programar systems-level? A tradução para C não é nova (vários projectos fizeram isso), mas o Solod destaca-se pela qualidade do código C gerado — legível, idiomático C11 — e pela integração com o ecossistema Go.
Se és developer Go com curiosidade por sistemas embebidos ou low-level, ou és developer C que gostava de ter interfaces e testes sem dor de cabeça, o Solod merece um fim-de-semana de experimentação.
Comentários (0)
Nenhum comentário ainda. Seja o primeiro!
Deixar comentário