Релиз языка программирования Go 1.9
После шести месяцев разработки компания Google представила релиз языка программирования Go 1.9, который позиционируется как гибридное решение, сочетающее высокую производительность компилируемых языков с такими достоинствами скриптовых языков, как легкость написания кода, быстрота разработки и защищенность от ошибок. Код проекта распространяется под лицензией BSD.
Синтаксис Go основан на привычных элементах языка Си с отдельными заимствованиями из языка Python. Язык достаточно лаконичен, но при этом код легко читается и воспринимается. Код на языке Go компилируется в обособленные бинарные исполняемые файлы, выполняемые нативно без использования виртуальной машины (модули профилирования, отладки и другие подсистемы выявления проблем на этапе выполнения интегрируются в виде runtime-компонентов), что позволяет добиться производительности, сопоставимой с программами на языке Си.
Проект изначально разрабатывается с оглядкой на многопоточное программирование и эффективную работу на многоядерных системах, в том числе предоставляя реализованные на уровне операторов средства для организации параллельных вычислений и взаимодействия между параллельно выполняемыми методами. Язык также предоставляет встроенные средства защиты от выхода за допустимые области выделенных блоков памяти и обеспечивает возможность использования сборщика мусора.
Основные новшества, представленные в выпуске Go 1.9:
- В язык добавлена возможность определения псевдонимов типов, которая может оказаться востребована при проведении рефакторинга кода и постепенного перевода проектов на новые API. Например, при помощи конструкции "type T1 = T2" для существующего типа "T2" можно определить псевдоним с именем "T1" по аналогии с тем как имя "byte" является псевдонимом типа "uint8";
- В состав включен новый пакет math/bits, предоставляющий функции для битовых операций и манипуляции беззнаковыми целыми числами с задействованием при возможности специальных инструкций CPU. Например, на системах x86-64 функция bits.TrailingZeros(x) будет выполняться с использованием инструкции BSF;
- В пакет sync добавлен новый тип Map, который возможно применять в многопоточных приложениях. Данный тип в некоторых деталях отличается от штатного типа map, поэтому не предназначен для его прозрачной замены;
- В пакет testing добавлен новый метод Helper, применимый с объектами testing.T и testing.B. При помощи данного метода можно организовать вывод номера строки вызывающей функции при возникновении ошибки, вместо указания ссылки на фактический номер строки, из которой вызван метод t.Fatal;
- В пакете time обеспеченно прозрачное отслеживание монотонного времени (время, прошедшее с определенного момента) для всех значений Time, что позволяет обеспечить надежный расчет разницы между двумя значениями Time без влияния таких факторов как изменение времени или подстановка лишней секунды.
- Для ускорения процесса сборки реализована поддержка параллельной компиляции разных функций в пакете.