Релиз языка программирования Go 1.10
Состоялся релиз языка программирования Go 1.10, который развивается компанией Google при участии сообщества как гибридное решение, сочетающее высокую производительность компилируемых языков с такими достоинствами скриптовых языков, как лёгкость написания кода, быстрота разработки и защищённость от ошибок. Код проекта распространяется под лицензией BSD.
Синтаксис Go основан на привычных элементах языка Си с отдельными заимствованиями из языка Python. Язык достаточно лаконичен, но при этом код легко читается и воспринимается. Код на языке Go компилируется в обособленные бинарные исполняемые файлы, выполняемые нативно без использования виртуальной машины (модули профилирования, отладки и другие подсистемы выявления проблем на этапе выполнения интегрируются в виде runtime-компонентов), что позволяет добиться производительности, сопоставимой с программами на языке Си.
Проект изначально разрабатывается с оглядкой на многопоточное программирование и эффективную работу на многоядерных системах, в том числе предоставляя реализованные на уровне операторов средства для организации параллельных вычислений и взаимодействия между параллельно выполняемыми методами. Язык также предоставляет встроенные средства защиты от выхода за допустимые области выделенных блоков памяти и обеспечивает возможность использования сборщика мусора.
Основные новшества, представленные в выпуске 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.
© OpenNet