Projekt Solod vyvíjí podmnožinu jazyka Go, která je přeložena do jazyka C.

Je představen programovací jazyk Solod (So). Poskytuje podmnožinu jazyka Go transkompilovanou do reprezentace C11 vhodné pro kompilaci s kompilátory GCC, Clang a zig cc. Klíčovým rozdílem mezi Solodem a Go a Tinygo je použití manuální správy paměti, která funguje bez garbage collectoru, automatické alokace paměti nebo počítání referencí. Transpilátor pro Solod je napsán v Go a distribuován pod licencí BSD. Běží na Linuxu, macOS a Windows.

Jazyk podporuje struktury, metody, rozhraní, segmenty, funkce, které vracejí více hodnot (např. výsledek + chybový kód), generika a odložená volání (defer). Pro zjednodušení jazyk nepodporuje kanály, korutiny ani uzávěry. Vývoj Solod může využívat stávající LSP servery, lintery, integrovaná vývojová prostředí a editory kódu, které podporují jazyk Go, a také nástrojovou sadu „go test“.

Kód napsaný v Solodu lze integrovat s aplikacemi v jazyce C (C může volat funkce Solodu a naopak) a nevyžaduje běhové prostředí. Mezi klíčové oblasti použití patří systémové programování s podobnými možnostmi jako v jazyce C, ale se syntaxí a kontrolou typů ve stylu Go. Solod lze také použít k portování knihoven Go pro použití v projektech v jazyce C. Do jazyka C byly portovány balíčky Go, jako jsou strings, IO, bytes, mem, slices a další. Kromě sady portovaných knihoven Go mohou programy v Solodu používat vazby pro standardní knihovnu jazyka C, libc.

Ve výchozím nastavení je veškerá paměť alokována na zásobníku, ale alokace haldy je možná pomocí funkcí Alloc / Free standardní knihovny. Garbage collection a počítání referencí se nepoužívají, ale Solod poskytuje funkce pro kontrolu typů a pády při přístupu k poli mimo povolené meze. Nekontrolují se visící návraty ukazatelů a chybné uvolnění paměti. Použití AddressSanitizer (-fsanitize=address) v moderních kompilátorech je uváděno jako primární metoda pro detekci problémů s pamětí.

Co se týče výkonu, kompilované programy napsané v Solodu jsou obecně rychlejší než programy v Go. Například funkce z balíčku Byte běží 1.5krát rychleji se stejnou spotřebou paměti. Operace s bajtovým bufferem jsou 1.3krát rychlejší pro čtení a 2–4krát rychlejší pro zápis. V balíčku Map je vyhledávání celočíselných klíčů 3.4krát rychlejší, ale modifikace klíčů je 1.6krát pomalejší. Vyhledávání řetězcových klíčů je srovnatelné s Go, ale modifikace je 1.5krát pomalejší. Parsování a formátování celých čísel je 2krát rychlejší a parsování čísel s plovoucí desetinnou čárkou je 1,5/1.2krát rychlejší. Řetězcové funkce jsou 1.3krát rychlejší a vytváření řetězců je 2–4krát rychlejší s 10–20% snížením spotřeby paměti.

Zdroj: opennet.ru

Přidat komentář