LINUX.ORG.RU

Выпуск Go 1.4

 


2

5

Вчера состоялся выпуск языка программирования Go 1.4. Go — это компилируемый императивный язык программирования, созданный Робертом Гризмером, Робом Пайком и Кеном Томпсоном в компании Google как более удобная и безопасная альтернатива C++. Сейчас у него тысячи пользователей по всему миру, на нём написаны такие открытые проекты, как Docker или Ubuntu Juju, а также многие серверные приложения, особенно для внутрикорпоративного использования. В ноябре языку исполнилось пять лет.

Одна из главных новостей: компилятор gc теперь поддерживает платформу Android. Библиотеки пока ещё не готовы, но уже можно писать простые приложения целиком на Go. Кроме того, добавлена поддержка NaCl на процессорах ARM и Plan 9 на AMD64.

В новом выпуске сделано два изменения синтаксиса. Во-первых, разрешено писать цикл с range таким образом:

for range x {
	...
}
что эквивалентно:
for _ = range x {
	...
}
то есть цикл, в котором сами элементы последовательности не обрабатываются. Это изменение полностью совместимо со всеми существующими программами.

Второе изменение в том, что при вызове методов теперь допускается не более одного неявного разыменования. То есть если раньше можно было написать так:

type T int
func (T) M() {}
var x **T
x.M() //!!!
то теперь в последней строчке будет ошибка. Такой код противоречит существующей спецификации языка, потому что она разрешает не более одного неявного разыменования, но раньше и gc, и gccgo его принимали.

В утилите go появилась команда generate, которая запускает внешние программы (например, yacc) для автоматической генерации файлов .go. Если некоторые файлы в пакете нужно сгенерировать из других файлов, то теперь с помощью специальных комментариев в файлах, написанных вручную, можно заставить go build вызывать go generate с нужными опциями перед сборкой. Таким образом можно реализовать, например, генерацию схожих функций для разных типов без использования дженериков. В go также добавлена команда stringer, которая позволяет быстро создавать метод String() для типов (чтобы удовлетворить fmt.Stringer).

Кроме того, утилита go теперь позволяет указывать «канонические пути» для импорта пакетов: если для пакета указан канонический путь, но где-то в программе он импортируется прямо из интернета по другому пути, то программа не скомпилируется. Добавлена сокращённая форма для импорта субрепозиториев. Слегка изменена ожидаемая структура каталогов в дереве исходников.

Большая часть стандартной библиотеки транслирована в Go. Приложения это, скорее всего, напрямую не затронет, но теперь сборщик мусора будет быстрее узнавать, когда можно удалять объекты, ему не придётся держать их в памяти понапрасну, и потребление памяти сократится на 10-30%.

О прочих, менее значительных изменениях можно прочитать в информации о выпуске.

Кроме того, начиная с выпуска 1.4 разработчики перешли с Mercurial на Git и Gerrit, а скоро планируют переехать с googlesource.com на Github (сейчас там работает зеркало). Go 1.4 доступен на Google AppEngine для бета-тестирования. Тем временем компилятор GCC 4.9 поддерживает только Go 1.2, а поддержка Go 1.4 ожидается в GCC 5.

Go 1.4 Release Notes

>>> Объявление о выпуске

★★★★★

Проверено: maxcom ()
Последнее исправление: proud_anon (всего исправлений: 2)

Одна из главных новостей: компилятор gc теперь поддерживает платформу Android

Извращенства выходят на новый виток.

fornlr ★★★★★
()
Ответ на: комментарий от anonymous

Всё зависит от определения ООП

Все зависит от авторов языка, которые говорят что он ни разу не ООП. А то что некоторые видят ООП там где его нет, ну это как старая дева которой даже в огурцах х..и мерещатся.

ioway
()
Ответ на: комментарий от anonymous

Ты наркоман?

Нет.

Go isn't intended to replace Java, C++, or any other language. It was designed in response to some of the problems we encountered while writing large systems for modern hardware. The result seems to work well as a general-purpose language, one that many programmers have found delightful to use.

Это из твоей же статьи. Читать вообще очень полезно.

ioway
()
Ответ на: комментарий от RedPossum

И где тут сказали что он не ООП?

То что сказали в интервью, колышет мало. Есть документация.

https://golang.org/doc/faq#Is_Go_an_object-oriented_language

К тому же отличительныq признак ООП-языка: ФИКСИРОВАННАЯ БЛЖАД ПАРАДИГМА. А так и ассемблер объектно ориентированный.

ioway
()
Ответ на: комментарий от ioway

ФИКСИРОВАННАЯ БЛЖАД ПАРАДИГМА

Тогда хоть один оо язык покажи, из распространённых в продакшне хоть сколько нибудь.

RedPossum ★★★★★
()
Ответ на: комментарий от ioway

+.class => The code you submitted was not valid Ruby. +.to_s => The code you submitted was not valid Ruby.

Единственный тру ООП-язык это SmallTalk. В продакшне вообще тру парадигменные языки нигде не применяются, смалток и хацкель маргинальные.

anonymous
()
Ответ на: комментарий от anonymous

Единственный тру ООП-язык это SmallTalk.

indeeeed

В продакшне вообще тру парадигменные языки нигде не применяются

Это вредно для здоровья //почесывая набитые шишки

ioway
()
Ответ на: комментарий от derlafff

А что ты думаешь про Javascript? Надо бы разобраться, что есть удобное и красиво в твоём понимании.

anonymous
()
Ответ на: комментарий от ioway

Бгг. Наличие точки для вызова метода это ООП? Да ты вообще нубяка днищевая. Тебе еще осталось призвать святую троицу, лол.

bj
()
Ответ на: комментарий от ioway

Не тот аргумент выбран. С ООП не понятно, есть оно или нет. Давить надо на СБОРКУ МУСОРА. И еще на МАГИЮ В СИНТАКСИСЕ. А так-же ЖИРНЫЙ РАНТАЙМ. И НЕ UNIX-WAY. Ну и конечно же ГДЕ МАКРЫ И ТЕМПЛЕЙТЫ

makoven ★★★★★
()
Ответ на: комментарий от makoven

СБОРКУ МУСОРА
МАГИЮ В СИНТАКСИСЕ
И НЕ UNIX-WAY

Поподробнее, пожалуйста.

ТЕМПЛЕЙТЫ

оно нужно?

anonymous
()
Ответ на: комментарий от anonymous

Переименование методов

Ты о чем бро? Я вообще-то о сравнении раби со смалтоком говорил.

anonymous
()
Ответ на: комментарий от anonymous

Обсуждалось уже неоднократно. Нет смысла повторять.

оно нужно?

Нет. Нафиг оно в типизироваттых языках. Всегда можно дополнить код инструкциями на M4 или на сишном препроцессоре

Или поступить еще проще - генерировать Го-код на лиспе

makoven ★★★★★
()
Последнее исправление: makoven (всего исправлений: 1)

Давно бы доработали стандарт С++ на предмет сборщика мусора включаемых в опциях компилятора ...

I_one
()

Вики: Go дает возможность создать новый поток выполнения программы (go-процедуру) с помощью ключевого слова go, которое запускает анонимную или именованную функцию в заново созданной go-процедуре (аналог сопрограмм).


Кстати, это не в эпле недавно набрали 500 гоу-кодеров ?

kto_tama ★★★★★
()
Ответ на: комментарий от ranka-lee

Была чудная история с ним: http://forums.thedailywtf.com/forums/t/27755.aspx

История действительно чуднАя. Менеджер объясняет инвесторам, почему проект провалился и валит всё на технологию. Либо программеры навешали ему лапши, а он дурак поверил, либо инвесторов держит за дураков, которые ничерта не смыслят в том, как разрабатывается софт.

Их проблемы легко решились бы, используй они _любую_ систему контроля версий локально.

Не уверен что его после такого можно воспринимать как то всерьёз.

Всерьёз нельзя воспринимать автора статьи, а не язык.

alt-x ★★★★★
()
Ответ на: комментарий от alt-x

Всерьёз нельзя воспринимать автора статьи, а не язык.

А так же людей которые ссылаются на эту статью. Лол.

umren ★★★★★
()
Ответ на: комментарий от DarkEld3r

http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=java

А вот и не нужно верить. Чем тяжелее задача, тем разница по памяти меньше. Уверен, что при определённой сложности системы расход памяти выровняется. Однако на небольших задачах go должен быть приятнее.

RedPossum ★★★★★
()
Ответ на: комментарий от RedPossum

Однако на небольших задачах go должен быть приятнее.

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

umren ★★★★★
()
Ответ на: комментарий от RedPossum

А вот и не нужно верить.

Немного неожиданно. Думал, что Gо намного более «легковесный».

DarkEld3r ★★★★★
()
Ответ на: комментарий от umren

где нужно мгновенно поднимать и опускать jvm

А так никто в данном случае и не спорит. На жабе скрипты не попишешь. Да даже сраный калькулятор лучше не писать. Только серверное добро, долгоиграющее.

RedPossum ★★★★★
()
Ответ на: комментарий от I_one

Пока в плюсах будут свободно доступны сишные *alloc ни о каком вменяемом сборщике мусора говорить не стоит.

WatchCat ★★★★★
()
Ответ на: комментарий от bbk123

Подходит ли Go + web framework для того, чтобы переписать на нём LOR

щас посмотрел документацию
оказывается, на гоу можно разрабатывать веб-приложения нативными средствами
у него есть свои урлы, шаблоны, обработка ошибок, хэндлеры, в общем, встроенная ацкая смесь, необходимая для любого веб-фрэймворка
вот тут дан пример веб-страницы, написанной на гоу:
http://golang.org/doc/articles/wiki/final.go

есть также несколько отдельных веб-фреймворков на гоу

сравнительный тест на производительность разных веб-серверов, в том числе и для go
http://timyang.net/programming/c-erlang-java-performance/

судя по этому тесту, ерланг и жаба уделывают гоу, и виноват в этом скорее всего гарбаж-коллектор гоу

kto_tama ★★★★★
()
Последнее исправление: kto_tama (всего исправлений: 1)
Ответ на: комментарий от alt-x

Всерьез нельзя воспринимать авторов Го:

Кен Томпсон: «Трое из нас собрались и решили, что мы не навидим C++ (громкий смех)». «Мы не любители ООП... так что мы решили обсудить каждую фичу языка и не запиливать посторонних возможностей по любому поводу».

Роб Пайк: «Очень долго С был моим любимым языком.. Сегодняпочти всё я пишу на Go; это самый продуктивный язык который я когда либо использовал и он полностью заменил мне C»

Такие дела, ребята. Ждем пулл реквестов в кернел на Го

makoven ★★★★★
()
Ответ на: комментарий от umren

Но есть одна загвоздка: этот бенчмарк гейм не греет жабу, емнип.

RedPossum ★★★★★
()
Ответ на: комментарий от kto_tama

сравнительный тест на производительность разных веб-серверо, в том числе и для go http://timyang.net/programming/c-erlang-java-performance/

судя по этому тесту, ерланг и жаба уделывают гоу, и виноват в этом скорее всего гарбаж-коллектор гоу

Go, hg clone -r release https://go.googlecode.com/hg/ $GOROOT (Nov 12, 2009)

Эти данные не актуальны.

feofan ★★★★★
()

Поддержку сборки в *.so не реализовали еще?

deterok ★★★★★
()
Ответ на: комментарий от makoven

Отлично. Проблема макросов и генериков отпадает

Это почему вдруг?

Сходил по ссылке - о макросах там речи нет. Просто синтаксис другой. Как этот gisp решает проблему отсутствия дженериков мне тоже совершенно неясно.

feofan ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.