Просмотров: 18771

Язык Google Go: что говорят те, кто с ним работал?


Давайте попробуем дать ответ, нужен ли человечеству еще один Cи-подобный язык программирования? В 2009 году компания Google утвердительно ответила на этот вопрос, представив общественности язык Go. А в этом году команда Go выпустила в свет первую стабильную версию Go 1 для «создания надежных продуктов, проектов и публикаций». Итак, какое место в мире предназначено этому языку?

Что такое Go и почему в Google решили его создать? Почему этот язык за столько короткое время своего существования уже успел привлечь к себе столько внимания среди специалистов? Как говорится в FAQ по Go:

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

Ни один из широко распространенных языков — С, С++, Java, Python и т.д. — не сумел предоставить одновременно всего того, что хотелось Google. Поэтому Google решил действовать самостоятельно, чтобы создать язык своей мечты.

Google Go Пщ zpsr язык программирование введение преймущества диаграмма примеры кода параллельность современный перспективный go

Итак, программисты Google приступили к работе над Go в 2007 году. В FAQ сказано, что базовый синтаксис Go «больше всего напоминает языки из семейства C», но при этом «довольно похож» на языки из семейства Pascal, а также включает идеи из других языков.

Google Go Пщ zpsr язык программирование введение преймущества диаграмма примеры кода параллельность современный перспективный go

Но (по мнению Google) разработчикам следует воспринимать Go как совершенно новый язык, получившийся в результате размышлений о том, «что, собственно, делает программист и как сделать само программирование — как минимум, то программирование, которым занимаемся мы, — более эффективным, а значит, и более интересным».

Для чего хорош Go?

Так для чего же лучше всего подходит Go? По словам Роба Пайка, выдающегося программиста Google и одного из разработчиков Go, этот язык предназначен для «больших программ» (big software) (и это, кстати, перекликается с представлением о big data — «больших данных», которые в последнее время так модно обсуждать).

В частности, Пайк говорит, что Go удобен для написания «крупномасштабных программ, которые создаются множеством разработчиков и со временем разрастаются для обеспечения поддержки сетевых служб в облаке: словом, для серверного программирования. На Go программа пишется быстро, а по мере роста она не менее легко поддерживается и адаптируется. В Go эффективность традиционных компилируемых языков сочетается с простотой использования и выразительностью скриптовых языков». (Следует отметить, что Пайк входил в состав первой команды, разрабатывавшей Unix в Bell Labs, поэтому он действительно кое-что знает о системных программах).

А вот рядовой разработчик Дуглас Филс, которому доводилось работать с самыми разнообразными языками, говорит, что «уже не первый день» пишет веб-приложения, пользуясь в основном виртуальной машиной Java (JVM).

«Конечно же, Java имеет в этом деле фундаментальное значение. Недавно я стал больше обращаться к языкам Scala и Groovy. Кстати, с Groovy я поработал уже немало, а недавно закончил большой проект на Groovy/Grails. Кроме того, я изучал и опробовал на практике кое-какой материал на Ruby on Rails и Python (а также работал с фреймворками Python)».

И вот Филс рассказал, что начал писать веб-интерфейс для ресурсов данных на ранней версии Go.

«К сожалению, на тот момент пакеты и синтаксис менялись настолько быстро, что работать было совершенно невозможно. В качестве альтернативы я попробовал node.js и в январе окончательно перенес весь проект на этот фреймворк».

Филс считает, что Node.js действительно пользуется популярностью:

«...но, хотя я и нахожу в нем определенные достоинства, мне не нравится его однопоточный цикл событий и проблемы, возникающие, когда приходится программировать в таком цикле, постоянно избегая блокировок. Кроме того, мне просто не нравится по любому поводу писать функции обратного вызова на JavaScript. Напротив, синтаксис и структура Go отличаются завидной ясностью».

Когда синтаксис и набор пакетов Go стабилизировались, породив, наконец, версию Go 1, Филс решил вновь обратиться к Go и переписать приложение. Тогда он и вспомнил, почему начал проект именно на Go.

Аргументы в пользу Go

Филс отмечает, что уже сам шаблон для написания полезного кода на Java довольно громоздкий. На Scala и Groovy, по его мнению, ситуация проще, но все равно оставляет желать лучшего.

Go воспринимается как язык с динамической типизацией, но, по свидетельству Филса, обеспечивает и статическую типизацию, «правда, не такую тяжелую, как в Java».

«Сборка мусора» в Go организована гораздо лучше, чем в виртуальной машине Java. Филс говорит, что у него «и близко не было таких проблем с потреблением памяти в Go, как в JVM. Это становится особенно заметно по сравнению с динамическими языками, такими, как Groovy».

Google Go Пщ zpsr язык программирование введение преймущества диаграмма примеры кода параллельность современный перспективный go
Компиляция, линковка и исполнение программы из исходников Go

Делясь впечатлениями о Go, Филс не раз упоминает о скорости. Действительно, язык быстр и не отказывает под высокой нагрузкой. Код компилируется очень быстро, и Филс считает, что компилировать и редактировать программу ему удается «так же быстро, как и на динамическом языке».

Наконец, Филс признается, что сам процесс программирования на Go доставляет ему гораздо больше удовольствия, чем работа с Node.js, Java, языками, основанными на Java, или с Ruby on Rails.

«Когда я корплю над приложениями, в основе которых — виртуальная машина Java, я начинаю чувствовать себя системным администратором, а не разработчиком. Мне постоянно приходится манипулировать пространствами динамической памяти, заниматься балансированием нагрузки и решать проблемы, возникающие с памятью или как-то еще управлять ресурсами. С Go все эти вопросы снимаются. Я разрабатываю, компилирую, тестирую, запускаю, развертываю и наслаждаюсь».

Но не всем так нравится Go. Почитайте, например, комментарии Шанила Манека о «сборке мусора» в Go и о попытках этого языка состязаться с компилируемыми и скриптовыми языками.

Полюбят ли Go?

Как правильно отмечает Стивен О’Грейди из RedMonk, сейчас

«Go еще очень юн. Создается впечатление, что разработчики склоняются к одной из двух крайностей. Для кого-то Go — приятное сочетание низкоуровневых языков и их интерпретируемых альтернатив, применяющих сборку мусора. Для оппонентов этой точки зрения Go — какое-то кощунство. Неудивительно, что во второй группе немало апологетов языка C».

Нет ничего удивительного, что Go вызывает такие радикальные суждения. В конце концов, такова ситуация с любым языком программирования. Удивительно скорее то, как много внимания привлек к себе Go за такое короткое время. В февральском рейтинге языков программирования от компании RedMonk О’Грейди отнес Go к языкам второго уровня.

По его словам, «учитывая, насколько нов этот язык, даже такой уровень интереса немного удивителен и впечатляет»

Теперь, когда Google выпустил стабильную версию этого языка и занялся развертыванием поддержки для движка Google App, интерес к языку Go, пожалуй, только возрастет. Создается впечатление, что Go вызывает неподдельный интерес и вне Google, в частности, в Engine Yard и в других компаниях. Возможно, те программисты, которые не слишком довольны имеющимися в наличии языками, решат освоить Go.

Google Go Пщ zpsr язык программирование введение преймущества диаграмма примеры кода параллельность современный перспективный go
Пример реализации UNIX-команды echo на языке Go

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

«...когда-нибудь, в неопределенном будущем, может появиться спецификация Go 2, но до тех пор программы на Go, работающие сегодня, должны работать и в следующих доработанных версиях Go 1 (Go 1.1, Go 1.2 и т.д.)».

dev.by, 2012
(перевод на русский: Google's Go Programming Language Grows Up

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru pikabu.ru blogger.com liveinternet.ru livejournal.ru google.com bobrdobr.ru yandex.ru del.icio.us

Подписка на обновления блога → через RSS, на e-mail, через Twitter
Теги: , , ,
Эта запись опубликована: Воскресенье, 27 мая 2012 в рубрике Программирование.

2 комментария

Следите за комментариями по RSS
  1. Язык ужасен. Ввести на уровень error-сообщений то, на какой строке надо расставлять скобки - это ну полный взрыв мозга. Библиотеки сами отнюдь не удобны, избыточно даже в большей степени, чем в Qt.

    А ещё - не ушли, а скопировали пакеты из Java (блин, зачем?!, есть прекрасная способ работы с модулями в Python).

    А ещё ужасный (безскобковый) for, где надо указать 3 параметра. Фу да и только.

    В общем, язык (я именно про язык, а не реализацию) понравится Java-истам, любителям писать код в Ритчи-стиле, и сильно создалось впечатление что создавали что-то, что будет компилируемым, но Java-ой.

  2. На счет "Фу", точнее цикла for - зря вы так. Разве плохо иметь такие возможности как (одним только for !):

    // equals ’while (true)’ in C:

    for {

    ....

    }

    // equals ’while (i < n)’ in C:

    for i < n {

    ....

    }

    // equals ’for(int i=0; i < n; i++) ’ in C:

    for i:=0; i < n; i++ {

    ....

    }

    // Loop throug a sequence of objects :

    for i, object := range ( slice_type ) {

    ....

    }

    А switch? В Go он продуманнее и удобнее, чем в дельфи-сишарп-джава-си вместе взятых. Это же просто то, что доктор прописал (с)

    А "пакеты"? Также все продуманно просто и гибко. И даже не надо по дирректориям разбивать файлы. Полная свобода. Неговоря уже о простых соглашениях для экспорта.

    Пацаны, приложившиеся к Unix и С, порожняк гнать не будут (с) Поверьте, они достаточно разбираются в колбасных обрезках :) Так что слухи об "ужасности" языка в вашем комментарии слишком преувеличены.

    ИМХО, также язык скорее Python разработчикам по душе больше будет, чем Java ЫнтерпрайзникамЪ. Хотя хрен с ними вместе взятыми - Go одназначно имеет смысл. Хотя бы только из-за того, что будет стоять на страже границ от наабегов маразматиков от ООП. Ничего против ООП не имею, только против маразматиков от ООП.

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Зарегистрировать/комментатор

Для регистрации укажите свой действующий email и пароль. Связка email-пароль позволяет вам комментировать и редактировать данные в вашем персональном аккаунте, такие как адрес сайта, ник и т.п. (Письмо с активацией придет в ящик, указанный при регистрации)

(обязательно)