Przejdź do wersji 1.14 języka programowania

Przesłane przez wydanie języka programowania Idź 1.14, który jest rozwijany przez Google przy udziale społeczności jako rozwiązanie hybrydowe, które łączy w sobie wysoką wydajność języków kompilowanych z zaletami języków skryptowych, takimi jak łatwość pisania kodu, szybkość programowania, i ochrona przed błędami. Kod projektu dystrybuowane przez na licencji BSD.

Składnia Go jest oparta na znanych 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 samodzielnych binarnych plików wykonywalnych, które działają natywnie bez użycia maszyny wirtualnej (profilowanie, debugowanie i inne podsystemy wykrywania problemów w czasie wykonywania są zintegrowane jako komponenty wykonawcze), co pozwala osiągnąć wydajność porównywalną z programami w języku C.

Projekt jest początkowo rozwijany z myślą o programowaniu wielowątkowym i wydajnej pracy w systemach wielordzeniowych, w tym o zapewnieniu środków zaimplementowanych na poziomie operatora do organizowania obliczeń równoległych i interakcji między równolegle wykonywanymi metodami. Język zapewnia również wbudowaną ochronę przed przekroczeniem przydzielonych bloków pamięci oraz zapewnia możliwość korzystania z Garbage Collectora.

Głównym innowacje, wprowadzony w wersji Go 1.14:

  • Nowy system modułów w poleceniu „go” jest deklarowany jako gotowy do ogólnego użytku, domyślnie włączony i zalecany do zarządzania zależnościami zamiast GOPATH. Nowy system modułów oferuje zintegrowaną obsługę wersjonowania, narzędzia do dostarczania pakietów i ulepszone zarządzanie zależnościami. Dzięki modułom programiści nie są już przywiązani do pracy w drzewie GOPATH, mogą jawnie definiować zależności wersjonowane i tworzyć powtarzalne kompilacje.
  • Dodany obsługa wbudowanych interfejsów z nakładającymi się zestawami metod. Metody z wbudowanego interfejsu mogą teraz mieć takie same nazwy i taką samą sygnaturę jak metody w już istniejących interfejsach. Jawnie zadeklarowane metody pozostają unikalne, jak poprzednio.
  • Poprawiono wydajność wyrażenia „defer”, którego użycie jest teraz prawie tak szybkie, jak bezpośrednie wywołanie funkcji odroczonej, co pozwala na użycie opóźnionego uruchamiania funkcji w kodzie wrażliwym na wydajność.
  • Zapewniono asynchroniczne wywłaszczanie współprogramów (goroutine) — pętle, które nie zawierają wywołań funkcji, teraz potencjalnie nie mogą doprowadzić do zakleszczenia harmonogramu ani opóźnić rozpoczęcia wyrzucania elementów bezużytecznych.
  • Poprawiono wydajność systemu alokacji stron pamięci, przy znacznie mniejszej liczbie konfliktów blokad w konfiguracjach z dużymi wartościami GOMAXPROCS. W rezultacie opóźnienia zmniejszyły się, a przepustowość wzrosła przy równoległym intensywnym rozmieszczeniu dużych bloków pamięci.
  • Zoptymalizowano blokady i zmniejszono liczbę przełączeń kontekstu podczas uruchamiania wewnętrznych timerów używanych w funkcjach time.After, time.Tick, net.Conn.SetDeadline.
  • W poleceniu go flaga „-mod=vendor” jest domyślnie włączona, jeśli w katalogu głównym znajduje się katalog dostawcy, który jest przeznaczony do dostarczania zewnętrznych zależności powiązanych z określonym dostawcą. Dodano oddzielną flagę „-mod=mod”, aby ładować moduły z pamięci podręcznej modułów zamiast z katalogu „vendor”. Jeśli plik go.mod jest tylko do odczytu, flaga „-mod=readonly” jest domyślnie udostępniana, jeśli nie ma głównego katalogu „vendor”. Dodano flagę „-modfile=file”, aby określić alternatywny plik go.mod zamiast tego w katalogu głównym modułu.
  • Dodano zmienną środowiskową GOINSECURE, dzięki czemu po ustawieniu komenda go nie wymaga użycia protokołu HTTPS i pomija weryfikację certyfikatu podczas bezpośredniego ładowania modułów.
  • Do kompilatora została dodana domyślnie włączona flaga „-d=checkptr”, która sprawdza kod pod kątem zgodności z zasadami bezpiecznego korzystania z unsafe.Pointer.
  • W zestawie nowy pakiet hash/maphash z niekryptograficznymi funkcjami skrótu do tworzenia tablic skrótów dla dowolnych sekwencji bajtów lub łańcuchów.
  • Dodano eksperymentalną obsługę 64-bitowego RISC-V w systemie Linux.
  • Dodano obsługę FreeBSD w 64-bitowych systemach ARM.

Źródło: opennet.ru

Dodaj komentarz