Przejdź do wersji 1.16 języka programowania

Przedstawiono wydanie języka programowania Go 1.16, który jest rozwijany przez Google przy udziale społeczności jako rozwiązanie hybrydowe, łączące wysoką wydajność języków kompilowanych z takimi zaletami języków skryptowych, jak łatwość pisania kodu , szybkość rozwoju i ochrona przed błędami. Kod projektu jest rozpowszechniany na licencji BSD.

Składnia Go opiera się 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 (moduły profilowania, debugowania i inne podsystemy wykrywania problemów w czasie wykonywania są zintegrowane jako komponenty środowiska wykonawczego), co pozwala na wydajność porównywalną z programami 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.

Najważniejsze nowe funkcje wprowadzone w Go 1.16:

  • Dodano pakiet embed, który zapewnia narzędzia do osadzania dowolnych plików i katalogów w programie. Dostarczono nową dyrektywę „//go:embed”, która określa pliki, które mają zostać osadzone w czasie kompilacji. Na przykład określenie „//go:embed test.txt” w komentarzu do kodu, a następnie zadeklarowanie zmiennej „var f embed.FS” doprowadzi do osadzenia pliku test.txt i możliwości dostępu do niego poprzez „ f” deskryptor. W podobny sposób możesz osadzić pliki z zasobami lub indywidualnymi wartościami określonego typu niezbędnymi do pracy, np. aby uzyskać zmienną łańcuchową „s” z pliku wersja.txt, możesz podać: import _ „embed ” //go:embed wersja.txt var s string print(s)
  • Domyślnie wymagany jest teraz nowy system modułowy ze zintegrowaną obsługą wersjonowania, zastępując zarządzanie zależnościami oparte na GOPATH. Zmienna środowiskowa GO111MODULE jest teraz domyślnie ustawiona na „on”, a tryb modułów jest używany niezależnie od obecności pliku go.mod w katalogu roboczym lub nadrzędnym. W nowym trybie polecenia budowania, takie jak „go build” i „go test” nie zmieniają zawartości go.mod i go.sum, a polecenie „go install” przetwarza argumenty wersji („go install example.com/[email chroniony]„). Aby przywrócić stare zachowanie, zmień GO111MODULE na „auto”. Należy zauważyć, że 96% programistów przeszło już na nowy system modułowy.
  • Linker został zoptymalizowany. W przypadku dużych projektów układ jest teraz o 20–25% szybszy i wymaga 5–15% mniej pamięci.
  • Kompilator dodał obsługę wbudowanego rozwijania funkcji o skrócone definicje pętli „for”, wartości metod i konstrukcje „przełącznika typu”.
  • Dodano obsługę systemów Apple wyposażonych w nowy układ Apple M1 ARM. Dodano porty netbsd/arm64 i openbsd/mips64 z obsługą NetBSD na 64-bitowym ARM i OpenBSD na systemach MIPS64. Dodano obsługę cgo i trybu „-buildmode=pie” do portu linux/riscv64.
  • Zakończono obsługę trybu kompilacji x87 (GO386=387). Obsługa procesorów bez instrukcji SSE2 jest teraz dostępna w trybie oprogramowania „GO386=softfloat”.

Dodatkowo możemy odnotować rozpoczęcie testów wersji beta języka Dart 2.12, w której ustabilizowano bezpieczny tryb korzystania z wartości „Null” (null security), co pozwoli uniknąć awarii spowodowanych próbami użycia zmiennych, których wartość jest niezdefiniowana i ustawiona na „Null”. Tryb oznacza, że ​​zmienne nie mogą mieć wartości null, chyba że jawnie przypisano im wartość null. Tryb ściśle uwzględnia typy zmiennych, co pozwala kompilatorowi zastosować dodatkowe optymalizacje. Zgodność typu jest sprawdzana w czasie kompilacji, np. jeśli spróbujesz przypisać wartość „Null” do zmiennej o typie, który nie oznacza niezdefiniowanego stanu, np. „int”, wyświetli się błąd.

Źródło: opennet.ru

Dodaj komentarz