Projekt Solod rozwija podzbiór języka Go, kompilowany do języka C

Język programowania Solod (So) został zaprezentowany jako podzbiór języka Go, transkompilowany do reprezentacji w języku C (C11), odpowiedni do kompilacji przez kompilatory GCC, Clang oraz zig cc. Kluczową różnicą między Solod a Go oraz Tinygo jest manualne zarządzanie pamięcią, które działa bez użycia garbage collectora, automatycznego przydzielania pamięci i liczenia odniesień. Transpilator dla Solod napisany jest w języku Go i udostępniany na licencji BSD. Obsługiwane są systemy Linux, macOS oraz Windows.

Język obsługuje struktury, metody, interfejsy, slice'y, zwracanie wielu wartości przez funkcje (np. wynik + kod błędu), generiki oraz opóźnione wywołania (defer). W celu uproszczenia język nie obsługuje kanałów, współprogramów ani zamknięć. W pracy z językiem Solod można korzystać z istniejących serwerów LSP, linterów, zintegrowanych środowisk programistycznych oraz edytorów kodu wspierających język Go, a także z narzędzia „go test”.

Kod napisany w Solod może być integrowany z aplikacjami w języku C (język C może wywoływać funkcje w Solod i odwrotnie) i nie wymaga dołączenia runtime'u. Kluczowe obszary zastosowań obejmują programowanie systemowe z możliwościami zbliżonymi do języka C, ale z syntaksą w stylu Go oraz zapewnieniem sprawdzania typów. Solod może być również używany do portowania bibliotek Go do zastosowań w projektach w języku C. Portowane są pakiety Go, takie jak strings, io, bytes, mem, slices itp. Oprócz zbioru portowanych bibliotek Go, w programach w języku Solod można używać opakowań nad standardową biblioteką C libc.

Domyślnie cała pamięć jest przydzielana na stosie, ale za pomocą funkcji Alloc / Free z biblioteki standardowej można przydzielać pamięć na stercie. Garbage collection i liczenie odniesień nie są używane, ale w Solod są dostępne mechanizmy do sprawdzania typów i awaryjnego zakończenia w przypadku przekroczenia granic tablicy. Należy jednak pamiętać, że nie przeprowadza się sprawdzeń dotyczących zwracania wskaźników wędrujących (dangling pointer) ani braku zwalniania pamięci. Głównym sposobem wykrywania problemów z pamięcią jest wykorzystanie AddressSanitizer (-fsanitize=address) w nowoczesnych kompilatorach.

Wydajnościowo, programy skompilowane w Solod są w większości przypadków szybsze niż programy w Go. Na przykład, wydajność funkcji z pakietu Byte jest 1,5 razy lepsza przy identycznym zużyciu pamięci. Praca z buforami bajtowymi jest szybsza 1,3 razy przy odczycie i 2-4 razy przy zapisie. W pakiecie Map, wyszukiwanie po kluczu całkowitym jest szybsze 3,4 razy, ale modyfikacja kluczy jest wolniejsza 1,6 razy. Wyszukiwanie po kluczu stringowym jest na tym samym poziomie co w języku Go, ale modyfikacja jest wolniejsza 1,5 razy. Parsowanie i formatowanie liczb całkowitych jest szybsze 2 razy, a dla liczb zmiennoprzecinkowych 1,5/1,2 razy. Funkcje stringowe są szybsze 1,3 razy, a tworzenie stringów jest szybsze 2-4 razy przy zmniejszeniu zużycia pamięci o 10-20%.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster