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)

Ответ на: комментарий от Deleted

Всерьез нельзя воспринимать тебя, а не отцов UNIX и Plan 9.

Одно померло, второе не родилось. Серьезные парни.

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

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

Это какая-то залипуха. Вот более «правильные» тесты

http://www.techempower.com/benchmarks/

Все тесты тюнятся и поддерживаются соответствующими коммьюнити.

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

Но ребята из андроид тим вроде как сказали, что адроид==жава и никто ничего менять не будет.

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

Отцы позиционируют Го как новый Си. А гугл бешенно его продвигает. Это очень грустно, на самом деле. Новый Си должен быть мультипарадигменный, обладать всеми крутыми фичами из современных языков, но при этом быть максимально близким к железу.

А Го вертится вокруг одной концепции - легкие треды. Эдакий Эрланг для масс. Эдакий PHP с мультизадачностью. Даже С++ лучше подходит под понятие Нового Си. D и Rust подходят еще лучше. Но у D нет штата гугловских маркетологов.

Это третья, на моей памяти, волна вредного влияния на разработчиков от гугла. Первая - это воскрешение Джавы в обличьи Далвика. А вторая - Dart.

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

Никто не собирается заменять сишку го. А если кто-то все-таки собирается, это его проблемы (и его начальства).

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

Выжимка из любой восторженной статьи о Го в продакшене:

«У нас было что-то на Python(Ruby/PHP) - тормозило. Перерисали на C/С++ - летает, но сложно. Переписали на Го О БОЖЕ ГО ЛУЧШИЙ ЗАМЕНА ВСЕГО ЛЕТАТЕТ КАК СИ ЖИЗНЬ НАЛАДИЛАСЬ ЖЕНА ВЕРНУЛАСЬ»

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

5 лет учишься как на нем писать чтобы память не текла. Но оно того стоит)

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

Ну и что? Да, Го намного проще плюсов, да, быстрее скриптовых языков. Где тут бешенное продвижение и зачем оно Гуглу? А твоя реакция напоминает анекдот про «Пива нет».

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

Дарт гуглу тоже незачем. Просто это корпорация с кучей бабла и разработчики считаются с ее нововведениями. А разработчиков количество ограниченное. Из примеров - tjholowaychuk в один момент сказал «прощайте, я ухожу в Го» и nodejs мигом загнулся.

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

Не видел таких.

Любое Go-коммьюнити. Раз в два~три дня. При этом, (может и ошибаюсь) реально с Go в продакшене работают 3-4 человека. В студенческих проектах человек 10, все остальные пишут «пэкэджи» в стиле

package DoubleIncrementLib

/*
 * простынь с копирайтом
 */

func DoubleIncrement(a int) int {
  return a*2
}

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

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

сравнение от 2009 года, в go GC 5 раз с тех пор переписали

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

Первая - это воскрешение Джавы в обличьи Далвика. А вторая - Dart.

первая - норм, dart - провал, go - успех, инструмент который нужен массам.

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

точнее Го это С без Ритчи, Баурна, Мочи, МакИлроя и многих других,

Голанг хорош, но маркетинг придал языку не нужный привкус мошейничества.

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

А еще он слишком скучный

А Go весёлый что ли?

«Весёлый» — не единственный антоним слову «скучный». Есть ещё «интересный». Go — интересный :)

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

первая - норм

Что-то я не вижу много десктопных програм, написанных на Java. Зато вижу много андроидовских програм, использующих Java как запускалку c/с++ кода. Это, на мой взгляд, провал. Хуже только идея ОС на HTML5

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

Зато вижу много андроидовских програм, использующих Java как запускалку c/с++ кода

99% программ не используют NDK и не запускают C/C++ код, у тебя неправильные данные.

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

Зато вижу много андроидовских програм, использующих Java как запускалку c/с++ кода.

Их на самом деле очень мало.

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

Где посмотреть статистику? Помню лишь статью на HN про то, что 2/3 из 2000 самых популярных приложений используют нативный код

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

Нигде ты ее не посмотришь, ее никто не публикует, очевидно что ты читаешь вбросы, NDK нужен только в очень ограниченных случаях и спец. софте.

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

Это то хипстерская фигня где можно делать #include путь-на-гитхаб? Была чудная история с ним: http://forums.thedailywtf.com/forums/t/27755.aspx Не уверен что его после такого можно воспринимать как то всерьёз.

Как можно воспринимать всерьёз нытьё погромистов, которые пользуются такой возможностью? Вопрос о том, зачем такую возможность дали в принципе оставим в стороне. Не все хипстеры с кодом на Гитхабе, да и в C, например, можно вообще необратимо испортить содержимое всей памяти, фалый на диске, а то и вовсе сжечь процессор.

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

Осторожно. Ошибка логического процессора. Перегрузка. Перегрузка)

Ечли статистику о количестве аппликаций с NDK нигде не посмотришь, то откуда взялись 99%. И откуда уверенность что «вброс» про 2/3 - это вброс?

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

так новый купят же

Да и бог с ними, лишь бы не программировали.

anonymous
()

А веб-фреймворки уровня Pyramid или хотя бы Django есть? Ну или если уж совсем наступить на горло собственной песне, то хотя бы flask? А то вроде всё красиво, а как веб-морду нужно написать сложнее двух с половиной форм с POSTом, так и всё, взять даже нечего.

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

Помню лишь статью на HN

Не ходи туда. Там рак.

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

Во-от. Я всегда говорил, что все эти ваши гитхабы и баитбакеты не нужны. Нет ничего надёжнее tar'ов на хоумпейдже на подкроватном сервере.

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

Go — интересный :)

Можно поинтересоваться чем? Да, мне не нравится язык - не скрываю, но стараюсь быть объективным. Он достаточно простой и удобный - это да. А интересность в чём? Ничего нового и оригинального, вроде. Гороутины разве что, но и они не прорыв, разве что удобными сделаны.

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

И откуда уверенность что «вброс» про 2/3 - это вброс?

Да. Какой-то очередной «хакир» подводил результаты под свое заблуждение, что все пишется на с патамуштабыстро а java только пускала. Если внимательно поковырять NDK - половина из доступного функционала типа GPS, гироскоп, сеть, и т.д. - тупо обвязка вокруг жабы в далвике, и в большинстве случаев дернуть ее из явы не в пример быстрее и надежнее. Речь о 99% в сильно натянутом случае можно отнести к играм, но и там С/СPP это скорее для релиза под 3 платформы - дроид, йосик и винфон.

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

Внезапно это действительно очень хорошая замена питона. Плюсы по моему скромному мнению переусложнены. Слишком много нюансов нужно учитывать. Го строже - компилятор не соберет программу, если есть неиспользуемый импортированный модуль или объявленная и неиспользуемая переменная, например.

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

Горутины, каналы, интерфейсы, очень быстрая компиляция.

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

Осторожно. Ошибка логического процессора.

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

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

Речь о 99% в сильно натянутом случае можно отнести к играм

почти все игры на андроиде делаются на фреймворках, они хорошие и умеют все, посмотри на тот же unity3d или другие аналоги, ндк никто не трогает даже близко напрямую.

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

почти все игры на андроиде делаются на фреймворка

Cocos2d? Еще как трогает.

посмотри на тот же unity3d или другие аналоги, ндк никто не трогает

:DDDD Так юнити то и трогает.

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

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

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

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

Я не про С/CPP как таковой, я про результаты таких «статистических» исследований. Анализ приложения с Unity или другим кросс-платформенный фрэймворком (как правило на плюсах) покажет наличие jni в приложении, даже если непосредственно приложение лабали на js. Отсюда и результаты. Так же сюда могли загреметь и всякие адвертки для дроида, их тоже для кроссплатформенной поддержки стараются делать не особо нативными.

А так - с одной стороны, в сложном проекте конечно логичней сделать ядро на плюсах и обвязать его под каждую платформу. Но тут есть некоторые «НО», для разработки такого ядра нужны специалисты которые хорошо рубят фишку во всех трех основных платформах + СPP - такие встречаются очень редко и берут очень дорого, в противном случае если тимлид в чем-то хромает - получается аццкий глюкодром под все три платформы.

Гораздо дешевле набрать по-раздельности йосников , дроидщиков и шарпеев и координировать их.

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

Он достаточно простой и удобный - это да. А интересность в чём?

В простоте и удобстве :)Ну, ещё там по мелочи, высокая скорость компиляции, очень лёгкий стартап и т.п.

Гороутины разве что, но и они не прорыв, разве что удобными сделаны.

«Интересный» != «революционный»

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

old = append(old, make([]int, newsize-oldsize)...)

Не, ну, конечно, можно, но если компилятор не проявит хорошей смекалки, может получиться очень неоптимально: сначала создастся пустой слайс размера (newsize-oldsize), потом слайс размера newsize, потом туда скопируются данные из old и нули из только что созданного слайса. Хотя надо будет посмотреть, во что это скомпилируется, может быть, компилятор оптимизирует эту ситуацию.

proud_anon ★★★★★
() автор топика
Последнее исправление: proud_anon (всего исправлений: 1)
Ответ на: комментарий от anonymous

Хреновенька знаю теорию ЯП, но почему-то мне кажется, что Any Any Any Ay reflect - всё это делается на этапе выполнения. И еще мне кажется твои list и f нуждаются в проверках на соответствие типов. Которые нормальный язык с генериками производит сам на этапе компиляции.

makoven ★★★★★
()
Последнее исправление: makoven (всего исправлений: 3)
Ответ на: комментарий от makoven

Представлена утилита go generate предназначенная для генерации кода на стадии компиляции. Генерация методов для частных типов из generic кода — частный случай возможного применения go generate.

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