Ostatnio ogłoszono wydanie nowej wersji języka programowania «Go 1.19», wersja, która ulepsza poprzednie wydanie, dodając różne ulepszenia, a przede wszystkim poprawki błędów.Wśród nowości, które możemy wyróżnić, są między innymi ulepszenia w zarządzaniu pamięcią, ulepszenia bezpieczeństwa.
Dla tych, którzy są nowicjuszami w Go, powinniście wiedzieć, że jest to język programowania, który jest rozwijany przy udziale społeczności jako rozwiązanie hybrydowe, które łączy wysoką wydajność języków kompilowanych z zaletami, takimi jak języki skryptowe, takie jak łatwość pisania kodu, rozwój i ochrona przed błędami.
Składnia Go jest oparta na zwykłych elementach języka C. z pewnymi zapożyczeniami z języka Python. Język jest dość zwięzły, ale kod jest łatwy do odczytania i zrozumienia.
Kod Go jest kompilowany do oddzielnych binarnych plików wykonywalnych które działają natywnie, bez użycia maszyny wirtualnej (profilowanie, debugowanie i inne podsystemy rozwiązywania problemów w czasie wykonywania są wbudowane jako składniki środowiska uruchomieniowego).
Główne nowe funkcje Go 1.19
W tej nowej wersji Go 1.19, która jest prezentowana, podkreślono, że wykonano prace nad udoskonaleniem obsługi funkcji i typów ogólnych dodany w najnowszej wersji, za pomocą którego programista może zdefiniować i używać funkcji przeznaczonych do pracy z kilkoma typami jednocześnie, a optymalizacja wydajności niektórych programów używających generyków została zwiększona o 20%.
Kolejną zmianą, która wyróżnia się na tle nowej wersji, jest to dodano obsługę linków, list i prostszej składni aby zdefiniować nagłówki w komentarzach do dokumentów. Narzędzie gofmt zapewnia formatowanie z zaawansowanymi funkcjami komentarzy w dokumentacji API.
poza tym poprawiony model pamięci Go w celu dostosowania do C, C++, Java, JavaScript, Rust i Swift które nie dopuszczają sekwencyjnie spójnych wartości atomowych. W pakiecie sync/atomowym wprowadzono nowe typy, takie jak atomic.Int64 i atomic.Pointer[T], aby ułatwić korzystanie z wartości atomowych.
Z drugiej strony wspomina się również, że garbage collector ma teraz możliwość definiowania miękkich limitów, które są wymuszane przez ograniczenie rozmiaru sterty i bardziej agresywne zwracanie pamięci do systemu, co oznacza, że nie ma gwarancji, że zużycie będzie mieścić się w określonych limitach we wszystkich warunkach. Limity miękkie mogą być przydatne do optymalizacji programów uruchamianych w stałych kontenerach pamięci.
Podkreśla się również, że w systemach Unix dodatkowe deskryptory plików są automatycznie włączane (zwiększenie limitu RLIMIT_NOFILE), w celu przyspieszenia wyrażeń dużych zmian na systemach x86-64 i ARM64 stosuje się tabele skoków, które umożliwiają przetwarzanie dużych wyrażeń zmian do 20% szybciej.
W systemach riscv64 zaimplementowano przekazywanie argumentów funkcji przez rejestry procesora, co pozwoliło na wzrost wydajności o około 10%.
Z innych zmian które wyróżniają się na tle nowej wersji:
- Wprowadzono liczne optymalizacje wydajności.
- Dodano obsługę dynamicznego ustawiania rozmiaru stosu procedury w celu zmniejszenia rozmiaru kopiowanych danych
- Dodano eksperymentalne wsparcie dla środowisk Linux w systemach z procesorami Loongson opartymi na 64-bitowej architekturze LoongArch (GOARCH=loong64).
- Zmiana modelu pamięci nie wpłynęła na zgodność z wcześniej napisanym kodem.
- Dodano nowe ograniczenie kompilacji „unix”, które może być używane w wierszach „go:build” w celu odfiltrowania systemów uniksopodobnych (aix, android, darwin, dragonfly, freebsd, hurd, ilumos, ios, linux, netbsd, openbsd, solaris ).
- Aby zwiększyć bezpieczeństwo, moduł os/exec ignoruje teraz ścieżki względne podczas rozwijania zmiennej środowiskowej PATH (na przykład podczas określania ścieżki pliku wykonywalnego bieżący katalog nie jest już sprawdzany).
Na koniec, jeśli chcesz dowiedzieć się więcej o tej nowej wersji, możesz sprawdzić szczegóły na poniższy link.