Go limbajul de programare versiunea 1.16

Este prezentată lansarea limbajului de programare Go 1.16, care este dezvoltat de Google cu participarea comunității ca o soluție hibridă care combină performanța ridicată a limbajelor compilate cu avantajele limbajelor de scripting precum ușurința de scriere a codului , viteza de dezvoltare și protecția împotriva erorilor. Codul proiectului este distribuit sub licența BSD.

Sintaxa lui Go se bazează pe elemente familiare ale limbajului C cu unele împrumuturi din limbajul Python. Limbajul este destul de concis, dar codul este ușor de citit și de înțeles. Codul Go este compilat în fișiere executabile binare autonome care rulează nativ fără a utiliza o mașină virtuală (profilarea, modulele de depanare și alte subsisteme de detectare a problemelor de rulare sunt integrate ca componente de rulare), ceea ce permite performanțe comparabile cu programele C.

Proiectul este dezvoltat inițial având în vedere programarea multi-threaded și operarea eficientă pe sisteme multi-core, inclusiv furnizarea de mijloace implementate la nivel de operator pentru organizarea calculului paralel și a interacțiunii între metodele executate în paralel. Limbajul oferă, de asemenea, protecție încorporată împotriva depășirilor blocurilor de memorie alocate și oferă posibilitatea de a utiliza colectorul de gunoi.

Основные новшества, представленные в выпуске Go 1.16:

  • Добавлен пакет embed, предоставляющий средства для встраивания в программу произвольных файлов и каталогов. Для указания файлов, которые необходимо встроить на этапе компиляции, предоставляется новая директива «//go:embed». Например, указание в коде комментария «//go:embed test.txt» и объявление следом переменной «var f embed.FS» приведёт в встраиванию файла test.txt и возможности обращения к нему через дескриптор «f». Подобным образом можно встраивать необходимые для работы файлы с ресурсами или отдельными значениями определённого типа, например, для получения строковой переменной «s» из файла version.txt можно указать: import _ «embed» //go:embed version.txt var s string print(s)
  • По умолчанию теперь требуется использование новой системы модулей с интегрированной поддержкой версионирования, которая пришла на смену средствам управления зависимостями на основе GOPATH. Переменная окружения GO111MODULE теперь выставлена в значение «on» по умолчанию и режим модулей используется независимо от присутствия файла go.mod в рабочем или родительском каталоге. В новом режиме сборочные команды, такие как «go build» и «go test», не изменяют содержимое go.mod и go.sum, а команда «go install» обрабатывает аргументы с указанием версии («go install example.com/[e-mail protejat]»). Для возвращения старого поведение следует изменить GO111MODULE на значение «auto». Отмечается, что 96% разработчиков уже перешли на новую систему модулей.
  • Проведена оптимизация компоновщика. Для больших проектов компоновка теперь выполняется на 20-25% быстрее и требует на 5-15% меньше памяти.
  • В компиляторе добавлена поддержка inline-развёртывания функций с сокращённым определением циклов «for», методом значений (method values) и конструкциями ‘type switch’.
  • Добавлена поддержка систем Apple, оснащённых новым ARM-чипом Apple M1. Добавлены порты netbsd/arm64 и openbsd/mips64 с поддержкой NetBSD на 64-разрядных ARM и OpenBSD на системах MIPS64. В порт linux/riscv64 добавлена поддержка cgo и режима «-buildmode=pie».
  • Прекращена поддержка режима компиляции x87 (GO386=387). Поддержка процессоров без инструкций SSE2 теперь доступна через программный режим «GO386=softfloat».

Дополнительно можно отметить начало тестирования бета-выпуска языка Dart 2.12, в котором стабилизирован режим безопасного использования значения «Null» (null safety), который позволят избежать крахов, вызванных попытками использования переменных, значение которых не определено и выставлено в «Null». Режим подразумевает, что переменные не могут иметь неопределённые значения, если им явно не присваивается значение null. В режиме строго учитываются типы переменных, что позволяет компилятору применять дополнительные оптимизации. Соответствие типов проверяется на этапе компиляции, например, в случае попытки присвоения значения «Null» переменной с типом, не подразумевающим неопределённое состояние, таким как «int», будет выведена ошибка.

Sursa: opennet.ru

Adauga un comentariu