# Solod: podmnožina Go s manuálním řízením paměti a kompilací do C
Solod (So) — otevřený projekt, který představuje podmnožinu Go transpilovanou do C11. Kód se kompiluje pomocí GCC, Clang nebo zig cc bez runtime a sběrače odpadu. Transpiler je napsán v Go pod licencí BSD, podporuje Linux, macOS, Windows.
Manuální řízení paměti vylučuje GC, automatické alokování a počítání referencí. Paměť se ve výchozím nastavení umisťuje na zásobník, halda je dostupná přes Alloc/Free ze standardní knihovny. Kontroly typů a kontroly hranic polí jsou zabudované, ale visící ukazatele a úniky paměti nejsou sledovány. Pro ladění se doporučuje AddressSanitizer (-fsanitize=address).
Podporované konstrukce
Solod si zachovává klíčové vlastnosti Go pro pohodlí:
- Struktury a metody.
- Rozhraní.
- Plátky.
- Vícenásobný návrat hodnot (výsledek + chyba).
- Generika.
- Defer.
Chybí kanály, gorutiny, uzávěry — důraz na determinismus a výkon.
Integrace s existujícími nástroji Go: LSP servery, lintery, IDE, go test. Kód v Solod lze volat z C a naopak bez runtime.
Knihovny a použití
Přeportované balíčky Go pro C:
- strings
- io
- bytes
- mem
- slices
Dostupné obálky nad libc. Hlavní scénáře:
- Systémové programování s syntaxí Go a typovou bezpečností C.
- Převod knihoven Go do projektů C.
- Vysoce výkonné aplikace bez režie GC.
Výkon
Benchmarky ukazují výhodu oproti Go:
| Operace | Zrychlení oproti Go | Spotřeba paměti |
|----------|----------------------|------------------|
| Funkce na bajty | 1.5x | shodná |
| Bajtové buffery (čtení) | 1.3x | - |
| Bajtové buffery (zápis) | 2–4x | - |
| Mapa (získání int klíč) | 3.4x | - |
| Mapa (modifikace int klíč) | 0.6x (pomalší) | - |
| Mapa (získání string klíč) | rovnocenné | - |
| Mapa (modifikace string klíč) | 0.67x | - |
| Parsování/formátování int | 2x | - |
| float | 1.5/1.2x | - |
| Řetězcové funkce | 1.3x | - |
| Vytváření řetězců | 2–4x | -10–20% |
Solod je vhodný pro středně pokročilé a senior developery, kteří hledají rovnováhu mezi výrazností Go a nízkouúrovňovou kontrolou C.
Co je důležité
- Bez GC: manuální řízení paměti pro předvídatelný výkon.
- C-interoperabilita: přímé volání bez runtime.
- Nástroje Go: kompatibilita s ekosystémem.
- Výkon: v 1.3–4 násobku rychlejší než Go v klíčových operacích.
- Kontrola: kontroly hranic a typů bez režie runtime.
— Editorial Team
Zatím žádné komentáře.