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 ()

Ты его используешь где-то?

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

пока нет. тыкаю палочкой, пописываю простенькие программы.

ymn ★★★★★ ()

Страшный он какой-то. Чем оно лучше С++?

vova7890 ★★★ ()

Вангую, что гугл его поматросит и бросит.

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

Что касается веб разработки... во всём!!!

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

Велосипед проще мопеда?

не всем надо/не все могут осилить плюсы, даже С не все осиливают, более того - не везде С и С++ вообще надо, а Go - простой, но довольно мощный ЯП, свое применение найдет

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

Как первое впечатление? У меня после erlang и ocaml, не совсем однозначное.

SAA ★★★ ()

Этим кто-нибудь пользуется, кроме хипсторов?

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

Этим кто-нибудь пользуется, кроме хипсторов?

Два чаю тебе.

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

Бинари толстые из-за статической линковки по дефолту. Feel the difference:

$ go build hello.go; du -sh hello; ldd hello
1.3M	hello
	not a dynamic executable

$ gccgo hello.go -o gccgo_hello; du -sh gccgo_hello; ldd gccgo_hello
24K	gccgo_hello
	linux-vdso.so.1 =>  (0x00007fffff1f7000)
	libgo.so.0 => /usr/lib/x86_64-linux-gnu/libgo.so.0 (0x00007fc038cea000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc038a68000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc038851000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc0384c7000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fc03b9fb000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc0382ab000)

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

not a dynamic executable

В него даже libc влинкована статически? Закопайте это немедленно.

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

Feel the difference:

А gccgo уже умеет в сборщик мусора? И с гоурутинами там были какие-то проблемы

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

В чем проблема ? Сравни с тупорылым пистоном. Там run-time в разы толще.

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

плюсую вопрос - + 1Мб к бинарнику нынче никто и не заметит, зато запустится везде, ну почти везде - кроме говна мамонта из начала 2000-х

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

Ниже был пример динамической линковки.

Я видел. Но если язык делают люди, предпочитающие такие дефолты - ну его нафиг, этот язык.

Этим кто-нибудь пользуется, кроме хипсторов?

https://github.com/search

Skynet is a framework for distributed services in Go.

Go client driver for doozerd, a consistent, distributed data store

и.т.д... Это и есть хипсторы.

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

В чем проблема ?

Спроси Дреппера.

Сравни с тупорылым пистоном. Там run-time в разы толще.

Ты - позор анонимусов.

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

Сборщик мусора для gccgo в 4.7.1 дали, емнип. Со своей колокольни проблем с горутинами не видел.

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

Спроси Дреппера.

он навалил кучу кода и свалил - некого спрашивать, вообще с glibc весело - поменяли поведение memcpy на правильное - флеш стал падать, что делать - апнуть версию символа, совместимость 99% программ пошла лесом, флеш под линукс в итоге благополучно закопали, спрашивается - что это и кому было надо?

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

из всякой новомодной хипстоты мне больше всего нравится Rust.

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

Со своей колокольни проблем с горутинами не видел.

AFAIK, gccgo с умолчательным компоновщиком использует стек большого размера, что препятствует наплодить 100500 горутин.

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

Спроси Пайка и Томпсона и не воняй.

anonymous ()

Стоит потыкать палочкой, хотя-бы из уважения к Кену Томпсону.

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

он навалил кучу кода и свалил - некого спрашивать

На вопрос «зачем линковать libc динамически» он ответил. Что с ним случилось потом - неважно.

вообще с glibc весело - поменяли поведение memcpy на правильное - флеш стал падать, что делать - апнуть версию символа, совместимость 99% программ пошла лесом

У тебя какая-то своя, глубоко личная версия событий.

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

На вопрос «зачем линковать libc динамически» он ответил.

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

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

«Every only slightly security relevant application must use the latest version of the code it is linked with.» - практика показывает, что большая часть уязвимостей находится именно в новых версиях, кроме того - никто не запрещает обновлять статично слинкованную программу

У тебя какая-то своя, глубоко личная версия событий.

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

wota ★★ ()

Тестов по сравнению производительности с версией 1.0 еще нету?

umren ★★★★★ ()

Каковы перспективы данного ЯП? Для чего он разрабатывался?

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

Быстрая сборка проектов (в сто раз быстрее), параллельность изкоропки, синтаксис больше надо сравнивать с обычным «C», ибо Go позиционируется как «C 21 века», а ваще он для big data, сетевых приложений и веба, для системного программирования он вроде как подходит не очень, тут я бы больше смотрел на Rust из свежого.

umren ★★★★★ ()

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

BSD-фанбой штоле? Почему непопулярные системы стоят в начале списка?

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

BSD-фанбой штоле

это копипаста с википедии. и да, я BSD-фанбой))

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

Нет, он слишком хорош =) да и в гугл его используют уже слишком активно, что бы просто так бросить, альтернатив сейчас реально нету. Писать на Go значительно быстрее, чем на C/C++ - результат версии 1.0 был примерно в 2 раза медленее по исполняемости. Если сравнивать с Java, то Go при почти «той же» скорости, потребляет в 10 раз меньше памяти =)

umren ★★★★★ ()

Язык пробовал - очень понравился, но повседневное использование его пока останавливает довольное скудный набор библиотек, годик-другой подождать надо еще =) а те библиотеки, что есть.. ну пока на премиум класса еще, были замечены многочисленныенедоработки среди «обычных» вещей, судя по количеству статей которые я проглотил

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

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

Простой? Для простых вещей да, но программировать на вот таком:

type T struct {
	msg string
}

var g *T

func setup() {
	t := new(T)
	t.msg = "hello, world"
	g = t
}

func main() {
	go setup()
	for g == nil {
	}
	print(g.msg)
}

Even if main observes g != nil and exits its loop, there is no guarantee that it will observe the initialized value for g.msg.

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

A-234 ★★★★★ ()

А зачем он нужен вообще? Чем связка C++/Python не устраивает?
Наверно для понтов гугл решил замутить свой принципиально новый язык от создателей си и юникс... Посмотрел на примеры программ на go: все хорошо, угрозы для C++ и питона он не представляет.

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

Часть операторов выполняется в порядке описанном программистом а другая часть выполняется когда компилятору удобно

все дело в g = t, это не атомарная операция, так что все выполняется в нужном порядке, код на С и С++ вообще банально упадет без явной синхронизации

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

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

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

В строке :

go setup()

создается отдельная нить (goroutine), которая выполняется параллельно с функцией main.

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

скудный набор библиотек, годик-другой подождать надо еще =)

Вместо того, чтобы их писать.

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

Вангую, что гугл его поматросит и бросит.

Альтернативно: гугл его всем вбросит, а потом их поматросит.

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

Тем, что C++ - говно, Пистон - тупорылое говно.

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

даже С не все осиливают

мб не стоит таких людей подпускать к программированию?

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

создается отдельная нить (goroutine), которая выполняется параллельно с функцией main.

это не нить и выполняется она не параллельно. Иди учи матчасть.

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

t := new(T)
t.msg = «hello, world»

Два разных равно? Срочно закопать. Если хотят выделить new, пусть бы было какое-нибудь let t = new(T). Раз уж у них уже есть примерно такая же конструкция «go setup». А это... В общем франкештейн какой-то, смотреть неприятно. Может, технологически оно и круто, но пользоваться как-то не хочется.

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