LINUX.ORG.RU

Вышел Go 1.5

 


0

6

19 августа 2015 года вышел шестой стабильный релиз языка Go.

Основные изменения:

  • Компилятор и рантайм был транслирован с C на Go, убрав последние остатки C из кодовой базы Go;
  • сборщик мусора был полностью переписан, что позволило уменьшить паузы во время сборки мусора на порядки;
  • изменили значение GOMAXPROCS (количество одновременно исполняющихся горутин) с 1 до количества логических CPU;
  • изменения в линкере позволили распространять Go-пакеты в виде динамических библиотек, которые можно линковать с программами как на Go, так и на C.

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

★★★

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

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

Гуглеры мамой клянутся, что stop the world должен отрабатывать не дольше 10 мс, а в среднем 1-2 мс. А это уже почти soft real-time. Ни JVM, ни CLR (хотя это под вопросом), насколько мне известно, таким похвастать не могут.

Есть JVM с жестким реалтаймовым сборщиком мусора. 10 мс это совсем не круто. Я недавно делал проект, жрало несколько гигабайтов в пике, обычно чуть меньше гигабайта, пока мониторил — все сборки в пару мс укладывались. Аккуратно написанный код и G1 с правильными настройками дают хорошие показатели.

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

Я не в теме, просто любопытствую - правда что ли? Неужели реализации в той же джаве или шарпе отстают?

Пока в го такие «прорывы» каждый релиз, очевидно, что его сборщику ещё развиваться и развиваться до взрослых устоявшихся реализаций. В той же джаве этих сборщиков вообще несколько штук, даже в стандартной поставке, потому что для разных задач и окружений оптимальны разные алгоритмы.

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

напиши это же на читаемом го неубожестве.

Вообще такой код надо в отдельную функцию с несколькими if выносить, это как раз хороший пример убожества тернарного оператора.

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

в зависимости от ситуации я хочу писать то как Ахматова, то как Маяковский

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

holuiitipun ()

Господа, объясните, почему все, говоря о крутости Го, ставят докер в пример? Я не сильно в теме, но разве докер не что-то сродни архиватору, утилите, которая пакует контейнеры, а основную работу делает cgroups и ядро? На кой архиватору каналы и сборщик мусора? Объясните, почему именно Го, хорошо подходит для написания Докера?

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

Господа, объясните, почему все, говоря о крутости Го, ставят докер в пример?

Потому что кроме докера на go ничего приличного нет)

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

Не испытывал то чувство, когда пишешь на языке без ";", выражение не влезает в строку, но боишься перенести?

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

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

потому что старые полностью всех удовлетворяют

а как начинал, но так обделался

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

Не испытывал то чувство, когда пишешь на языке без ";", выражение не влезает в строку, но боишься перенести?

Как-то в Scala же оно работает:

val smth = that.withSmth(1, 2, 3)
               .cool()

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

Проблемы python, в coffeescript можно делать многострочные:

something.then (val) ->
  console.log(val)

Ну и проблемы в python не из-за отступов. Скобечек нет ещё и в ml язык.

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

Как-то в Scala же оно работает

«Как-то» везде работает. А нормально работает, только когда есть символы, терминирующие выражение и блок.

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

«Как-то» везде работает. А нормально работает

В Scala оно всегда одинаково и хорошо работает. Да даже в python можно использовать `/`.

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

В Scala оно всегда одинаково и хорошо работает

Я очень рад за скалу

Да даже в python можно использовать `/`

А можно и забыть. Компилятор должен предупреждать о незавершенном выражении а не создавать двусмысленность на пустом месте

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

изменения в линкере позволили распространять Go-пакеты в виде динамических библиотек, которые можно линковать с программами как на Go, так и на C.

Valor, ну шо, щастье привалило? :)

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

Кто-нибудь понимает зачем создаются все эти новые языки - go, dart, rust, ... ?

Да. Чтобы решать задачи на отъ**ись. Только для этого.

Кроме того, весь их код всегда write-only. Не в текущей версии ЯП, но в следующей, by design. Изменения ради изменений.

Есть картинка с треугольником «качество - быстро - дёшево». В век потребл*дства качество потеряло смысл. Не смысла делать «вечные» лампочки, нет смысла делать и «read-only» программы. Нужно побыстрее наговнокодить, чтобы продать, а потом когда понадобится починить её, продать новую версию в полтора раза дороже. И так круг за кругом: генерация шлака -> потребление -> фекалии/батхерт -> генерация шлака -> потребление...

Словами ситуацию не изменишь. Можно лишь остаться со своей старой школой для тех, кто понимает суть вещей. С каждым годом таких все меньше и меньше. И если не ты, так твои дети будут пользоваться одноразовыми программами и одноразовые ОС (из недавнего: тот же андроид уже стал одноразовым, миллионы устройств остались без апдейтов).

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

Вот именно за такие «выразительные конструкции» Ruby и называют порой «ещё один Перл».

Не понимаю почему. Тут ведь просто английский текст разбавленный скобочками и точками. Что может быть не ясно?

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

ну есть еще packer от создателей vagrant. тоже на go написан. очень удобная вещь в плане переносимости. тупо скопировал библиотеки в каталог программы и все у тебя куча новых плагинов без гемороя.

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

Кроме того, весь их код всегда write-only.

по сравнению с цепепешным? Да ты йобнутый!

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

Есть JVM с жестким реалтаймовым сборщиком мусора.

С мягким. Там просто ограничение на StopTheWorld

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

И так круг за кругом: генерация шлака -> потребление -> фекалии/батхерт -> генерация шлака -> потребление...

Словами ситуацию не изменишь. Можно лишь остаться со своей старой школой для тех, кто понимает суть вещей.

Толсто и уныло.

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

Насколько дешевле писать на го, чем на плюсах? Видимо, намного. А writе-only можно писать на любом ЯП. А если не видно разницы, то зачем платить больше?

Вот тут кто-то говорил, что за недельку сотрудники «гочат». А с плюсами за недельку плюсачить из фантастики. Не прав?

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

лапша из if/elseif/elseif/else с повторным присваиванием в блоках и обязательными фигурными скобками даже для одной инструкции - не убожество, а тернарный оператор - да. Хз что нужно употреблять, чтоб так думать.

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

выворачивают синтаксис ради ничтожных профитов - вот это вызывает сильный рвотный рефлекс и мощное отторжение. По крайней мере лишь у меня и всех кого я знаю...

Тут только менять круг общения. Больше ничего не поможет.

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

Потомучто с докером Go сразу поднялся на уровень выше над всеми другими новыми и неочень новыми языками, на которых и близко ничего такого нет. Про стоимость компании за миллиард долларов уже писал, даже VMware стал поддерживать докеры.

Еще есть logstash, который знают все работающие с логами, а к нему написан уже известный logstash-forwarder на Go. Базы данных на Go.. библиотеки сразу пишут под свои сервисы для Go в том числе наряду с питоном и другими популярными ЯП.. и много другого классного и уже сегодня применимого, а всякие Rust-ы лишь завидуют

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

Не передёргивайте, мы говорим сейчас о языках программирования. Для С++ есть масса библиотек, решающих ту-же кучу алгоритмических задач. У меня возникло ощущение, что вы путаете C++ с ассемблером.

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

Ответ просто прекрасен. В каждой теме про языки появляется гребанный Конфуций и изрекает «Надо выбирать правильный инструмент под проект, а не наоборот». И сколько я не пытался узнать у них методику выбора правильного инструмента под проект - всегда бред или увиливания. И вот наконец, простой, понятный, блестящий ответ:

Потомучто с докером Go сразу поднялся на уровень выше над всеми другими новыми и неочень новыми языками, на которых и близко ничего такого нет. Про стоимость компании за миллиард долларов уже писал, даже VMware стал поддерживать докеры.

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

Вот тут кто-то говорил, что за недельку сотрудники «гочат». А с плюсами за недельку плюсачить из фантастики. Не прав?

Прав. Ты считаешь это минусом go?

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

У меня большие сомнения, что писуны, постоянно нуждающиеся в каких-то рамках, напишут что-то хорошее. Я бы к своим проектам таких людей не подпускал, а вы?

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

лапша из if/elseif/elseif/else с повторным присваиванием в блоках

Разбивать код на функции ещё не научили?

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

Не нужна тут лапша из ифоф. Нужен switch-case.

feofan ★★★★★ ()

Круто, что у Go дела хорошо идут. Язык чертовски спорный, но интересный.

А вот обсуждение новости просто в нулину неадекватное.

ozkriff ()
Ответ на: комментарий от Deleted
func isLeapYear(year int) bool {
  switch {
  case year % 400 == 0:
    return true
  case year % 100 == 0:
    return false
  case year % 4 == 0:
    return true
  default:
    return false
  }
}
feofan ★★★★★ ()
Последнее исправление: feofan (всего исправлений: 1)
Ответ на: комментарий от iu0v1

Написал жизнь на sdl, остался доволен и вернулся назад к изучению общелиспа. Нет у меня задачек требующих статическую компиляцию и большую скорость, а на лиспе писать тупо удобнее.

Удобно писать на нем как на хорошей замене c/c++, вывод типов, структурки, полиморфизм по типам данных, даже какие-то намеки на позднее связывание для объектной системы.

Вот этот мужик хорошо пишет про ним, у него серия статей, вот например сравнивает его с Go/Rust http://goran.krampe.se/2014/10/20/i-missed-nim/

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

ИМХО, да. Особенно применение - никаких глобальных переменных и, соответственно, никаких проблем при многопоточном использовании.

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

проблемы с многопоточным программированием откуда взял? а глобальные переменные? Бред какой-та %)

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

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

Из опыта.

а глобальные переменные?

В твоём примере $isLeapYear и $year - переменные. Переиспользование возможно только копипастой.

Бред какой-та %)

Точно.

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

Go - это событийно-ориентированная парадигма программирования с решенным вопросом масштабирования по многим CPU - из коробки в языке.

если говорить об обычных языках: Perl, Pyhton, Ruby итп, то там асинхронная парадигма возможна, но масштабирование по CPU очень сложно. Реализация тредов в большинстве языков оставляет желать лучшего. Реализация файберов - везде зачаточная.

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

аналог моего кода - лапша ифов, или switch-case. Добавь тернарный оператор в функцию, в чем проблемы?

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

Go - это событийно-ориентированная парадигма программирования

facepalm.jpg

Perl, Pyhton, Ruby итп, то там асинхронная парадигма возможна, но масштабирование по CPU очень сложно

Python вполне масштабируется с помощтю multiprocessing. Но это менее эффективно, чем в Go, конечно.

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

Тем, что ты должен оборачивать всё в функции?

Что у тебя будет деструктор, что финализатор. Какая разница?

Или тем, что этот defer прибит гвоздями к области видимости функции?

Ну так если объект живёт только в этой области. Как иначе надо-то?

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