Go 1.14, следующая версия языка программирования с открытым исходным кодом, разработанного Google, который использовался для создания Docker, Kubernetes, Istio и других проектов облачных вычислений, сейчас находится на стадии бета-тестирования и ожидается в качестве производственного выпуска в феврале.
Предстоящее обновление Go улучшает время выполнения и компилятор. Версия 1.14 также будет последней, поддерживающей 32-битные платформы Apple, согласно примечаниям к выпуску.
С улучшениями среды выполнения Go производительность большинства вариантов использования defer
была повышена до не требует почти никаких накладных расходов по сравнению с непосредственным вызовом отложенной функции. В результате отсрочку
теперь можно использовать в критически важном для производительности коде без проблем с накладными расходами.
Улучшенная среда выполнения Go также делает асинхронно выгружаемыми подпрограммы. Это означает, что циклы без вызовов функций больше не блокируют планировщик и не задерживают сборку мусора. Эта возможность поддерживается на всех платформах, кроме windows / arm
darwin / arm
js / wasm
и plan9 / *
.
Одним из следствий реализации упреждающего действия является то, что программы Go 1.14 для Linux и MacOS будут получать больше сигналов, чем более ранние версии. Программы, использующие такие пакеты, как syscall
или g olang.org/x/sys/unix
увидят более медленные системные вызовы с ошибками EINTR
. Этим программам придется каким-то образом обрабатывать эти ошибки, скорее всего, путем повторения повторной попытки системного вызова.
Кроме того, распределитель страниц более эффективен и вызывает меньше конфликтов блокировки при высоких значениях GOMAXPROCS
. Это будет наиболее заметно в виде более низкой задержки и более высокой пропускной способности для больших распределений, выполняемых параллельно и с высокой скоростью.
Тем временем компилятор Go добавляет -d = checkptr
в качестве Опция time для проверки того, что код Go соблюдает unsafe.Pointer
правила безопасности динамически. Кроме того, теперь компилятор может генерировать машиночитаемые журналы оптимизации ключа, используя флаг -json
включая встраивание и исключение проверки границ. Подробная диагностика анализа побега теперь работает снова, и экспериментальная поддержка предлагается для встроенного в компилятор инструментария покрытия для фаззинга.
Другие изменения и улучшения в Go 1.14 включают:
- В улучшена поддержка Go WebAssembly, теперь JavaScript-значения, на которые ссылаются объекты Go через
js.Value
теперь можно собирать мусором. Однако объектыjs.Value
больше нельзя сравнивать с помощью оператора==
. Вместо этого они должны сравниваться с использованием методаEqual
. Кроме того,js.Value
теперь имеет методыIsUndefined
IsNull
иIsNaN
. - Аналогично тому, что происходит с языком Rust, версия Go 1.14 будет последней, поддерживающей 32-разрядные двоичные файлы в MacOS. Вероятно, он также будет последним, который будет поддерживать 32-разрядные двоичные файлы на других платформах Apple, включая iOS, iPadOS, WatchOS и tvOS.
- При смене языка теперь разрешено встраивание перекрывающихся интерфейсов.
- Поддержка прекращена для платформы Native Client Google
- Теперь поддерживается 64-битная архитектура FreeBSD.
- Команда
go
теперь поддерживает репозитории Subversion в режиме модуля. Эта команда также теперь имеет фрагменты текстовых сообщений об ошибках от прокси модулей и других HTTP-серверов. Сообщение об ошибке отображается только в том случае, если оно действительно UTF-8 и содержит только графические символы и пробелы. - В двоичных файлах Windows включена функция предотвращения выполнения данных (DEP) для защиты памяти на уровне системы.
- Новый флаг
-modfile = file
указывает командеgo
читать и, возможно, записывать альтернативный файл go.mod, а не тот, который находится в корневом каталоге модуля. - Команда
go get
больше не принимает флаг-mod
.
Go 1.14 можно загрузить с golang.org.
Эта статья "Go 1.14 посвящена среде выполнения, компилятору" была первоначально опубликована
InfoWorld .