Компания Google представила релиз языка программирования Go 1.4, который позиционируется как гибридное решение, сочетающее высокую производительность компилируемых языков с такими достоинствами скриптовых языков, как лёгкость написания кода, быстрота разработки и защищённость от ошибок. Код проекта распространяется под лицензией BSD.

Синтаксис Go базируется на привычных элементах языка Си с отдельными заимствованиями из языка Python. Язык достаточно лаконичен, но при этом код легко читается и воспринимается. Код на языке Go компилируется в обособленные бинарные исполняемые файлы, выполняемые нативно без использования виртуальной машины (модули профилирования, отладки и другие подсистемы выявления проблем на этапе выполнения интегрируются в виде runtime-компонентов), что позволяет добиться производительности, сопоставимой с программами на языке Си.

Проект изначально разрабатывается с оглядкой на многопоточное программирование и эффективную работу на многоядерных системах, в том числе предоставляя реализованные на уровне операторов средства для организации параллельных вычислений и взаимодействия между параллельно выполняемыми методами. Язык также предоставляет встроенные средства защиты от выхода за допустимые области выделенных блоков памяти и обеспечивает возможность использования сборщика мусора.

Основные новшества, представленные в выпуске Go 1.4:

  • Реализована официальная поддержка разработки приложений для платформы Android. Для подобных приложений можно использовать как штатные библиотеки, так и библиотеки из отдельного репозитория для мобильных систем, но библиотечные средства для мобильных приложений пока находятся в состоянии активной разработки и оставляют желать лучшего. Исполняемые файлы для Android пока могут генерироваться только для архитектуры ARM;
  • Поддержка организации работы циклов for-range без определения параметров сохранения текущего значения ("for range x {" в дополнение к "for i := range x {" и "for i, v := range x {"), что может быть востребовано в случаях, когда необходимо лишь прокрутить цикл для всех элементов набора, но сами элементы не представляют интереса.
  • В команду go добавлена новая подкоманда "generate", позволяющая автоматизировать запуск инструментов для генерации исходных текстов до начала компиляции. Например, таким способом можно сгенерировать методы объекта String для типизированных констант, воспользовавшись утилитой stringer;
  • Поддержка генерации исполняемых файлов для окружения Native Client (NaCl), работающего на системах с процессорами ARM. NaCl позволяет организовать выполнение не заслуживающего доверия кода в sandbox-окружении, изолированном от остальной системы. Ранее поддержка была ограничена только генерация платформозависимых файлов для 32- и 64-разрядных процессоров Intel;
  • Поддержка сборки исполняемых файлов для операционной системы Plan 9 на процессорах с архитектурой AMD64;
  • Большинство runtime-компонентов, таких как сборщик мусора, обработчики строковых операций и код для организации распараллеливания, переписаны с языка Си на язык Go. В сборщике мусора появилась возможность сканирования стека программы во время её исполнения, точной оценки степени использования переменных и полного контроля за местоположением активных указателей, что сказалось на сокращении использования памяти в куче на 10%-30%. С точки зрения производительности немного ускорена сборка мусора и скорость выполнения приложений за счёт внесения дополнительных оптимизаций при выполнении операций развёртывания кода (inlining). Значительные оптимизации ожидаются в следующем выпуске.


Источник: http://www.opennet.ru/opennews/art.shtml?num=41248