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 ()
Последнее исправление: CYB3R (всего исправлений: 2)

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

не все могут осилить плюсы, даже С не все осиливают

You got that backwards, bro.

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

При «GOMAXPROCS=2» - параллельно.

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

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

Забаньте этого товарища пока ещё не поздно.

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

Забаньте этого товарища пока ещё не поздно

просто ты не захотел подумать, большая часть уязвимостей вылавливается после релиза, обкатав либу года два-три ты значительно уменьшишь вероятность нахождения новых багов, банальный пример на практике - RHEL и debian

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

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

В C (да наверное почти в любом языке, может кроме жабы там или php с питонами) на мультипроцессорной x86 при отсутствии выравнивания по 4-байтам это точно не атомарная операция.

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

В языках со сборщиком мусора, - нет.

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

код на С и С++ вообще банально упадет без явной синхронизации

С какого перепугу, если при g!=0 g будет указывать на созданный объект, причем уже после инициализации поля msg?

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

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

выше уже написали - даже в С это не обязательно атомарная операция, а в Go еще и GC есть

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

С какого перепугу, если при g!=0 g будет указывать на созданный объект, причем уже после инициализации поля msg?

это я не про тот пример в частности, а в общем, надо было мне уточнить

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

А что на x86 или x86_64 команду записи по не лежащему на границе слова адресу можно прервать посреди выполнения так, что часть данных будет записана, а часть нет? И какое же значение тогда будет у счетчика команд, дробное что-ли?

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

С какого перепугу, если при g!=0 g будет указывать на созданный объект, причем уже после инициализации поля msg?

А если оптимизацию включить? :) Я бы на месте компилятора мог оставить 2 строчки в goroutine вместо трех, исключив локальную переменную...

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

А что на x86 или x86_64 команду записи по не лежащему на границе слова адресу можно прервать посреди выполнения так, что часть данных будет записана, а часть нет? И какое же значение тогда будет у счетчика команд, дробное что-ли?

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

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

не всем надо/не все могут осилить плюсы, даже С не все осиливают

Где ты таких дефектных видал? :) Любой мощный язык позволяет пользоваться лишь его подмножеством.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от anonymous

Циферки то давай, статист.

их у меня нет, в принципе может я и не прав, но таки идея debian'a, например, где сначала софт обкатывается и исправляются найденные баги, мне кажется надежней чем RR

wota ★★
()

Как всегда, орда экспертов.

Go предельно прост и лаконичен, осваивается за несколько недель. C++ икспертам: Страуструп говорит, что чуть не ежедневно узнаёт что-то новое о своём языке.

Go надежен. Здесь невозможно столкнуться с типичными проблемами C/C++.

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

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

Ну так способов выстрелить себе в ногу всегда хватало.

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

Какой-то у Вас алфавит странный: O идет раньше L.

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

Результат: руки надо отрывать писунам неоднозначного кода. Я знаю _подмножество_ Си, которое мне надо и там для меня нет подобных сюрпризов.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от wota

не обязательно

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

anonymous
()

Почитал по диагонали - волшебный язык!

vada ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Слив защитан. Мы пишем так, что даже не встречаем undefined behaviour. Такого даже Торвальдс не говорил, кажется.

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

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

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

--- В новости забыли упомянуть поддержку Plan 9.

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

«2 строчки» там никакая оптимизация не даст так как есть 3 действия: создать объект, инициализировать поле объекта, присвоить значение глобальному указателю.

исключив локальную переменную...

Будет исключено обращение к памяти, так как значение t будет храниться в каком-нибудь регистре. Но причем тут порядок действий?

P.S. В Go нет аналога volatile и сам он не может такое отследить? Если так, то странно звучит фраза о поддержке многопоточности.

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

надо было мне уточнить

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

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

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

:) Лучше не полагаться на атомарность int-ов и указателей, если не хочешь потом ловить баги на ровном месте. В принципе, код типа

volatile int terminated=0;

void run()
{
  while( terminated!=0 )
  {
    /* делать что-то */
  }
}

void terminate()
{
  terminated=-1;
}

где terminated меняется всегда одинаково с «0» на «не 0» вполне допустим без всяких примитивов синхронизации.

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

Если хотят выделить new

Не new, а автоматическое приписывание типа и объявление новой переменной. Не нравится, пиши «var t = new(T)».

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

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

не вижу смысла - стандарт этого не гарантирует, мы ведь про С говорили, а не про x86 + gcc

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

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

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

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

порядок там обычный - это был ответ A-234, который решил, что Go меняет порядок команд, а не падать позволяет не порядок, а сам Go, который безопасно работает с указателями

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

Будет исключено обращение к памяти, так как значение t будет храниться в каком-нибудь регистре. Но причем тут порядок действий?

P.S. В Go нет аналога volatile и сам он не может такое отследить? Если так, то странно звучит фраза о поддержке многопоточности.

Просто предположение почему может не работать. В принципе, если убрать t, то получаем примерно вот такое вот http://en.wikipedia.org/wiki/Double_checked_locking_pattern

Какая-то полуэкспериментальная и возможно небезопасная оптимизация вполне может убрать локальную t и сразу полезть в глобальную переменную.

В некоторых языках вообще lazy evaluation искаропки всегда включено, не то что там какие-то неиспользуемые локальные переменные...

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

решил, что Go меняет порядок команд

т.е. Go не меняет порядок команд? Тогда почему в том коде при g!=nil g.msg может быть неинициализировано?

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

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

Это не указатель. То есть, формально это указатель, но в парадигме этого языка присваивание происходит по каждому полю объекта. То есть это клонирование, а не присваивание указателя на объект.

om-nom-nimouse ★★
()
Ответ на: комментарий от wota

Дай ссылку на текст стандарта. Может там и про атомарность присваивания есть?

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

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

Только хипстеры типа меня и пользуют.

Спасибо ymn'ому человеку за позитивную новость! Ж8-]

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

т.е. Go не меняет порядок команд? Тогда почему в том коде при g!=nil g.msg может быть неинициализировано?

потому-что указатель Go != указатель С, если не считать специальный unsafe.Pointer

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

оптимизация вполне может убрать локальную t и сразу полезть в глобальную переменную.

И что она таким образом оптимизирует? Ну ни как не время выполнения.

anonymous
()

рада сообщить о выходе...

Ура! Радостное ненужно!

проектированием занимались Роб Пайк и Кен Томпсон...

Я думал, они уж померли давно! Это же «те самые», что юникс смастырили, да?

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

lazy evaluation и присваивание в одном участке кода? ССЗБ.

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

Т. е. если в Go я присваиваю указателю значение, то автоматиески создается новый объект и инициализируется полями того, на который указывает присваиваемое значение. Семантики указателей вообще нет что ли?

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

Go предельно прост и лаконичен, осваивается за несколько недель. C++ икспертам: Страуструп говорит, что чуть не ежедневно узнаёт что-то новое о своём языке.

C++ на то и рассчитан, чтобы можно было строить сложные вещи поверх существующих компиляторов, а не добавлять прямо в мейнстримный компилятор, делать анонс и лишь потом ждать пару лет, пока это доделают в остальных реализациях (если они вообще есть). Так что это фича.

Go надежен. Здесь невозможно столкнуться с типичными проблемами C/C++.

В Go даже открывающая фигурная скобка имеет разный смысл в конце строки и на новой строке. Таких подарков новичкам мир ещё не видывал.

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

Всё больше кукаретиков в американских университетах, которые изучают Computer Science вместо программирования.

Здесь есть интерфейсы, и использовать их очень удобно.

Думали удивить кого-то утиной типизацией? Да, она хороша, но не более того.

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

Go надежен. Здесь невозможно столкнуться с типичными проблемами C/C++.

Не понимаю этой женской логики.... Давайте слегка перефразируем:
«Йогурт более полезен, ведь в нём же не стоит ложка как в сметане!». *фэйс WTF*

От того, что в Си есть куча _обходимых_проблем_, Игого никак не становится от этого безопаснее! Указатели - это только часть проблем Си. В профессиональном коде вы возможно вообще никогда не увидите «null pointer exception»! Зато алгоритмических и многопоточных проблем - море и Го их никуда не спрячет.

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