Может кто-нибудь объяснить, почему люди считают что Go подходит для concurrency и сервисов, хотя там нет нормального планировщика (любая горутина может неотдавать управление неограничено долго), общая память и глобальный GC, невозможно нормально остановить горутину, нет нормальной обработки ошибок?
Самое главное, есть же нормальная алтернатива — Erlang/Elixir + OTP.
Здравствуйте, chaotic-kotik, Вы писали:
CK>Может кто-нибудь объяснить, почему люди считают что Go подходит для concurrency и сервисов, хотя там нет нормального планировщика (любая горутина может неотдавать управление неограничено долго), общая память и глобальный GC, невозможно нормально остановить горутину, нет нормальной обработки ошибок?
Здравствуйте, Лось Чтостряслось, Вы писали:
ЛЧ>потому что го — это модно, стильно, молодежно
Может быть и правда молодежно, я когда на го пишу, сразу вспоминаю юность и турбопаскаль, те же ощущения от языка, что в свое время были от турбопаскаля, руки так и тянутся написать Uses Crt вместо import "fmt"!
Здравствуйте, chaotic-kotik, Вы писали:
ЛЧ>>потому что го — это модно, стильно, молодежно
CK>Может быть и правда молодежно, я когда на го пишу, сразу вспоминаю юность и турбопаскаль, те же ощущения от языка, что в свое время были от турбопаскаля, руки так и тянутся написать Uses Crt вместо import "fmt"!
Ничего удивительного — Go это паскаль с алголом68 (включая параллельность) в тылу с немного человеческим лицом в стиле C
Здравствуйте, chaotic-kotik, Вы писали:
CK>Может кто-нибудь объяснить, почему люди считают что Go подходит для concurrency и сервисов, хотя там нет нормального планировщика (любая горутина может неотдавать управление неограничено долго), общая память и глобальный GC, невозможно нормально остановить горутину, нет нормальной обработки ошибок? CK>Самое главное, есть же нормальная алтернатива — Erlang/Elixir + OTP.
1. Erlang VM не умеет статическую типизацию. На практике для задач, на которые целится Go, это даёт проигрыш до порядка по скорости.
2. Erlang имеет ряд тяжёлых специфических болезней. Например, неуправляемый входной поток данных — убийство VM. Это проблема VM в целом, Elixir это не вылечит. На практике против последствий этого строят сложные системы управления. Или куча процесса — если процесс толстый, можно не суметь её собрать — это к тому, что глобальный GC может быть даже лучше, чем на отдельный внутренний процесс.
Это не отменяет того, что Go крив как баба-яга после драки, но они тут друг друга стоят.
Здравствуйте, chaotic-kotik, Вы писали:
CK>Может кто-нибудь объяснить, почему люди считают что Go подходит для concurrency и сервисов, хотя там нет нормального планировщика (любая горутина может неотдавать управление неограничено долго), общая память и глобальный GC, невозможно нормально остановить горутину, нет нормальной обработки ошибок? CK>Самое главное, есть же нормальная алтернатива — Erlang/Elixir + OTP.
>любая горутина может неотдавать управление неограничено долго
Здравствуйте, netch80, Вы писали:
N>Это не отменяет того, что Go крив как баба-яга после драки, но они тут друг друга стоят.
Чем он крив? Я интересуюсь не ради спора, т.к. начал изучать язык буквально неделю назад. Пока все нравится -- каналы, горутины, select'ы (poll). Вроде неплохо для легко масштабируемых веб-сервисов. С указателями можно на прямую работать, т.е. сишники могут запрыгнуть.
Здравствуйте, netch80, Вы писали:
N>2. Erlang имеет ряд тяжёлых специфических болезней. Например, неуправляемый входной поток данных — убийство VM. N>На практике против последствий этого строят сложные системы управления.
это как "неуправляемый"?
и о каких системах речь?
N>Или куча процесса — если процесс толстый, можно не суметь её собрать — это к тому, что глобальный GC может быть даже лучше, чем на отдельный внутренний процесс.
а тут что помешает?
gc же на каждый шедулер, а не на процесс.
Здравствуйте, netch80, Вы писали:
N>1. Erlang VM не умеет статическую типизацию. На практике для задач, на которые целится Go, это даёт проигрыш до порядка по скорости.
Для критичных к производительности участков есть NIF-ы и порты.
Ну а для статических проверок есть dialyzer.
N>2. Erlang имеет ряд тяжёлых специфических болезней. Например, неуправляемый входной поток данных — убийство VM. Это проблема VM в целом, Elixir это не вылечит. На практике против последствий этого строят сложные системы управления. Или куча процесса — если процесс толстый, можно не суметь её собрать — это к тому, что глобальный GC может быть даже лучше, чем на отдельный внутренний процесс.
Здравствуйте, Sharov, Вы писали:
>>любая горутина может неотдавать управление неограничено долго
S>Откуда инфа?
Компилятор го вставляет вызовы runtime.Gosched перед некоторыми конструкциями, чтобы шедулер получал управление и мог прервать выполнение кода. В BEAM вытесняющая многозадачность, а в Go — кооперативная, со всеми вытекающими проблемами.
>>общая память
S>Вроде по уму, через каналы. Или это опять не то?
Здравствуйте, chaotic-kotik, Вы писали:
CK>Самое главное, есть же нормальная алтернатива — Erlang/Elixir + OTP.
Потому что Go — простая и понятная императивщина. А если ты хочешь почувствовать неудобство функциональщины, как его чувствуют другие люди — возьми LanguageExt. Вот уж дрянь из дряней.
Здравствуйте, Слава, Вы писали:
С>Потому что Go — простая и понятная императивщина. А если ты хочешь почувствовать неудобство функциональщины, как его чувствуют другие люди — возьми LanguageExt. Вот уж дрянь из дряней.
Ну это уже какие-то ваши детские травмы. Elixir это Lisp, только с нормальным синтаксисом + BEAM + OTP. Ну а .NET это всегда боль и унижение.
Здравствуйте, chaotic-kotik, Вы писали:
CK>любая горутина может неотдавать управление неограничено долго
В Go приложения на текущий момент монолитные — т.е. если горутина не отдает управление то это только потому, что это выбор разработчика.
А писать так, что одна рука не знает что делает другая — оно конечно можно но, зачем?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, chaotic-kotik, Вы писали:
CK>Ну это уже какие-то ваши детские травмы. Elixir это Lisp, только с нормальным синтаксисом + BEAM + OTP. Ну а .NET это всегда боль и унижение.
Здравствуйте, chaotic-kotik, Вы писали:
CK>Ну это уже какие-то ваши детские травмы. Elixir это Lisp, только с нормальным синтаксисом + BEAM + OTP. Ну а .NET это всегда боль и унижение.
Почему Lisp? Вроде автор писал, что вдохновлялся Ruby в основном...
Здравствуйте, chaotic-kotik, Вы писали:
CK>Может кто-нибудь объяснить, почему люди считают что Go подходит для concurrency и сервисов, хотя там нет нормального планировщика (любая горутина может неотдавать управление неограничено долго), общая память и глобальный GC, невозможно нормально остановить горутину, нет нормальной обработки ошибок?
Так гугл же форсит его, как только можно.
CK>Самое главное, есть же нормальная алтернатива — Erlang/Elixir + OTP.
go мне представляется скорее альтернативой джаве, только с еще более низкими требованиями к кодерам.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
CK>>Может кто-нибудь объяснить, почему люди считают что Go подходит для concurrency и сервисов, хотя там нет нормального планировщика (любая горутина может неотдавать управление неограничено долго), общая память и глобальный GC, невозможно нормально остановить горутину, нет нормальной обработки ошибок?
VTT>Так гугл же форсит его, как только можно.
Например? Языку шесть лет как минимум, особо про него ничего не слышно. Сообщество у него не очень больше. В самом то гугле на нем что написано?
CK>>Самое главное, есть же нормальная алтернатива — Erlang/Elixir + OTP.
VTT>go мне представляется скорее альтернативой джаве, только с еще более низкими требованиями к кодерам.
Куда уж ниже требования? Go явно не альтернатива жабе, скорее язык где мн-во многопоточных идиом изкаропки. Он больше конкурент erlang'у.
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, chaotic-kotik, Вы писали:
CK>>Может кто-нибудь объяснить, почему люди считают что Go подходит для concurrency и сервисов, хотя там нет нормального планировщика (любая горутина может неотдавать управление неограничено долго), общая память и глобальный GC, невозможно нормально остановить горутину, нет нормальной обработки ошибок? CK>>Самое главное, есть же нормальная алтернатива — Erlang/Elixir + OTP.
>>любая горутина может неотдавать управление неограничено долго
S>Откуда инфа?
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, netch80, Вы писали:
N>>Это не отменяет того, что Go крив как баба-яга после драки, но они тут друг друга стоят.
S>Чем он крив?
неплохой сборник особенностей. Как по мне, большинство в минус.
1 — Нет возможности указать, что строка продолжается (как финальная \ в Python), собственные правила для этого достаточно путаны.
2,3 — Хорошо до тех пор, пока не хочешь чего-то временно закомментировать, или если код генерится автоматом. Считаю, что не дело языка навязывать тут политику.
5 — тупой ляп дизайна.
7 — надо было хотя бы предупреждения делать.
10 — недоработка.
19 — не зря в Питоне отдельные байтовые строки.
Из того, что не упомянуто
* Экспорт по регистру — абсолютно тупая идея с неприятными последствиями в виде массовых замен при реэкспорте.
* На тупизну их модуля http не жалуется только ленивый. Остальная библиотека не сильно лучше, слишком много сделанного совсем на коленке.
* Стандартное "сегодня потребности в колбасе нет" на наследование, исключения и дженерики.
* Из того, что для моих целей крайне критично — нет приоритетов в select. Наоборот, явно прописан случайный выбор среди доступных — как по мне, это преступление. Случайный выбор должен быть дополнительным режимом, но не по умолчанию, и в идеале — в выделенной подгруппе случаев.
* Народ делает закат солнца вручную написанием своего ассемблера. Его качество резко хуже доступных аналогов вроде gcc и llvm.