# Solod: podzbiór Go z ręcznym zarządzaniem pamięcią i kompilacją do C
Solod (So) to otwarty projekt, stanowiący podzbiór Go, transpilowany do C11. Kod kompiluje się za pomocą GCC, Clang lub zig cc bez runtime i garbage collectora. Transpiler napisany w Go na licencji BSD, wspiera Linux, macOS, Windows.
Ręczne zarządzanie pamięcią eliminuje GC, automatyczne alokacje i liczenie referencji. Pamięć domyślnie umieszczana jest na stosie, kopiec dostępny przez Alloc/Free ze standardowej biblioteki. Wbudowane są sprawdzanie typów i bounds checking dla wyjścia poza granice tablicy, ale wiszące wskaźniki i wycieki pamięci nie są śledzone. Do debugowania polecany jest AddressSanitizer (-fsanitize=address).
Obsługiwane konstrukcje
Solod zachowuje kluczowe funkcje Go dla wygody:
- Struktury i metody.
- Interfejsy.
- Slice'y.
- Wielokrotny zwrot wartości (wynik + błąd).
- Generyki.
- Defer.
Brakuje kanałów, gorutyn, zamknięć — fokus na determinizmie i wydajności.
Integracja z istniejącymi narzędziami Go: serwery LSP, lintery, IDE, go test. Kod Solod wywoływany jest z C i odwrotnie bez runtime.
Biblioteki i zastosowania
Przeniesione pakiety Go do C:
- strings
- io
- bytes
- mem
- slices
Dostępne wrappery nad libc. Główne scenariusze:
- Programowanie systemowe z syntaxem Go i typizacją C.
- Portowanie bibliotek Go do projektów C.
- Aplikacje wysokowydajne bez overheadu GC.
Wydajność
Benchmarki pokazują przewagę nad Go:
| Operacja | Przyspieszenie vs Go | Zużycie pamięci |
|---------------------------|----------------------|-----------------|
| Funkcje bajtowe | 1.5x | identyczne |
| Bufor bajtowy (odczyt) | 1.3x | - |
| Bufor bajtowy (zapis) | 2–4x | - |
| Map (int key get) | 3.4x | - |
| Map (int key mod) | 0.6x (wolniej) | - |
| Map (string key get) | paritet | - |
| Map (string key mod) | 0.67x | - |
| Parsowanie/formatowanie int | 2x | - |
| float | 1.5/1.2x | - |
| Funkcje stringowe | 1.3x | - |
| Tworzenie stringów | 2–4x | -10–20% |
Solod nadaje się dla programistów middle/senior, szukających balansu między wyrażalnością Go a niskopoziomową kontrolą C.
Co ważne
- Bez GC: ręczne zarządzanie pamięcią dla przewidywalnej wydajności.
- C-interop: bezpośrednie wywołania bez runtime.
- Narzędzia Go: kompatybilność z ekosystemem.
- Wydajność: 1.3–4 razy szybsze niż Go w kluczowych operacjach.
- Sprawdzanie: bounds checking i typizacja bez overheadu runtime.
— Editorial Team
Brak komentarzy.