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)

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

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

proud_anon ★★★★★
() автор топика

Отличная новость. Кстати, есть какой-то правильный способ изменения размера массива? Библиотека, может быть. Мой код для этого на [:newsize] и append в цикле выглядит как говно.

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

Размер массива изменить нельзя. Размер слайса можно изменить только в меньшую сторону, либо в большую, но размер не может превышать capacity, а capacity изменить нельзя. Потому что и массивы, и слайсы — это обёртки над блоками памяти, а не над связными списками блоков или более сложными структурами. Если capacity не хватает, надо выделять новый массив. append делает это автоматически.

Мой код для этого на [:newsize] и append в цикле выглядит как говно.

А как он выглядит? Почему в цикле? append может и много элементов сразу присоединить.

proud_anon ★★★★★
() автор топика
Последнее исправление: proud_anon (всего исправлений: 1)
Ответ на: комментарий от sevenredlines
$ cat arraytest.go
package main

import (
	"fmt"
)

func main() {
	ar1 := []int{ 1, 2, 3}
	ar2 := []int{ 4, 5, 6}
	ar3 := append(ar1, ar2...)
	ar4 := append(ar3, 7, 8, 9)
	fmt.Println(ar4)
}

$ go run arraytest.go
[1 2 3 4 5 6 7 8 9]
proud_anon ★★★★★
() автор топика
Последнее исправление: proud_anon (всего исправлений: 1)
Ответ на: комментарий от sevenredlines
x := make(<тип g.area>, newsize)
copy(x, g.area) //Можно проверить возвращаемое значение, но вроде ошибки невозможны, если newsize > len(g.area)
g.area = x
proud_anon ★★★★★
() автор топика
Последнее исправление: proud_anon (всего исправлений: 1)

Замечательная новость! Еще бы ему хотя бы один полноценный биндинг для гуя, а лучше собственную гуи-библиотеку.

buddhist ★★★★★
()

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

Думал не дождусь.

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

Думал не дождусь.

В какой-то старой теме кто-то долго доказывал, что именно для андроидов Google и начала разработку Go.

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

я думаю даже перл потянет лор, что за вопрос.

Вопрос в другом. Потянят ли разработчики Go.

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

это чушь, go никогда не планировался для андроидов, это просто сайд эффект такой получился.

Автор этого утверждения связывал Go с лучшей проддержкой многоядерных процессоров и якобы для андроида это очень кретично.

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

Языку 5 лет, а популярность - на уровне ЛОРовских новостей :) Ди - вот будущее, trust me!

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

Его разрабатывает не гуголь, а некоторые его сотрудники. Гуголь там малую роль играет. И по словам авторов в первую очередь для серверов и всяких бекендов, а нужность версии под андроид часто ставили под сомнение. Я за анонсами и рассылкой не следил с 1.2, и внезапно обрадован появлению андроида.

entefeed ☆☆☆
()
Ответ на: комментарий от matumba

когда его уже в поставку gcc уже втыкнут, а?

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

А теперь сходи и посмотри рост популярности руби/питона. По 10 лет никому не нужны были.

entefeed ☆☆☆
()
Ответ на: комментарий от matumba

а популярность - на уровне ЛОРовских новостей

facepalm

Ди - вот будущее, trust me!

Который в 2 раза старше, при абсолютной непопулярности. А еще он слишком скучный

derlafff ★★★★★
()

Большая часть стандартной библиотеки транслирована в Go.

Могуч русский язык.

hizel ★★★★★
()

Plan 9

А на арме оно собирается?

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

Большая часть стандартной библиотеки транслирована в Go.

Могуч русский язык.

А я за ними особо не следил и не знаю точно, вручную они её переписали или автоматически/полуавтоматически транслировали.

proud_anon ★★★★★
() автор топика

) //стандартные возмущения об отсутствии параметрического полиморфизма

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

По ссылке очередной высер на тему «Как я даю свое определение термину „объектно-ориентированный язык“»?

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

расшифрую,

В нём есть все для Объектно-Ориентированного Программирования, причем удобного и красивого. И без объектов.

мне Go пока нравится, но ваша фраза таки противоречива. вот классов, коих в Go тоже нет, определение ООП не предусматривает, да.

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

От себя не бомбит, КАВЫЧЕЧНИК?

Deleted
()

Самый близкий к идеалу императивного ЯП - C++, и не надо выдумывать ветряные мельницы, с которыми вы потом «успешно боретесь» в этих ваших жабах, ЦэШарпах и ГоГо. Лучше думайте в сторону идеального декларативного/функционального ЯП. ВотЪ.

asaw ★★★★★
()

Plan 9 на AMD64

МММ... Вернулись времена, когда «хочешь прогу - напиши сам».

Vinni_Pooh ★★★★★
()

уже можно писать простые приложения целиком на Go

Не понимат, целиком на C++, без джявы, приложения писать под андройд нельзя, а на Go можно?

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

Научи как, пожалуйста. Не хочу ставить на домашний ноут JDK и ANT, нужно как раз исключительно опенгл-окно и тач-ивенты. В гугле примеров без активити на яве не нашёл.

anonymous
()

пять лет, а результата нет.

anonymous
()

Если все массово начнут пихать Го код в свои аппликации, то Андроид окончательно превратится в винду. В том смысле, что приложения будут заточены под один процессор

Потом появится новый процессор и корпорации начнут пилить новую ОС. На базе линукс, разумеется

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

скоро планируют переехать с googlesource.com на Github

Только issues tracker и wiki. Code review и pull request останутся га go.googlesource.com.

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

По ссылке какое-то БДСМ-порно.

Порно — да, BDSM — ты на плюсы посмотри. Тут все няшно и удобно. Никаких крайностей, «чистых» ООП и прочего граничащего с безумием крайнего безумия

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

Причем тут go? Нативный код и так уже в сотнях приложений, все уже и так прибито гвоздями к ARM

derlafff ★★★★★
()

А как собрать gcc с поддержкой go? Я добавил язык к ключу, в котором написаны c,c++, но при компиляции .go программы gcc валился с ошибкой. 4.9 версии. То есть gcc собирается, но не работает, пишит, что нехватает стандартной библиотеки go типа, кхм!

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