Go 1.10

В пятницу 16 февраля увидел свет Go 1.10 По большей части синтаксис языка остался неизменным. Основные новшества, улучшения и изменения представлены ниже:

  • В утилите go обеспечена поддержка автоматического кэширования результатов сборки и тестирования пакетов;
  • При тестировании пакетов командой "go test" реализован автоматический запуск команды "go vet" для выявления значительных проблем перед запуском тестов. Для отключения vet-проверок следует запускать тесты командой "go test -vet=off";
  • В cgo, механизм для организации вызова кода на C/C++ из программ на языке Go, добавлена возможность прямой передачи строковых значений между кодом на Go и Си. Функции на языке Си могут принимать строки языка Go, используя тип _GoString_, а также получать прямой доступ к строкам при помощи вызова _GoStringLen и _GoStringPtr;
  • Задаваемые в cgo флаги компиляции (#cgo CFLAGS) теперь проверяются на предмет допустимости применения. В случае применения флагов, отсутствующих в белом списке, будет выдана ошибка (например, злоумышленник может использовать в пакете флаг "-fplugin" для запуска произвольного кода на этапе сборки);
  • В языке разрешено использование операций индексирования x[1.0 << s] в случае если "s" является нетипизированной константой;
  • В утилите go обеспечена попытка автоматического определения корня инструментария на основе текущего файлового пути, если не выставлена переменная окружения GOROOT, что позволяет распаковать бинарный дистрибутив Go в любом каталоге и начать использовать его без дополнительных настроек;
  • Команда "go build" теперь определяет устаревшие пакеты только на основе содержимого файлов с исходными текстами, заданных сборочных флагов и метаданных из скомпилированных пакетов (время модификации больше не учитывается);
  • При выполнении "go build" флаги "-asmflags", "-gcflags", "-gccgoflags" и "-ldflags" теперь применяются только к пакетам, перечисленным в командной строке и не передаются при сборке зависимостей;
  • Команда "go install" теперь устанавливает только пакеты, перечисленные в командной строке (для установки сборочных зависимостей следует явно указывать флаг "-i");
  • В ассемблере для архитектуры x86_64 добавлена поддержка 359 новых инструкций, включая AVX, AVX2, BMI, BMI2, F16C, FMA3, SSE2, SSE3, SSSE3, SSE4.1 и SSE4.2;
  • В компилятора проведена оптимизация скорости генерации кода для различных архитектур. Сборщик мусора оптимизирован для снижения задержек и минимизации негативного влияния на производительность во время своей активности;
  • Режимы сборки портированы для новых архитектур: "c-shared" теперь работоспособен для архитектур linux/ppc64le, windows/386 и windows/amd64, режим "pie" для darwin/amd64, а "plugin" для linux/ppc64le и darwin/amd64;
  • Прекращена поддержка FreeBSD 9, для работы теперь требуется как минимум FreeBSD 10.3. Возобновлена поддержка NetBSD (работа возможна только с экспериментальной кодовой базой NetBSD 8). Go 1.10 является последним выпуском с поддержкой OpenBSD 6.0, OS X 10.8 "Mountain Lion", OS X 10.9 "Mavericks", Windows XP и Windows Vista, в дальнейшем для работы потребуется как минимум OpenBSD 6.2, OS X 10.10 "Yosemite" или Windows 7.

 

Тэги: go golang программирование


 


 
архив

подписка