Programmēšanas valodas Go izlaišana 1.16

Tiek prezentēts programmēšanas valodas Go 1.16 izlaidums, ko Google izstrādā ar kopienas līdzdalību kā hibrīdu risinājumu, kas apvieno kompilēto valodu augsto veiktspēju ar tādām skriptu valodu priekšrocībām kā koda rakstīšanas vienkāršība. , izstrādes ātrums un kļūdu aizsardzība. Projekta kods tiek izplatīts saskaņā ar BSD licenci.

Go sintakse ir balstīta uz pazīstamiem C valodas elementiem ar dažiem aizguvumiem no Python valodas. Valoda ir diezgan kodolīga, bet kods ir viegli lasāms un saprotams. Go kods tiek apkopots atsevišķos bināros izpildāmos failos, kas darbojas sākotnēji, neizmantojot virtuālo mašīnu (profilēšanas, atkļūdošanas moduļi un citas izpildlaika problēmu noteikšanas apakšsistēmas ir integrētas kā izpildlaika komponenti), kas nodrošina veiktspēju, kas ir salīdzināma ar C programmām.

Projekts sākotnēji tika izstrādāts, ņemot vērā daudzpavedienu programmēšanu un efektīvu darbību daudzkodolu sistēmās, tostarp nodrošinot operatora līmeņa līdzekļus paralēlās skaitļošanas organizēšanai un paralēli izpildītu metožu mijiedarbībai. Valoda nodrošina arī iebūvētu aizsardzību pret pārmērīgi piešķirtiem atmiņas blokiem un nodrošina iespēju izmantot atkritumu savācēju.

Основные новшества, представленные в выпуске 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-pasts aizsargāts]»). Для возвращения старого поведение следует изменить 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», будет выведена ошибка.

Avots: opennet.ru

Pievieno komentāru