LINUX.ORG.RU

Релиз Go 1.1

 ,


2

7

Команда разработчиков рада сообщить о выходе новой версии языка программирования Go — 1.1.

Go — компилируемый многопоточный язык программирования, разработанный компанией Google. Первоначальная разработка Go началась в сентябре 2007 года, а его непосредственным проектированием занимались Роб Пайк и Кен Томпсон.

Версия 1.1 включает в себя множество усовершенствований, наиболее значительные из которых связаны с производительностью:

  • оптимизация компилятора и компоновщика;
  • улучшение работы сборщика мусора;
  • многочисленные улучшения в стандартной библиотеке.

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

Кроме того, есть некоторые изменения и в самом языке:

С момента выхода Go 1.0 было внесено 2600 изменений от 161 разработчика за пределами Google.

На данный момент поддержка Go осуществляется для операционных систем FreeBSD, OpenBSD, Linux, Mac OS X, Windows.

>>> Подробности

★★★★★

Проверено: maxcom ()

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

Что значит больше фич? Есть D удобен, а он удобен, то им пользуются, так как он с++ который правильный (С), а го что ? с который правильный? Не, тут уже выше сказали, что просто скобки переставили.

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

defer.

Это чтобы скобку не писать? Гениальное изобретение. Особенно в смысле вложенности скоупов. А если я хочу сделать что-от после того как закроется файл например? Пихать в defer лямбду? Гениальный был ход!

r ★★★★★ ()

Достаточно посмотреть на оператор присваивания, чтобы почувствовать рвотный инстинкт. Ах да, еще fmt.Println. Буэээээ

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

Как с точки зрения чтения так и с точки зрения execution flow. А уже оптимизатор наверное вообще вешается.

С точки зрения чтения си++-утятами? Наверное.
А про трудности оптимизации расскажи.

Главное таплов не изобретать.

Кортежи есть в Limbo, предшественнике го, если ты не знал. Видимо, выпилили за ненадобность.

В том что я хочу мою собственную коллекцию с таким же синтаксисом вызова.
Как мне сделать range например по дереву моей собственной реализации?

http://research.swtch.com/generic
Давай ещё раз: генерики или их отсутствие или ТОРМОЗЯТ, или ТОРМОЗЯТ, или ТОРМОЗЯТ. Разница лишь в том, что именно.
И да, вопрос с генериками до сих пор открыт.

кейвордов напихать

В го кейвордов ещё меньше, чем в си, не говоря уже про другие языки.

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

горутины и каналы.

треды чтоле? Вот чего точно нет в го это исключений.

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

А если я хочу сделать что-от после того как закроется файл например? Пихать в defer лямбду? Гениальный был ход!

Если тебе так уж не нравится defer c лямбдой (объяснишь, что в этом плохого?), делай defer что-то ; defer закрыть_файл.
Что ты как упоротый?

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

Вот чего точно нет в го это исключений.

http://blog.manki.in/2012/09/error-handling-java-vs-go.html
Для действительно исключительных событий есть panic/recover, который действуют похоже на исключения.

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

ну я же говорю что нет, костыли какие-то на костылях и костылями погоняют.

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

а от лиспового синтаксиса тебя наверное в клочья разрывает?

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

«Every non-trivial program needs services which require dynamic linking»- чушь, HTTP-сервер, СУБД, даже гуй вроде скайпа (не тривиальный кстати) - работает статично слинкованным

Скайп - вполне тривиальная программа. Хочешь нетривиальную - посмотри на какой-нибудь Xilinx ISE.

«Other problems are file formats» - опять же ерунда, нет в системе либы под новый JPEG - соси лапу, поставил последнюю версию со статичной линковкой - спокойно работай

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

эти события имели место, ничего хорошо в итоге не получилось

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

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

У людей психологическая травма от «учебного» паскаля. Это можно увидеть из треда в тред: любое напоминание, как то begin/end (привет, ruby), :=, синтаксис if в го, декларация типов вида array[3] of Integer, и тому подобное вызывает у них сильнейшую фрустрацию.
Система образования в этой стране творит со психикой учащихся поистине ужасные вещи.

quantum-troll ★★★★★ ()
Ответ на: комментарий от tailgunner

Скайп - вполне тривиальная программа. Хочешь нетривиальную - посмотри на какой-нибудь Xilinx ISE.

«какой-нибудь Xilinx ISE» в плане гуя и интеграции в окружение - примитивщина

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

статическая тоже может обновляться - сюрприз, и при том иметь поддержку более новых форматов, чем умеет системная библиотека

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

«какой-нибудь Xilinx ISE» в плане гуя и интеграции в окружение - примитивщина

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

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

Бинарная переносимость статически собранной программы лучше

Пох. И бинарная переносимость не оправдывает статической линковки glibc.

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

С точки зрения чтения си++-утятами?

Нет не C++ утятами. А с точки зрения адеекватными людьми у которых голова действует адекватно - «куда показывают туда и поворачивают».

пример (псевда).

[code]
два named results.

result1 = 0
result2 = 0

if (condition1)
result1 = 1
if (codnition2)
result2 = 2

.....

if (codition3) return
.....

[/code]

Что будет в if(codition3) возвращено? И скажи мне что это - не наркоманство.

Видимо, выпилили за ненадобность.
ненадобность.

facepalm А что это чуть ли не в каждом if с ok?

Уже придумал эквивалент do notation?

А как мне передать результат функции f в функцию g если результат по количеству не соответствует сигнатуре? Никак?

Давай ещё раз: генерики или их отсутствие или ТОРМОЗЯТ, или ТОРМОЗЯТ, или ТОРМОЗЯТ

Бред сивой кобылы. Отсутствие генериков влияет только на статическую проверку. В условии отсутствие генериков ты получаешь или кастинг - что просто ошибки.

В го кейвордов ещё меньше, чем в си

НУ да. Сделаем new и make «системными функциями» и сделаем вид что это не кейворды.

r ★★★★★ ()
Ответ на: комментарий от quantum-troll

Что ты как упоротый?

Это я то опоротый? Ты мне только что предложил писать код задом наперед^H снизу вверх.

r ★★★★★ ()
Ответ на: комментарий от quantum-troll

У людей психологическая травма от «учебного» паскаля

Скорее у людей аллергия на глупость разработчиков языка, которые не используют best practices на текущий момент и вводят ненужные сущности в синтаксис без обоснования преимущества своего подхода. На кол таких разработчиков и в топку их поделия.

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

Почему за статическую линковку надо оправдываться ? Это преступление ? Ты вообще в своем уме ??

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

Что будет в if(codition3) возвращено? И скажи мне что это - не наркоманство.

Замени присваивание сверху на определение, а return на return result1, result2, и получишь то же самое, но без использования named results. Полно подобного и в обычной сишке.

Отсутствие генериков влияет только на статическую проверку

Я не только про, читай статью же.

quantum-troll ★★★★★ ()
Ответ на: комментарий от PolarFox

ведь это не аргумент

Зачем нужно было делать два разных по назначению способа декларации объектов один из которых похож на Питон а другой на Паскаль? Почему нельзя было причесать синтаксис и сделать его более однородным для понимания? Вопросы практически риторические :)

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

A-234 ★★★★★ ()
Ответ на: комментарий от d9d9

не используют best practices

Не могли как в крузисе^Wси++ синтаксис сделать. Плохо зделали тупо.

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

:= явно удобнее и короче, чем auto foo = Foo(), а семантически почти одно. Но тебя же беспокоят лишь мерзкие точечки рядом со знаком равно, верно?

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

Почему за статическую линковку надо оправдываться ?

Почему за статическую линковку libc нужно оправдываться?

Это преступление ?

«Это хуже, чем преступление - это ошибка» (ц)

Ты вообще в своем уме ??

Да.

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

Полно подобного и в обычной сишке.

Не «полно» а только в случаях сбора некоего результата по частям. И в ретурне очевидно что он что-то возвращает.

И твой аргумент работает в сторону «не нужно». Это не короче не проще вообще никакого преймущества не имеет кроме обфускации кода вроде «это просто ретурн или там гдето таки что-то вернется»?

Зачем?!?

Я не только про, читай статью же.

Читал я эту статью. Они обвиняют генерики в боксинге - что вообще только косвенно связано. И еще пускай откроют для себя http://www.scala-notes.org/2011/04/specializing-for-primitive-types

Если тебе надо экстремально быстрая коллекция с примитивами - в язке с генериками не проблема такую написать. Если в языке нет генериков - это большая проблема.

r ★★★★★ ()
Ответ на: комментарий от quantum-troll

Не могли как в крузисе^Wси++ синтаксис сделать.

С++ никому не интересен. Нормальная попытка - mozilla rust. ТАм хоть делли то что надо.

r ★★★★★ ()
Ответ на: ведь это не аргумент от A-234

Re: ведь это не аргумент

Киньте в меня ссылкой на ваше описание auto

Вывод типов.

два разных по назначению способа декларации объектов один из которых похож на Питон а другой на Паскаль

Краткий для переменных, тип которых не важен (a := 5), полный для значений, тип которых важен (например интерфейсов, var r Reader = GetCoolReader()).

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

В сях это тоже путь. И?

И в сях он тоже в кавычках. Ну или в скобках, да.

Можно мне реализацию мультимапы на Go? Ну пожалуста - я хочу посмеятся.

Мультимапы? Что-то типа map[int]map[string][]byte ? Или недостаточно смешно?

Это фейспалм полный.

Ну так не используй их - выше возможность не использовать 80% плюсов была представлена, как охренительное преимущество.

Меня удивляет необзодимость стопицотпервого очередного синтаксиса присваивания.

Простой и понятный синтаксис. Не можешь запомнить? Сложно набирать? Попей витаминчиков, авось полегчает.

Это лозунг го. Не «нужно потому что». А «почему бы и нет».

Как раз таки лозунг го - «почему бы не выкинуть ещё что-нибудь».

Хочу видеть в цвете например аналог этого:

func do() (int, error) {
	if x, err := might_return_error(1); err != nil {
		return 0, err
	}
	if y, err := might_return_error(x); err != nil {
		return 0, err
	}
	return might_return_error(y)
}

В том что я хочу мою собственную коллекцию с таким же синтаксисом вызова. что - нет нельзя? айайай - как легко подменять имплементации - с точностью до переписывания всего кода.

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

Как мне сделать range например по дереву моей собственной реализации? Писать на каком нибудь другом языке?

Специально для твоих деревьев gof придумали итератор, чтоб люди знали, с чем имеют дело. А то у некоторых вон побитовый сдвиг в файлы дует. Впрочем, range ещё и каналы умеет, так что если очень хочется, можно изобразить что-то подобное:

type MyItem int
type MyCollection []MyItem

func (m MyCollection) Items() chan MyItem {
	c := make(chan MyItem)
	go func() {
		for _, i := range m {
			c <- i
		}
	}()
	return c
}
Laz ★★★★ ()
Ответ на: комментарий от r

Rust решает другие задачи, не стоит его сравнивать с Go. Go - сеть/уэб/паралеллизм. Rust - современный аналог C++/системный софт.

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

паралеллизм

Скорее конкурренси. Это разные вещи.

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

Это не короче не проще

На практике это именно что короче и проще, и в исходниках го используется часто.

это просто ретурн или там гдето таки что-то вернется

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

Eсли в языке нет генериков - это большая проблема.

Никто не спорит с этим, тема генериков довольно часто поднимается на golang-nuts. Рано или поздно, но их запилят, но пока что это открытый вопрос.

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

Rust решает другие задачи, не стоит его сравнивать с Go. Go - сеть/уэб/паралеллизм

Rust - параллелизм/сеть/веб.

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

В rust со скобками в if обошлись точно так же, и это правильно. Выброс лишних лексем - это действительно улучшение языка.

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

Прошлый век — это глобальный флаг ошибок (це). Прошлое десятилетие — исключения (жаба, цшорп и прочее). Сейчас в моде специальные возвратные значения (го, скала).

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

В скале есть исключения и ошибку можно поймать и обработать на любом уровне вложенности, есть блок finally, а в сраном go как в дедовские времена надо проверять коды возвратов и писать портянки if'ов.

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

Прошлый век — это глобальный флаг ошибок (це).

Он похоже имел ввиду signal handlers + setjmp/longjmp. Идея в целом неплоха, но практически неюзабельна в C и абсолютно неюзабельна в C++ при использовании ++.

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

есть блок finally

В Go есть какой-то аналог (defer, кажется).

в сраном go как в дедовские времена надо проверять коды возвратов и писать портянки if'ов.

Да ладно, возвращаются 2 значения, и результирующий код не такой уродливый, как в Си.

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

Да ладно, возвращаются 2 значения, и результирующий код не такой уродливый, как в Си.

Но всё-таки крайне навязчивый. В хаскеле можно по крайней мере сделать монаду и использовать do-синтаксис для случаев, когда от блока требуется сразу вернуть первую из ошибок, в го придётся, в лучшем случае, писать if err != nil { return } после каждого возвращающего ошибку вызова.

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

По твоей ссылке херня написана в части java. Коллекция байтов - это наркомания. Чем в рантаме коллекция ссылок на Object будет медленнее коллекции ссылок на MyObject - непонятно. Для примитивов есть специализированные коллекции полностью совместимые со стандартными, но без боксинга - fastutil. У java generic'ов единственный минус - типа в рантайме не знаешь, про скорость это из пальца высосано.

anonymous ()

Жизненный цикл любой новости о ЯП на ЛОРе.

  • Публикуется новость о языке программирования;
  • (1 стр.) Набегают анонимусы, охотники за шкворцом, неосиляторы и просто мимокрокодилы с криками «нинужно», «а зачем X, когда есть Y», «чем это лучше Z» и т.п.;
  • (2-4 стр.) Просыпаются компетентные в теме ЛОРовцы и обсуждают тему;­
  • (5-10 стр.) Набегают ёбн­­у­тые лиспофанбои и скатывают тему в лиспосрач;
  • (10-15 стр.) Лиспофаги озалуплены, общими усилиями адекватных регистрантов и анонимусов;
  • (15- стр.) Просыпается quasimoto и начинает обсуждать сам с собой монады, коммутативные диаграммы, стрелки, 2-стрелки, 3-стрелки, декартово замкнутые категории, аппликативные функторы, анаморфизмы, катаморфизмы, эпиморфизмы, параморфизмы, моноиды, полугруппы, когомологии и топосы Гротендика.
anonymous ()
Ответ на: комментарий от quantum-troll

Я не спорю с тем, что можно сделать еще лучше. Но, на фоне Си или Си++ без исключений, соглашение Go выглядит разумно и удобно (правда, это почти единственная вещь, которая мне нравится в Go)

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

А вот и лиспофанбои пожаловали! В точности по плану.

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

А, извини, братюнь, попутал. В профиль не заглянул. Просто этот дефун.цо — любимый ресурс лишперов-петросянов, который идёт в ход, когда им нечем парировать.

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

Предчувствую появление языка Ya!

пакет главный
несисюда «фмт»

функц пич() {
    фмт.ПичатайСтроку(«Превед, мир»)
}

функц главная() {
    напотом функц() {
        возвернись()
        фмт.ПичатайСтроку(«Я СНОВА ЖИВОЙ»)
    }
    для и := 0; и <= 100; и++ {
        йа пич() //Некошерно, конечно, из 101 горутины одновременно строки выводить
    }
    оужас(«An error has occured»)
}
proud_anon ★★★★★ ()
Последнее исправление: proud_anon (всего исправлений: 3)

GWT уже переписали на это поделие?

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

В России в провинции 50% населения работает охранниками, а на Западе - изобретателями велосипедов.

«Постиндустриальное общество», однако...

Bioreactor ★★★★★ ()
Последнее исправление: Bioreactor (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.