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