Powrót do strony głównej

Solod: Go bez GC z kompilacją do C

Solod — otwarty język, podzbiór Go z transkompilacją do C11 i ręcznym zarządzaniem pamięcią. Obsługuje kluczowe konstrukcje Go bez GC, kanałów i gorutyn. Wydajność wyższa niż Go w operacjach z pamięcią i stringami.

Otwarty Solod: podzbiór Go do programowania w C
Advertisement 728x90

# 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:

Google AdInline article slot
  • 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:

Google AdInline article slot
  • 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 |

Google AdInline article slot

|---------------------------|----------------------|-----------------|

| 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

Advertisement 728x90

Czytaj dalej