Představení programovací jazyk Solod (So), poskytující podmnožinu jazyka Go, transkompilovanou do podoby v jazyce C (C11), vhodnou pro sestavení překladači GCC, Clang a zig cc. Klíčovým rozdílem Solodu od Go je použití ruční správy paměti, fungující bez použití garbage collectoru, bez automatického přidělování paměti a bez počítání odkazů. Transpiler pro Solod je napsán v jazyce Go a distribuováno pod licencí BSD. Podporováno je fungování v Linuxu, macOS a Windows.
Jazyk podporuje struktury, metody, rozhraní, řezy, vracení funkcemi několika hodnot (například výsledek + kód chyby), generiku a odložené volání (defer). Aby byl jazyk jednodušší, nejsou v něm podporovány kanály, kooperativní úlohy a uzávěry. Při vývoji v jazyce Solod lze používat existující LSP servery, lintery, integrovaná vývojová prostředí a editory kódu podporující jazyk Go, stejně jako nástroj 'go test'.
Kód napsaný v Solodu může integrovat s aplikacemi v jazyce C (jazyk C může volat funkce v Solodu a naopak) a nevyžaduje připojení runtime. Mezi klíčové oblasti použití patří systémové programování s blízkými možnostmi jazyka C, ale se syntaxí ve stylu Go a zajištěním kontroly typů. Solod může být také použit k portování Go knihoven pro použití v projektech v jazyce C. Do jazyka C byly portovány Go balíčky:
- strings
- io (antonz.org)
- bytes
- mem
- slices
a atd. Kromě sady portovaných Go knihoven v programech na jazyce Solod lze použít obálky nad standardní C knihovnou libc.
Ve výchozím nastavení je veškerá paměť alokována na zásobníku, ale pomocí funkcí Alloc / Free standardní knihovny lze alokovat paměť na haldě. Garbage collection a počítání odkazů se nepoužívají, ale v Solodu jsou k dispozici možnosti pro kontrolu typů a havarijní ukončení při přístupu za hranice pole. Kontroly na návrat visících ukazatelů dangling pointer a nevolnění paměti se neprovádějí. Hlavním způsobem, jak odhalit problémy při práci s pamětí, je použití AddressSanitizer -fsanitize=address v moderních překladačích.
Co se týče výkonu, na většině případů jsou zkompilované programy napsané v Solodu rychlejší programů na Go:
- Výkon funkcí z balíku Byte je o 50 % rychlejší při identické spotřebě paměti;
- Práce s byty je rychlejší o 1,3× při čtení a o 2-4× při zápisu;
- V balíku Map je výběr podle celočíselného klíče rychlejší o 3,4×, ale modifikace klíčů je pomalejší o 1,6×;
- Výběr podle řetězcových klíčů je na stejné úrovni jako v jazyce Go, ale modifikace je pomalejší o 1,5×;
- Parsing a formátování celých čísel je rychlejší o 2×, a u čísel s plovoucí desetinnou čárkou o 1,5/1,2×;
- Funkce pro řetězce jsou rychlejší o 1,3× a vytváření řetězců je rychlejší o 2-4× při snížení spotřeby paměti o 10-20 %.
Zdroj: linux.org.ru
