11 lut 2023·1 min czytania

Go 1.20 wprowadza podgląd optymalizacji sterowanej przez profil i ulepszenia języka.

Go 1.20, najnowsza aktualizacja opracowanego przez Google języka open source, zawiera podgląd optymalizacji kierowanej przez profil (PGO) oraz ulepszenia języka. PGO poprawia wydajność o 3% do 4% dzięki optymalizacji inliningu, a inne optymalizacje są w przygotowaniu.

Go 1.20 wprowadza podgląd optymalizacji sterowanej przez profil i ulepszenia języka.

Go 1.20, produkcyjne wydanie stworzonego przez Google języka open-source, znanego z prostoty, współbieżności i funkcji programowania funkcyjnego, zostało zaprezentowane wraz z podglądem optymalizacji sterowanej profilami (PGO) dla kompilatora. Go 1.20 można pobrać z oficjalnej strony go.dev.

Dzięki podglądowi PGO w Go 1.20, toolchain kompilatora może przeprowadzać optymalizacje specyficzne dla aplikacji i obciążenia w zależności od informacji o profilu runtime. Obecny kompilator obsługuje profile procesora pprof, które można zebrać za pomocą pakietów runtime/pprof lub net/http/pprof.

Znane również jako optymalizacja ukierunkowana na sprzężenie zwrotne, PGO polega na dostarczaniu danych o profilach z reprezentatywnych przebiegów aplikacji z powrotem do kompilatora dla następnego kompilatora aplikacji. Używając tych informacji, kompilator może podejmować bardziej świadome decyzje optymalizacyjne. Benchmarki dla reprezentatywnego zestawu programów Go pokazują, że włączenie optymalizacji inliningu PGO zwiększa wydajność o około 3% do 4%. Oczekuje się, że przyszłe wydania wprowadzą więcej optymalizacji PGO.

Wraz z wprowadzeniem PGO, Go 1.20 przynosi również cztery zmiany w języku. Po pierwsze, możliwość konwersji wycinka na wskaźnik tablicy, wprowadzona w Go 1.17 z 2021 roku, teraz rozszerza się na konwersje z wycinka na tablicę. Po drugie, pakiet unsafe zawiera trzy nowe funkcje: SliceData, String i StringData. Funkcje te oferują pełną zdolność do konstruowania i dekonstruowania wartości typu slice i string, niezależnie od ich dokładnej reprezentacji.

Po trzecie, specyfikacja ustala teraz, że wartości struct są porównywane po jednym polu na raz, biorąc pod uwagę pola w kolejności, w jakiej pojawiają się w definicji typu struct, i zatrzymując się na pierwszym niedopasowaniu. Po czwarte, porównywalne typy, takie jak zwykłe interfejsy, mogą spełniać porównywalne ograniczenia, nawet jeśli argumenty typu nie są ściśle porównywalne. Umożliwia to instancję parametru typu ograniczonego przez porównywalne ograniczenia z argumentem typu nie ściśle porównywalnego, jak typ interfejsu lub typ złożony, który zawiera typ interfejsu.

Oprócz tych zmian w języku, Go 1.20 zawiera różne inne ulepszenia, takie jak obsługa zbierania profili pokrycia kodu dla programów, w tym aplikacji i testów integracyjnych. Katalog $GOROOT/pkg nie przechowuje już prekompilowanych działań pakietów dla biblioteki standardowej, co zmniejsza rozmiar dystrybucji Go i pozwala uniknąć C toolchain skew dla pakietów cgo. Ponadto, implementacja go test -json została wzmocniona w celu zwiększenia odporności, podczas gdy polecenie go version -m odczytuje teraz szerszy zakres binariów Go, w tym biblioteki DLL systemu Windows i binarki Linuksa bez pozwolenia execute.

Go 1.20 przynosi także eksperymentalne wsparcie dla FreeBSD na RISC-V i domyślnie wyłącza cgo na systemach bez C toolchain. Go 1.20 będzie jednak ostatnim wydaniem wspierającym macOS 10.13 High Sierra i 10.14 Mojave, a Go 1.21 wymaga macOS 10.15 Catalina lub nowszego.

No-code Platforma taka jak AppMaster.io może bardzo skorzystać z włączenia nowo zoptymalizowanych języków takich jak Go 1.20. Integrując tak potężne narzędzia dla aplikacji internetowych, mobilnych i backendowych, firmy mogą osiągnąć znaczną poprawę produktywności, doświadczenia użytkownika i skalowalności. Dowiedz się więcej o no-code i low-code tworzeniu aplikacji, aby wyprzedzić krzywą technologiczną.

Easy to start
Create something amazing

Experiment with AppMaster with free plan.
When you will be ready you can choose the proper subscription.

Get Started