В официальном блоге компании Google был представлен новый язык программирования Gо,
ориентированный на высокую производительность, которая почти
сопоставима с Си, но имеет более простой синтаксис, обеспечивающий
скорость разработки сопоставимую с такими динамическими языками, как
Python. По заявлениям разработчиков, Go предлагает выразительную
систему типов, быструю компиляцию, хорошую производительность, защиту
от выхода за допустимые области выделенных блоков памяти и встроенные
возможности языка, которые упрощают многопоточное программирование и
реализацию параллелизма. Google выпускает исходный код продукта под
лицензией BSD с надеждой, что сообщество будет заинтересовано новым
языком программирования и примет участие в дальнейшем его
совершенствовании и развитии.
Разработчики Google считают, что язык Go и в текущей реализации
является относительно зрелым, но не совсем готов для использования в
реальных производственных средах. Сопутствующий инструментарий для
нового языка программирования еще находится в стадии разработки.
Отсутствует интеграция с какой-либо IDE, стандартные библиотеки не до
конца наполнены, и на настоящий момент еще мало реальных примеров
работающего кода. Открытие Go для большого сообщества программистов
могло бы значительно ускорить процесс развития языка во всех этих
важнейших областях.
Компиляторы Go, называемые 6G и 8G (для 64-битных и x86 платформ),
ориентированы на высокие скорости компиляции (единицы секунд даже для
огромных проектов). Существует также альтернативный компилятор под
названием Gccgo, основанной на GNU Compiler Collection (GCC).
GCC-компилятор менее быстрый и предназначен для генерирования более
эффективного кода. Надо отметить, что разработчики отказались от
использования LLVM-компилятора, так как его производительность по
времени компиляции была признана недостаточной.
Скомпилированные исполняемые файлы являются полностью бинарными
файлами, что отличает Go от языков управляемого кода, где компилятор
генерирует байт-код для виртуальных машин. Go, тем не менее, имеет
некоторые компоненты времени выполнения (runtime), которые могут быть
встроены в исполняемые файлы. Фактическая производительность исполнения
считается сопоставимой с Cи-кодом.
Примеры кода языка Go показывают, что синтаксис является
Cи-подобным. Но существуют и отличительные черты. Например, существует
сокращенный синтаксис определения переменных, который поддерживает
обнаружение простых типов. Имеется также синтаксис анонимных функций,
который позволяет вам использовать реальные замыкания (real closures).
Есть некоторые Python-подобные особенности, в том числе slicing
массивов и map-типы с синтаксисом конструктора, который выглядит
наподобие словаря Python.
Одной из отличительных особенностей Go является его необычная
система типов. Язык воздерживается от некоторых типичных для
объектно-ориентированного программирования концепций, например
наследования. Вы можете определить структурные типы, а затем создать
методы для работы с ними. Вы можете также определить интерфейсы подобно
Java. В Go, однако, не вручную указывается какой интерфейс реализует
класс. Разработчики объяснили, что данный механизм интерфейсов
предоставляет разработчикам некоторую гибкость неявной типизации
(duck-typing), более того он предоставляет преимущества проверки во
время компиляции.
Параллелизм — отличительная особенность дизайна Go. Язык вводит
понятие "goroutines" — методы, которые выполняются одновременно. Любая
функция может быть выполнена как "goroutine" с помощью указания в
префиксе вызова функции ключевого слова "go". Язык реализует "channel"
механизм, который может быть использован для безопасного обмена данными
с "goroutines". Источник
|