Это копия, сохраненная 29 марта 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Для вката в Go читай Донован, Керниган "Язык программирования Go", https://www.golang-book.com/, книги из списка https://github.com/dariubs/GoBooks, а также смотрим видео https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw
Пэкеджи можно искать тут https://github.com/avelino/awesome-go
Живем в ожидании Go2, пробрасываем ошибки, смеемся над джавистами, которые не могут жить без ексепшенов, дженериков и размазанной бизнес-логики, ждем, когда нам подвезут аналоги эксепшенов и дженериков
Предыдущий: >>1482493 (OP)
> Живем в ожидании Go2
Ультрагоднота, если как на пике. И нахуй раст.
> не могут жить без ексепшенов
if err != nil
if err != nil
if err != nil
if err != nil
> дженериков
interface{}
> размазанной бизнес-логики
$ wc -l main.go
100500 main.go
опять не отбили запятые
>Ультрагоднота
Никакой годноты. Был минималистичный тупой язык, который могла взять любая обезьяна и хуяк-хуяк заклепать свою недотулзу или микросервис, а будет обычный говноязык коих миллион.
> if err != nil
Говноед.
> interface{}
Типобезопасность? Не, не слышал.
> $ wc -l main.go
> 100500 main.go
Not sure if trolling or just php-makaken.
GOндоны, есть ли смысл в голанде? Или можно ограничиться пхпштормом с го плагином?
Шизик плиз
Имеет. Можно
На сколько имеет смысл аплаиться на вакансии, где требуеться 1-2 года комерческого опыта на го, с учетом того что у меня его нет, но есть 2.5 года на бекенде на ноде? Проблема в том, что других вакансий, где готовы взять тело, которое понимает в предметной области, но для реализации прежде использовало другой ЯП, просто нет.
я чейтал на linux.org.ru, там был похожий вопрос, шо в принципе нет разницы, на собесе скажешь шо у тебя есь год работы
А прямо сказать - мол, не работал с го, но прочитал книгу и сделал пару проектов для себя и мне понравилось - это очень плохой вариант?
Сходи уже на собес, а
Покажешь проекты сразу заберут, если за код пояснишь
Собес тебе все покажет, если не возьмут, то ты будешь знать что тебе нужно изучить
> размазанной бизнес-логики
>$ wc -l main.go
>100500 main.go
Лол, когда узнал что го "победил" рекурсивные импорты (причем непонятно зачем, если у них нормальная GC), сразу пришла мысль, что либо они будут раздувать файлы, либо писать все в одну область видимости (папку), потому что это писос для статического языка.
>Живем в ожидании Go2
Го уже задизайнен ужасно, что-то добавить туда без боли и не получить очередной костыль, нереально.
Когда его писали, либо очень торопились, либо вообще не парились.
Не устаю удивляться что гугл так и не может в норм инструменты.
Самое забавное в го то, что он весь такой асинхронный и простой (казалось бы непочатый край для оптимизации), но в реле ели поспевает в тестах на жабе. Где должен просто рвать её в клочья. Я про те тесты, где сравнивают веб фреймворки, а не числа с массивами дрочат
> очередной костыль
Лучше уж костыль, потому что без костылей этим пользоваться очень больно. Даже сейчас используют костыли в виде кодогенерации, чтобы добавить генерики, аннотации, исключения и прочие "ненужные" фичи.
> гугл так и не может в норм инструменты
Не может, да. Хотя, вроде, гугл изначально создавал го исключительно для своих внутренних нужд.
> тесты, где сравнивают веб фреймворки
Потому что через жопу сделаны все эти фреймворки. Вообще, есть мнение, что они вовсе не нужны, потому что удел Go - микросервисные апишки.
>Лучше уж костыль, потому что без костылей этим пользоваться очень больно.
Зачем? Сейчас почти каждый язык может в асинк-авейт, который и не всегда прям нужен (на практике бэкенд со всеми плюшками ускоряется где-то только раза в два, выгодно только если отдаешь маленькие json'ы прям из памяти).
>кодогенерации
Жуть.
>Не может, да.
Неожиданно, другая корпорация добразла может в хорошие языки.
>удел Go - микросервисные апишки.
Еще один язык для супер узких задач, ну нехара свой мозг насиловать очередным узким языком, который еще как назло наделал много привычных вещей по своему.
Как по наименьшему сопротивлению, да, .Net Core
Удивительные истории рассказываешь, анон
На геймдеве простому смертному не заработать. Это всё равно что учить раст с целью найти работу.
Практически ни разу не понадобились рекурсивные импорты. Репозитории имеют ветвистую структуру, всё по DDD.
ЧЯДНТ?
Так и есть. Предлагается делать гигантские пакеты с одной областью видимости, либо выносить взаимозависимые определения в один пакет типа "common". А ещё здесь не считается плохим хранить глобальное состояние (функция init). В результате проекты даже среднего масштаба выглядят ну очень коряво.
Вообще, складывается впечатление, будто Go специально проектировали так, чтобы его идеи плохо вписывались в реальный мир, и чтобы он мог решать только очень узкий класс задач.
Если у тебя есть взаимосвязанные определения, то это значит, что они из одной области видимости
Так что все твои проблемы из-за неумения построить нормальную архитектуру приложения
А вот нихуя. От того, что иерархия определений не древообразная, в других языках не страдают. И только в го особый путь, из-за которого приходится бороться с языком. Потому что это ограничение надумано.
Ну так не используй Го. Иди в свое пхп, джаву, раст или откуда там ты пришел
Потому что все скрипты в одной папке. Для человека, любящего сортировать по папочкам, а не говно складировать - быстро словишь рекурсию (очень быстро, потому что статика)
То то инициализация сервера, роутинг и контроллеры должны лежать в одной папке, лол
В общем, мой совет - почитай про архитектуру приложений, к примеру Clean Architecture, и не говори глупостей
Додик, есть архитектуры с рекурсивным импортами. Классическая MVC архитектура, это как раз из таких (контекст инициализируется сервером и передается в контроллер, контроллер зависит от того что инициализирует сервер).
Ну и сервер дергает контроллер.
Тут предлагают нарезать архитектуру не вдоль (все контроллеры в одном каталоге, все модели в другом, конфигурация в третьем), а поперёк (в одном каталоге контроллеры/модели/etc, связанные с одной сущностью, в другом - с другой и т.д.).
А ещё тут ненавидят MVC.
Но ведь в твоем примере очевидно, что зависимость нерекурсивная, потому что контроллер не вызывает методы сервиса.
Оба подхода могут быть реализованы на го. Другой дело, что в го стараются разделять по доменам, поэтому второй способ приоритетнее.
Никак у тебя классическая MVC не получиться, режь ты там или не режь. Надо промежуточное говно натягивать (то есть через костыли).
В общем, это жопа когда язык тебя ограничивает, особенно когда становится ясно, что надо рефакторить все.
>А ещё тут ненавидят MVC.
Я вот за трендами не успеваю, на что там зумеры дрочат MVVC? Или MVVVVVC?
Суть MVC - чтобы ты в свои html'ки бизнес-логику не сувал
С MVC 10 лет назад носились как с серебряной пулей, но в реале суть была проста - отделить мух от котлет, что как бы профессиональные программисты делали и так, но маркетинг было уже не остановить.
Не удивительно, спустя какое-то время, на базе предыдущего опыта завезли какой-то новый базворд, чтобы протолкнуть очередную свою йобу. Старость тут не причем, это зрелость прекращай мысли биполярно, после юности идет зрелость
Есть собственный пример такого выхода?
Даже для дс-1 200к - это в лучшем случае очень сильный мидл, как минимум, да ещё и в довольно большом проекте.
С нуля даже за год плотного кодинга будет тяжело выйти на такой уровень.
Зп в го такие же, как и в той же джаве. Единственное - это куда меньшее кол-во вакансий для джунов по сравнению с джавой, например. Особо никому не нужны они тут. Поэтому именно для вката я бы точно не советовал го, но как второй-третий язык после вката - отлично.
Только сейчас понял, что ты троллишь, чел, вот я даун((
Приведи пример. Я вот не ловил ни разу или почти ни разу. Рекурсия в связях между компонентами - это обычно признак логической ошибки в архитектуре системы.
В мире го антипатерн - заморачиваться по поводу антипатернов
А как иначе свое говно инитить, не прокидывая его до main (не нарушая абстракции)? Лениво через sync.Once что-ли хуярить?
Прокидывая его до main и используя интерфейсы
Суть в том, что вкат в го стремительно быстрый по сравнению с многими языками.
А в чем проблема дизайна, когда один пакет содержит интерфейс, и связанную с ним логику, в то время как имплементации интерфейса вынесли в кучу других пакетов, которые ничего не экспортят, но регестрируют свой вариант имплементации через init? sql, image, и, вроде, compress поступают именно так.
А что делать, если понадобятся сразу две имплементации? По микросервису на каждую?
В мире языков, го - антипатерн.
Я бумер-вкатывальщих из своей профессии (erp) в программирование.
В прошлых тредах, да и вообще в /pr встречал, что GO вроде хорошо, но не для вката. работы мало и прочее. Однако, судя по обзорам, на нем чуть ли не самые высокие зп (понимаю, что это не из-за рашки). Так вот, стоит ли все же изучать, как первый ЯП?
Проблемес в том, что по текущей работе могу перебраться в гейропку, а после искать работы на ЯП там, либо оставаться в рашке и менять на ЯП тут.
В общем, благодарю.
Про GO вообще говорил бывший коллега, который его вохсвалял, хотя сам до знакомства с ним пару тройку лет пилил на джаве и питоне
Вкатываешься во что-то более лайтовое с неплохой зарплатой(js, php). 1-2 года работаешь и потом перекатываешься куда хотел вначале.
Приму к сведению, спасибо
При создании инстанса, который имплементит интерфейс, нужную реализацию выбирают при помощи параметра-стринга в конструкторе. Как пример - https://golang.org/pkg/database/sql/#Open
Не нужно так делать!
Просто делайте две разные функции-конструктора.
CreateMysqlDatabase и CreatePostgresDatabase, их потом и юзайте.
Магические стринги, константы и всё такое здесь излишне.
var x type
{
x = a()
x = b(x)
}
Не особенно, просто способ сделать чуть более симпатично, если у тебя код вида `foo := A(B(C(D(E(F()))))`
В данном случае, наверное, излишне, но я часто вижу блоки кода в фигурных скобках в случае больших функций/методов, где объявляют несколько временных переменных, а затем результат присваивают переменной с облостью видемости на уровне всего метода.
динамические структуры.
Логгер, например. Хотя некоторые упоротые предлагают плодить сервисы на ровном месте: авторизация отдельно, таблица1 отдельно, таблица2 отдельно, бизнес-логика отдельно.
Твой вопрос звучит как:
"Можно пример типикал продукта, для нарезания которого подходит нож?"
О, ты из тек, кто берёт языки под задачи? Это хорошо, но что новичку-то делать, который ещё не знает, для чего какие языки предназначены?
Ты не понял посыла. Язык подходит под множество задач и выделить одну "типикал" нельзя.
>Го заявляется как простой для изучения
Да не бывает простых языков.
Я вчера на питоне скрипт писал, синтаксис частично помню, но постоянно нырял на stackoverflow. В итоге простая задача на простом языке превратилась в часовую рутину (потому что свои нюансы, свои библиотеки и все это окружение знать надо в любом языке и это не бесплатные знания).
В хотя бы был Object, когда не было генериков. Здесь же приходится обмазываться interface{} и рефлексией.
Вот видите, в 2004 году на жабе говнокодили обжектами, значит и в 2020 нам эти ваши дженерики не нужны сосите кодогенирацию
Но ведь получается и без дженериков нормально
Почему вас так бомбит от го языка? Го-разрабы отбирают вашу работу? Вас убрали с проекта, потому что проект перешел на го, а вы не смогли выучить? Вы завидуете, что го развивается и набирает популярность?
В чем смысл бомбить от того, чем ты не пользуешься?
Без генериков терпимо, но не "нормально",
"Мы" не бомбим, а недоумеваем, почему этим кто-то пользуется при очевидных изъянах, и пытаемся понять, почему эти изъяны не спешат исправить.
Потому что это не "очевидные" изъяны. Языком вполне удобно пользоваться.
Ты из той категории людей, что в чужие огороды лезут?
Вот заебали с этим "без дженериков"
Дженерики в голанге есть: мапы, массивы, слайсы, мессаджи - все дженерик.
В голанге нет возможности определять новые дженерики
И да, это достает, но эта не проблемы типа как в древнеджаве.
В свою очередь заебали с этим "голанг сам использует генерики, а нам не даёт". Нет в голанге генериков ни в каком виде. Или по вашему возможность объявить массив любого типа или возможность создать структуру с произвольного типа полями - это тоже генерик? Ну тогда такие "генерики" есть и в сишке, блеать.
До всех языков доебались. Гошка же особенна тем, что повторяет ошибку старых языков, которую в 2020 можно было бы и учесть.
Например где? Если речь о динамико-параше, то там по умолчанию все дженерик, потому что типы становятся известны только в рантайме.
> Нет в голанге генериков ни в каком виде.
Смотри:
m = make(map[string]Vertex)
Видишь тут `make` ?
Он дженерик.
Это не хорошо, не плохо, а просто дженерик.
Я фуллстэк веб макака (питон + жс). Всегда хотел кодить только бэк. Вот у меня встал вопрос. Сразу учить пщ, или сначала всё-таки паттерны+алгоритмы ебануть, а уже после начать язык изучать?
Учишь такой паттерны и алгоритмы.
@
Умеешь дерево переворачивать одной рукой
@
Фибоначчи уже пишет код сам за тебя на собесах.
@
И теперь ты готов вкатиться в тяп-ляп го!
Помню когда-то умные люди говорили, что обобщенное программирование (дженерики ваши) не является частью статически типизированных языков (что кстати правда). но го - говно.
Конечно не являются. Иначе из этого следует, что сишка - динамически типизированный язык.
Если ты зайдешь в другие треды, то там даже хейтеров нет, одни вкатывальщики, так что тут хоть какое-то разнообразие
Не везде вкатывальщики.
Ну бля, из того, что (предположим) обобщенное программирование есть только в статически типизированных языках, никак не следует то, что Си -- не статически типизированный язык.
Да.
И да, посмотрев, насколько много дичи творят говнокодеры, когда им даёшь обобщённое программирование, я начинаю понимать, что его отсутствие в гошечке - не такая уж и плохая идея.
Не совсем в тему, но недавно я читал на хабре статью про rx и наткнулся на следующее:
> А это значит, что, разобравшись с асинхронными вещами, мы можем начать использовать RxJS для обработки абсолютно синхронных данных, например, пометить жирным все внешние ссылки:
> Rx.Observable.from(document.querySelectorAll('a'))
.where(el => el.getAttribute('href').indexOf('http') === 0)
.subscribe(el => el.style.fontWeight = 'bold')
Представляете, они создают потоки данных и обрабатывают их не из необходимости, а просто потому, что хочется применить их сраный rx ещё где-нибудь!!1 При том, что достаточно одной строчки ванильного вызова селекторов! То-то лендосы уже тормозят и жрут, как ААА-игры.
>>568116
Потому, что во-первых, init-ы это зло. Они действуют на уровне подключения пакета, то есть однократно, неизвестно когда, неявно и неповторяемо.
Во-вторых, нет ничего более явного, понятно и тестируемого, чем простой, без магии, вызов функции `mypackage.Foo()`.
В-третьих, передавать строку можно, но это означает, что ты усложняешь процесс создания объекта. Потом у тебя появятся какие-нибудь Options, которые нужно передавать после строки, потом нужно будет сравнивать, какие options с какими строками можно передавать, а какие-нет. Потом ты вдруг начнёшь отлавливать в рантайме баги типа person.Create('male', femaleOptionA, femaleOptionB). Намного проще описать CreateMale(MaleOptionA, MaleOptionB), CreateFemale(FemaleOptionA, FemaleOptionB) и тем самым получить статическую гарантию валидности кода на уровне компиляции.
Я не говорю, что сложные фабрики делать плохо, я говорю о том, что сложные фабрики делать нужно тогда, когда без них не обойтись. Если у тебя <5 типов сходных объектов с +- различными алгоритмами их порождения, то проще вынести их по разным конструкторам, потом по необходимости сведешь в фабрику, когда это будет НЕОБХОДИМО.
И да, посмотрев, насколько много дичи творят говнокодеры, когда им даёшь обобщённое программирование, я начинаю понимать, что его отсутствие в гошечке - не такая уж и плохая идея.
Не совсем в тему, но недавно я читал на хабре статью про rx и наткнулся на следующее:
> А это значит, что, разобравшись с асинхронными вещами, мы можем начать использовать RxJS для обработки абсолютно синхронных данных, например, пометить жирным все внешние ссылки:
> Rx.Observable.from(document.querySelectorAll('a'))
.where(el => el.getAttribute('href').indexOf('http') === 0)
.subscribe(el => el.style.fontWeight = 'bold')
Представляете, они создают потоки данных и обрабатывают их не из необходимости, а просто потому, что хочется применить их сраный rx ещё где-нибудь!!1 При том, что достаточно одной строчки ванильного вызова селекторов! То-то лендосы уже тормозят и жрут, как ААА-игры.
>>568116
Потому, что во-первых, init-ы это зло. Они действуют на уровне подключения пакета, то есть однократно, неизвестно когда, неявно и неповторяемо.
Во-вторых, нет ничего более явного, понятно и тестируемого, чем простой, без магии, вызов функции `mypackage.Foo()`.
В-третьих, передавать строку можно, но это означает, что ты усложняешь процесс создания объекта. Потом у тебя появятся какие-нибудь Options, которые нужно передавать после строки, потом нужно будет сравнивать, какие options с какими строками можно передавать, а какие-нет. Потом ты вдруг начнёшь отлавливать в рантайме баги типа person.Create('male', femaleOptionA, femaleOptionB). Намного проще описать CreateMale(MaleOptionA, MaleOptionB), CreateFemale(FemaleOptionA, FemaleOptionB) и тем самым получить статическую гарантию валидности кода на уровне компиляции.
Я не говорю, что сложные фабрики делать плохо, я говорю о том, что сложные фабрики делать нужно тогда, когда без них не обойтись. Если у тебя <5 типов сходных объектов с +- различными алгоритмами их порождения, то проще вынести их по разным конструкторам, потом по необходимости сведешь в фабрику, когда это будет НЕОБХОДИМО.
> Потому, что во-первых, init-ы это зло. Они действуют на уровне подключения пакета,
init-ы не добро и не зло
они просто действуют на уровне подключения пакета
> $ /usr/local/go/src % grep -r 'func init()*' /usr/local/go/src |wc -l
> 306
Что-то имеешь против - пиши разрабам голанга, что они дибилы
Ну если ты сейчас будешь настолько придираться к словам, то я скажу, что да, бывают случаи, когда init'ы подходят для удобного решения какой-то залачу, но их очень часто используют для чего-нибудь навроде конфигурирования консольного приложения и даже хуже, что является скорее плохой практикой. Поэтому init'ы это очень специфическая штука, которая чаще используется вовред системе и лучше стараться её избегать.
А авторы го не всегда являются 100% авторитетами, апеллировать к тому, что оно используется в стандартной библиотеке и поэтому "оно" есть хорошо и правильно - глупо. В стандартной библиотеке и баги бывают, знаешь ли - и что, нам теперь всем их повторять или перестать тестировать свой код?
> А авторы го не всегда являются 100% авторитетами, апеллировать к тому, что оно используется в стандартной библиотеке и поэтому "оно" есть хорошо
А ты какой иной критерий "хорошо" предлагаешь?
Почитать высеры на medium?
Стандартные либы - единственный критерий в голанге определения что хорошо, а что плохо
Без фанатизма канешн
Ну всё, буду теперь везде interface {} юзать, раз стандартная либа - показатель.
Если тебе нужен sync, reflect, кодеры-декодеры, копаться в асте, да банальный fmt - ты никуда не уйдешь от interface{}
Ну да, генериков-то нет.
Ну вот например:
1/ жаба сложнее
2/ на жабу больше вакансий
Есть у кого кейсы смены стека в таком виде ?
Или придется с самого начала подниматься ?
как из пыхера перекатиться в го без потери в зп? Синиор коллинг
Учишь го до приемлемого уровня, потом на работке говоришь "Пыха говно, давайте новый проект на го писать, он модный, молодежный" Если получится протолкнуть проект - вот ты и гофер
Если ты опытный, то берешь какую-нибудь стандартную бэкенд задачу из пхп и пилишь ее аналог на го, ну и гуглишь бест практис
Единственный адекватный критерий "хорошо" - это "подумать". Ошибки, плохие решения, опечатки, баги, уязвимости и тд бывают везде и у всех, поэтому никакой код по умолчанию не считается абсолютно правильным, даже если он успешно отработал и отправил Армстронга в космос, к примеру.
Взять те же init'ы. Скорее всего в стандартной библиотеке они используются для предварительных расчётов, инициализации каких-нибудь глобальных служебных неизменяемых структур типа мапы keywords в token'е. И это вполне нормально, потому что заранее генерируется служебная фигня, чтобы не генерировать её потом, во время работы. хотя можно было бы поспорить на тему "предварительный расчёт vs ленивый расчёт", ну да ладно
А вот если взять базы данных, то там авторы го спроектировали всё так что ты должен сделать sql.Register("mysql", &MySQLDriver{}), а потом во время Connect("mysql", dbConnString) произойдёт магия сравнения по ключу, если ты успел подключить этот пакет. В чём здесь боль? А в том, что они требуют неявно подключать пакеты, в итоге у меня нет никакой гарантии, что Connect не вызовется когда-то раньше, к примеру. Я также не узнаю о том, что я забыл неявно подключить пакет my-sql-driver, пока не получу в ошибку в сраном рантайме. Причём, что забавно, интерфейс driver.Driver у них уже есть. Поэтому я считаю, что с их точки зрения было бы правильнее просить передать в Сonnect сразу драйвер, тогда вызов был бы явным и статически проверяемым: sql.Connect(mysql.CreateDriver())
А если бы операция создания драйвера оказалась тяжелой, я бы и сам догадался уже самостоятельно написать init и вызвать CreateDriver там.
И к сожалению, когда простые разработчики используют init, чаще они лепят что-то вроде второго случая, когда он не нужен и скорее вреден, чем полезен.
Сюрприз, это то, что от тебя требуется на работе. Совсем айтишники зажрались уже, душу им вкладывать надо, творчество проявлять.
Делай нормальное качество, в нормальные сроки и так, чтобы это было легко поддерживать после того, как ты умрешь уйдешь. Всё.
мимо
>просто хочешь покончить с этой задачей в разумные сроки
Бойлерплейта больше чем в ваших джавах, половина либ чистейшие недо-велосипеды (за то реально туча звезд).
В итоге часть вторичного софта приходится писать самим (умножая безумие недо-велосипедов)
Что питонщик делал за день, гофер дрочит неделю-месяц.
Да, побыстрее закончить.
https://www.youtube.com/watch?v=wtsLoRnNq-Y
Про недо-велосипеды - ложь, пиздёж и провокация.
И да, если ты сравниваешь питон с го, то почему бы не сравнить его с ассемблером? Или понятие "разные инструменты для разных задач" для тебя слишком сложное?
Питон нужен для CIных скриптов, ML или опционального говнокода.
Джава нужна чтобы корпоратить бизнес-логику.
Гошечка нужна чтобы писать какие-то конкретные места, высокопроизводительные сервисы, потому что она была, есть и будет производительнее, но при этом не настолько сложная, чем кресты или раст.
А если ты хочешь писать всё на одном языке, то ты или пишешь что-то простое, или долбоёб.
Предупреждая будущие срачи про производительность - джава не поддерживает толком настолько эффективную многозадачность (грин треды ещё не подвезли, планировщик и сборщик там работают на других принципах) и жрёт намного больше памяти.
> Гошечка нужна чтобы писать какие-то конкретные места, высокопроизводительные сервисы, потому что она была, есть и будет производительнее, но при этом не настолько сложная, чем кресты или раст.
Гошечка нужна чтобы писать какие-то конкретные узкие места, высоконагруженные сервисы, потому что она была, есть и будет производительнее, но при этом не настолько сложная, чем кресты или раст.
Самофикс
Анончик, завязывай привязываться к словам.
Мне нравится называть го гошечкой, с++ крестами, джаву джавой, php пыхой, js говном, а ts типизированным говном.
Если тебе не нравится, то можешь пройти нахуй не читать.
Я просто беспокоюсь о тебе
>высокопроизводительные сервисы
Медленнее (местами на ровне) с жабой. "В - высокая производительность".
Я уже видел барана который переписал с пхп на го свой пет-проект, но после замеров оказалось что 90% (до го и после) времени занимает база.
Откуда вы такие высокопроизводительные лезете? Ну ок, хочется минимальной абстракции, но не язык же с ГЦ брать? Накати ты там плюсы или раст.
>Питон нужен
Использую его везде где он суется. Были пару узких мест в проекте, переписал модуль на си (за это питон и люблю).
Я больше чем уверен что больше половины пишут тут CRUD-проекты - какую там производительность вы ищите? хотя не важно, судя по отсутствие компетентности, ответ будет такой же
> Откуда вы такие высокопроизводительные лезете?
Известно откуда. Цикл от 0 до ста тыщ мильёнов выполняется в N раз быстрее, вот и делаются выводы.
Перспективнее сейчас только жабаскрипт
>С каких пор жява производительнее го?
Например - всегда
https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=query&l=zijo8v-f
я даже не выкинул низкокачественные микрофреймворки такие как fasthttp, но они все равно сосут асинхронно жабе, почти в два раза
Лучше не стоит, мало вакансий для джунов и нет фреймворков, облегчающих жизнь. Го обычно берут вторым языком к какому-нибудь мейнстриму типа пхп/джава/etc
>>573639
>>573635
Для формошлёпства действительно подойдёт что угодно. А если ты, к примеру, делаешь чат, то тебе нужно держать непрерывные соединения по 10/100к на инстанс и эффективно их обрабатывать. Удачи сделать это на ваше пыхе или питоне, лол.
На джаве можно, но скорость будет такая же или медленнее (зависит от реализации), а потребление ресурсов будет 100% больше.
>>573933
Ты видимо не понимаешь.
Джава всегда будет жрать больше памяти, потому что jvm.
Джава и го будут всегда +- с одинаковой скоростью обрабатывать что-то в последовательное типа циклов и рекурсии, потому что го компилируемый, а у джавы сработает JIT. Будут тонкости типа оптимизации кода компилятором (оптимизации хвостовых рекурсий, к примеру) и оптимальности компиляции JIT'ом под конкретную машину.
Го будут эффективнее джавы на особо многопоточных алгоритмах, пока в джаве не появится поддежка грин тредов (а после этого надо будет смотреть реализации планировщика).
Эти все выводы можно сделать основываясь на дизайне языков. Да, где-то будут удачнее реализации сервера, драйверов, компилятора, планировщика, сборщика и они будут выигрывать какие-то микросекунды. Но в целом ситуация была и будет такая.
Конкретно этот бенчмарк какой-то пиздец сомнительный.
Почему-то в го они не прогрели гц перед стартом.
Почему-то они не используют то, в чём го силён (многопоточность), выполняя 500 ПОСЛЕДОВАТЕЛЬНЫХ никак не связанных запросов в базу, хотя напиши они `go` перед вызовом fetchRandomWorld ситуация резко стала бы иной.
И так далее.
Всё как обычно, какие-то пидорасы решили, что будут сравнивать языки и решат, наконец, что круче, но при этом знают из всех языков, очевидно, только джаву. Ну ок, чё. Очередной говнобенчмарк, который не даёт выводов кроме КГ/АМ.
>Джава всегда будет жрать больше памяти, потому что jvm.
Это ты не понимаешь (послушай дядьку).
Джава разменивает ресурс недорогой памяти, на ресурс дорого процессора.
Это основная фишка, даже классы в памяти выравниваются по кратности слова.
Еще в жабе используется вид спекулятивной jit-компиляции, которая недостижима при обычной компиляции (нужен сбор данных во время работы).
Так же надо учесть, сколько бабла было влито в jvm и jit.
У команды го не хватит ни ресурсов ни времени (и может даже ума), чтобы даже из простого го (при создание которого вообще не парились), сделать что-то, что догоняло бы джаву.
Забавное даже было то, что после релиза даже раст в дробилках был чуть быстрее жабы (потом, конечно, они пофиксили, или подогнали, лол).
Все эти тесты показывают важные вещи, что для бэкенд разработки, по сути не надо даже натягиают плюсы или раст или го, простая джава идет на ровне.
Но ни жаба ни го тут половине разработчиков и не нужен
>Почему-то в го они не прогрели гц перед стартом.
Лол, или я что-то пропустил из мира го или ты тот еще фантазер.
Расскажи, зачем греть ГЦ?
>Почему-то они не используют то, в чём го силён (многопоточность)
Хотя с тобой все ясно, надо было сначала пост прочитать.
Го запускает гц, когда превышается лимит по памяти. К примеру, го занял 100 мб, они запустили чистку, выставили лимит в 200 мб. Дошло до 200 -> запустили гц, выставили лимит до 400. И так далее.
С этим работают двумя способами, первый - настраивается множитель для лимита, второй - после старта приложения инициализируют и очищают что-то большое, чтобы лимит сразу был побольше.
>>574010
> Но ни жаба ни го тут половине разработчиков и не нужен
Это правда
> Еще в жабе используется вид спекулятивной jit-компиляции
Всё так, именно поэтому я написал, что
> Джава и го будут всегда +- с одинаковой скоростью
и специально сказал про jit. jit может помочь, а может и не особо. Гошный компилятор может что-то оптимизировать, а может нет. Но это тонкости, в итоге всё равно и там, и там, выполняется скомпилированный код, поэтому работать они будут +- одниково, без отличий на порядки.
> У команды го не хватит ни ресурсов ни времени (и может даже ума), чтобы даже из простого го (при создание которого вообще не парились), сделать что-то, что догоняло бы джаву.
Это сомнительное утверждение, будь так, никогда бы не появился C (все писали бы в машинных кодах), smalltalk, java и так далее.
А так как ты опускаешься до того, чтобы утверждать, что команде пиздец каких умных, образованных и так далее чуваков из гугла, с научными степенями в IT и многолетним опытом работы на пиздец каких сложных задачах (включая java) не хватает ума, то разговор с тобой можно прекращать и больше никогда не заводить, тут явно манямирок и самооценка, размером с Москва-сити.
https://blog.twitch.tv/en/2019/04/10/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap-26c2462549a2/
Сделаешь на жяве чат-сервис с нагрузкой уровня твитча и задержкой GC в <1ms? Удачи. Сколько Раджешей понадобится?
>Забавное даже было то, что после релиза даже раст в дробилках был чуть быстрее жабы (потом, конечно, они пофиксили, или подогнали, лол).
Что, простите? Раст и должен в дробилках быть быстрее почти чего угодно.
>Го запускает гц, когда превышается лимит по памяти...
Это не прогрев, это особенность работы ГЦ, джава тоже делает много работы (и тоже увеличивает память) в том числе поколения копирует и заодно дефрагментирует, но мы же не будем это ждать?
Прогревание в жабе это реальный технически достижимый процесс в 10К итераций (и речь про код, а не данные). Работа ГЦ непонятная когда достижима и можно всегда кудахтать что плохо погрели, надо было 3 часа ГЦ погонять.
В общем, это чистой воды подражание терминологии жабы (если уж и доставать линейки, у жабы там сложнее ГЦ и тем более нет value type).
>поэтому работать они будут +- одниково
Не факт, го полностью асинхронный, он должен утилизировать ресурсы максимально. В том числе у него сразу асинхронная работа с бд. Но что мы видим? Даже с синхронным бд (но асинхронной io) жаба работает лучше, почти в два раза. Просто потому, что драйвер к бд качественные (как, кстати, качественный у пхп, как бы там смешно не было, просто удачные сишные обертки).
По всем параметрам го должен рвать жабу, в го нет виртуальных методов, нет исключений и прочей абстракции. Просто у жабы качественная VM (и jit).
Как собственно успешно вкладывались и пилили до блеска V8.
Чувак, что ты несешь??
Какой нахуй jit? И с чего ты решил, что jit - это всегда хорошо??
Какое нахуй подражание джаве?
Кому оно нахуй нужно?
> Даже с синхронным бд (но асинхронной io) жаба работает лучше, почти в два раза.
Чего лучше?? В два раза? Может в три?
У жабы есть реалтайм гц с гарантированным времени отклика, для какой-то йоба-экзотики, но ты школота с твичей о таком и не слышал.
Ну и уже давно завезли обычные гц с минимальными паузами (не вспомню сейчас это ебанутое название).
Запомни простое правило, что все эти микропаузы они не даются даром, не зря у жабистов тонна рычагов, которые они могут подвигать чтобы достичь наилучшего результата между паузами и производительностью (я в свое время память для пет-проекта докупал, чтобы ГЦ реже срабатывал, т.е. чтобы больше процессорного времени уходило на сервис и чистый кэш)
У гоферов вообще нет никакой возможности, что-то там подкрутить, подвигать нормально. Кушай что завещал Роб Пайк (а будешь возмущаться, тебе статью напишут, мол это не язык плохой, это ты не так думаешь)
>Сделаешь чат-сервис
>задержкой GC в <1ms?
Я бы тебя только за одну мысль написать чат с тиком меньше 1мс уволил бы.
Если сложно и непонятно, воспользуйся гуглом
> Это не прогрев, это особенность работы ГЦ
Тем не менее, заранее инициализировать память, например, в кеше на программерском жаргоне издревле называется прогревом, жава тут не при чём.
> Не факт, го полностью асинхронный, он должен утилизировать ресурсы максимально.
Невозможно утилизировать абсолютно синхронный код, именно поэтому я написал, что
> Почему-то они не используют то, в чём го силён (многопоточность), выполняя 500 ПОСЛЕДОВАТЕЛЬНЫХ никак не связанных запросов в базу, хотя напиши они `go` перед вызовом fetchRandomWorld ситуация резко стала бы иной.
В синхронном режиме го и джава будут соревноваться в удачности компиляции и оптимизации библиотек, всё так, я об этом написал ещё здесь
>>573959
и разница здесь не особо велика
> работать они будут +- одниково, без отличий на порядки
Я уже устал повторять одни и те же аргументы, давай что-нибудь новое обсудим.
>>574067
> У гоферов вообще нет никакой возможности, что-то там подкрутить, подвигать нормально. Кушай что завещал Роб Пайк (а будешь возмущаться, тебе статью напишут, мол это не язык плохой, это ты не так думаешь)
Это так, и сделано осознанно, чтобы не сделать хуже. Есть вполне объективные доводы, почему авторы го решили никаких рукояток юзерам не давать.
И да, не то, чтобы это было очень плохо, потому что gc в го и так пиздец быстрый, лимиты настраивать можно, работать через unsafe без гц работать можно, памяти требуется на порядки меньше за счёт более простого рантайма (нету такой тяжелой VM) и так далее.
Вечный баланс между автоматизацией и контролем. Ручной управление памятью vs сборщик мусора, ручное управление потоком выполнения vs планировщик и всё такое, аргументы обеих сторон почти не меняются от срача к срачу.
Никто не ставил задачу написать очередного интырпрайз ублюдка.
> У гоферов вообще нет никакой возможности, что-то там подкрутить, подвигать нормально. Кушай что завещал Роб Пайк (а будешь возмущаться, тебе статью напишут, мол это не язык плохой, это ты не так думаешь)
Сверхразум, ты? Статья как раз о том, как они подкрутили гц под себя.
> Я бы тебя только за одну мысль написать чат с тиком меньше 1мс уволил бы.
Что несёшь? Я про stop-the-world паузы. Жява-токсики не умеют читать?
Потому что многие тут не выбирают инструменты под задачи, а натягивают задачи на один конкретный язык и искренне удивляются, почему на остальных кто-то до сих пор пишет. Кто-то вон предлагает писать веб на сишке, и даже не хайлоад.
Вообще-то зависит от того, что тебя именно интересует. На Go мало вакансий, его в основном слишком уверенные в себе конторы используют. Вкатываться стоит только если ты уже знаком с каким-нибудь яп.
То есть микросервисы на го не пишут, в отличие от джавы? Ясно.
Выход за пределы сегмента. Выход за пределы массива (за пределы сегмента не вышел, но данные всё равно похерил). Куча тонких случаев с UB, которые влекут вообще что угодно. Таких случаев много, даже банальный плюс при signed integer overflow влечёт это. В общем, хватает проблем, которые даже в плюсах не решили полностью.
>Что несёшь? Я про stop-the-world паузы. Жява-токсики не умеют читать?
Был бы настоящим программистом, знал бы что даже тик в 500мс для чата это уже много.
Они хвастаются гц в чате, потому что, видимо, реальное высоконагруженгое на го побоялись написать.
Это очередное событие, когда отделу программистов разрешили поиграться с языком, а не реальные исследование и последующее решение.
Блядь, что ты несёшь, клоун? Я в курсе что 500 мс это много. И я тебе пишу, что у твитча 1мс (ОДНА МИЛЛИСЕКУНДА). 1 мс это меньше 500 мс, ты это понимаешь? Они как раз написали высоконагруженное приложение с исследованием и последующим решением. Я не понимаю, это троллинг тупостью?
Почему некомпетентные люди так любят первыми включать токсиков на пустом месте? Я просто кинул статью твитча, меня назвали школьником ни за что, а ещё и начали серить под себя после этого.
>Сделаешь на жяве чат-сервис с нагрузкой уровня твитча и задержкой GC в <1ms? Удачи. Сколько Раджешей понадобится?
На жяве, напомню, сделана одна известнейшая раковая реалтаймовая игра для школоты с огромным самогенерируемым разрушаемым миром.
Которая прекрасно летает при херовейшем коде и однопокпоке.
> Сделаешь на жяве чат-сервис с нагрузкой уровня твитча и задержкой GC в <1ms? Удачи. Сколько Раджешей понадобится?
> в <1ms
> Которая прекрасно летает при херовейшем коде
> Minecraft's game loop normally runs at a fixed rate of 20 ticks per second, so one tick happens every 0.05 seconds. An in-game day lasts exactly 24000 ticks, or 20 minutes.
> However, if the computer is unable to keep up with this speed, there are fewer game ticks per unit time. As the vast majority of actions are timed based on tick count rather than on wall clock time, this means that many things take longer on a slower computer.
> One thing that does not happen as part of a tick is drawing graphics. Rendering happens after updating. This is why a varying frame rate does not affect the tick rate, which prevents video performance from affecting game mechanics.
https://www.youtube.com/watch?v=Aj2CvNIVqpI
А я не про майнкрафт говорил.
https://github.com/icexin/gocraft
Алсо, в добавок развлекуха на покодить дома, прикрутить к вот этой хуитке шагающие кубачи и SVO.
>Вот и сравним майнсруфт на го с майнсруфтом на жабе
Огрызок низкого качества, где даже деревья сливаются в "не-разбери-пойми-что". Как можно сравнить поделку вида "поигрался в opengl и ушел делать уроки" с полноценной игрой со 100500 элементами игрового процесса?
Хотя холивар бессмысленен (что го говно что жаба, в сравнение с шарпом и юнити).
Особенно забавно это смотрится с шейдерами
Block Story.
Там вообще смешная история вышла, ваыложить сорс в общедоступный паблик по лицензии ЕУЛА, что бы потом подгореть что все пиздят, собирают свои клиенты да еще и пулревесты издевательски шлют.
Пробовал кто это GUI? Заявлена поддержка android.
Там никто не подгорал, просто у них куча сторонних анальных поделок с NDA используется и, кажется, после перехода на 64бит онли анальные лицензии им запретили полногстью выкладывать код, по причине линковки и применения анальных поделок.
Ты написал игру и увидел что тормозит или тебя ойтишники на ютубе сказали?
У питона там половина либ в сишечку завернуто. Тебе уже сказали - только юнити, только .net core
Я глубоко изучал эту тему, но сам не пробовал, конечно. Просто не хочется получить готовый продукт, понять что это - тормозное говно напоминаю, игра - ммо и переписывать его под другой язык. А про юнити - игра то текстовая, аля MUD
Пиздец как. А самое главное, что времени и капец каких дорогих человеческих ресурсов на это уходит порядочно.
Очень трудно и болезненно. Если в какой-нибудь жабке в случае ошибки максимум вылетит исключение с подробным стектрейсом, и ошибку находишь сразу, то на сишке у тебя тупо внезапно завершится программа, а среда плюнет в консоли лаконичное "Ошибка сегментирования", и всё. И приходится обмазываться дебаггером, логами, дизассемблером и линтером.
Всё плохо только в сишке. Исключения (или их сабжевый аналог error) хотя бы можно перехватить и обработать. А вот с сегфолтом ничего не сделать.
А у окамла, видимо, своих проблем хватает. Например, отсутствие инструментов и большого коммунити.
Есть что сказать - говори.
Потому что всё предусмотреть невозможно и вся разница в том, что С - это ещё более небезопасное говно чем та же джава
>Потому что всё предусмотреть невозможно
С исключениями тоже самое. Все предусмотреть нельзя банально из-за того, что люди, в большинстве своем, плохие программисты. Нам нужны безопасные языки, в которых тайпчекер будет ебать за любую хуйню (это не поможет от логических ошибок, но мы ведь не про это спорим).
Так бы оно так, но проблема в том, что за безопасность приходится платить, так или иначе. Или накладными расходами (сборщик мусора) или временем и сложностью языка (rust), или ещё чем-нибудь.
Всегда важен баланс.
>акладными расходами (сборщик мусора)
А в джаве, го, с# его нет? Реальных отраслей, где каждый байт памяти на счету, не так уж и много.
> Всегда важен баланс.
Есть Dlang. Он с gc, но его можно отключить. Для безопасности есть SafeD: https://dlang.org/articles/safed.html
Ну, хз. Говорят, что проще C++ и подавно проще rust. Может, чуть сложнее go, я не видел сравнений сложности между ними. А ты в чём видишь его сложность?
Интересный способ написать .forEach
В ММО ты просто не можешь без классов и наследования. Один геморой будет.
>Я глубоко изучал эту тему
Ну опять же, ты не тестировал и не собирал какие-то сборки не сравнивал, а тупо шарился по форумам и читал мнение ваннаби программистов, которые говорили - "даааа питон тормозноооой".
Динамические и интерпретируемые языки действительно в простых тестах будут медленно в плане сравнения. Но в плане человеческого восприятия это все равно быстро.
Еще как пример на какой-то юнити есть возможность писать на питоне и дергать скриптами api юнити. Вроде бы казалось тормознутые скрипты и в сердце проекта.
Но на самом деле это нормальная практика, когда тяжелыми вещами (например отрисовкой графики и прочими числодробилками) занимается какой-нибудь нативный компилируемый код, а бизнес логика пишется на простом языке
кстати, на го нельзя писать число дробилки. На самом деле можно, но ручками придется вызывать диспетчер, иначе половину горутин угробишь. Это проблема асинхронных решений
В любом случае ты сможешь профилировать проект и какие-то узкие модули переписывать на си или скорее юзать pypy.
Тем более у тебя нет графики. Работать с текстом я бы кроме питона вообще бы не стал ни с чем
D хорош, но за ним не стоят гиганты и гиганты его не двигают.
Проще не насиловать себе свой мозг и сразу на С++ сеть.
Идеальная связка Си + Питон (на сях пишешь реально тяжелое говно, на питончике логику и всякие CRUD-вещи)
> D хорош, но за ним не стоят гиганты и гиганты его не двигают.
https://dlang.org/orgs-using-d.html
Зато эти компании его используют. Может так случиться, что выложат какие-то наработки. К примеру, netflix использует непопулярную freebsd и недавно выложила свои наработки для неё: https://www.opennet.ru/opennews/art.shtml?num=51463
Также по верхней ссылке есть какие-то наработки тех компаний, но их не так много.
> Проще не насиловать себе свой мозг и сразу на С++ сеть.
Наоборот же. C++ менее безопасен и насилия над мозгом будет больше.
> Идеальная связка Си + Питон
Си? Самый небезопасный язык. Речь не про уязвимости, если кто не понял, а про возможность отстрелить ногу, утечки памяти, неопределённое поведение и тд.
Компании вечно там что-то используют. Вообще уже не показатель.
Топовый слой С++ сейчас в геймдеве, вот взяли бы и флагман какой-нибудь написали типа движок Dunity.
Сейчас языки без флагман проектов (главное нужных) - не интересны (зажрались, да, но такая вот реальность)
>языки без флагман проектов - не интересны
Назови несколько таких флагман проектов для разных языков, вижу ты в этом разбираешься.
Новых? Вот именно что нет. Возможно только у дарта, поэтому он из пепла почти котлин уже догнал.
А так у рубей были рельсы.
>Как сказал один разработчик в Яндексе, у меня слишком плохая память, чтобы писать на динамически типизируемом языке.
Динозавры на vim'е.
Давно уже были докстринги во всех языках завезли и потом уже даже хинты завезли. Оказалось что кроме автокомплита (и чтобы IDE подсвечивала ошибку) - больше статическая типизация и не нужна (всякие auto, var, let - это доказывает).
Я реально еще на 2009 году вел на говно-динамике проект, где все типы были в докстрингах (вся эта херня типа @param), писал по ощущениям как на жабе. Причем в 90% случаях даже нетбинс автоматом выводил типы.
Потом эти динозавры напишут такой язык как го и будут говорить что все нормально (это не мы не осилили, это вы нас не поняли)
У меня сейчас небольшой питонячий проект, там типизация (за счет хинтов) сильнее чем у го с его interface{}.
Причем когда проект прототипировал, мне типы только мешали (я уже потом все по мере необходимости расставил или переписал участки)
Речь про новые языки. Зачем набирать популярность популярным языкам?
Чет проиграл.
>They are written as the average software developer
>JIT warming up is applied when necessary.
То есть, если жаба была очень быстра, то мы исключали JIT :)
Было лень график нарисовать что ли, вот глазами ебаться в цифры, то еще удовольствие.
>>576265
>три компилятора: dmd, ldc и gdc.
То-то головняка не хватало, еще и между компиляторами холиварить.
А вообще идея и язык неплох. Я за любую вменяемую замену С++
https://concurnas.com/
This is actually a quite interesting language offering a unique combination of features for a statically-typed, object-oriented language:
dead easy concurrency via isolates and actors, which can be "trivially" used in a distributed setup.
reactive refs (i.e. change of a value causes auto-modification of dependent values, like in Excel).
vectorization (efficient and easy matrix operations).
GPU Programming.
language extensions (basically, embed code in other languages).
union types, which they actually call multitype (as in TypeScript).
off-heap memory.
Object providers (Dependency Injection at the language level).
more basic features, but cool to have: pattern matching, tuples, null safety, extension functions, serialization for everything out-of-the-box, list comprehensions, ranges, a REPL...
>Дальше можно не читать.
Когда ты это прочитал про "pattern matching", ты уже почти все прочитал.
Попытки подражать хаскеллю почти всегда превращают язык в уродливое, ебически сложное и нежизнеспособное нечто
Это скопировано с сайтика, где это только начало, а инфы ещё много.
Чувствуется какой-то фанатизм в словах
Да пусть копируют, лол. Раз хотят опуститься до его уровня.
Лафтаймы и владение (чекер и в целом синтаксис) - это сложнее чем прямое управление памятью. То есть, язык снимает одну нагрузку С++ и вещает другие, не менее сложные.
Можно конечно натренироваться и использовать язык для компенсации и последующего демонстрации собственного достоинства, но для таких понтов уже есть хаскель.
Язык никак нельзя назвать прагматичным. Очередная экзотика для поиграться.
У крестов и так теперь на замену ручному управлению памятью есть std::unique_ptr, std::shared_ptr, и std::move. Но и там нужно быть осторожным, а то легко наступить на UB.
Сырые строковые типы. Они реально поток байт выдавали за фичу. Но чтобы реально работать с полноценным utf-8 надо перегнать в руны (название тоже доставляет)
Обработку ошибок вообще нет.
Изначально вообще предлагали просто конкатенировать строку и потом вверху там разбирать. Сейчас вроде какой-то костыль придумали.
Со слайсами вообще радость (реально магическая бага), когда неожиданно можешь получить два разных слайся (когда в один добавляешь больше чем у него там капасити). Думал у тебя один ссылка на один слайс, а в реале уже два разных.
и т.д.
Язык просто на отъебись
https://habr.com/ru/post/484136/
у нас на работе на ноде был сервис, как-то связанный с конвертацией валют, точно не знаю, я тогда еще не работал там. Переписали этот сервис на го. Прогнали тестики и получили в 1000 раз больше обрабатываемых запросов в секунду.
на го очень мало вакансий. На джунов я вообще очень редко вижу. Попробуй на ноде/пхп/джаве/шарпах в бек залезть, а оттуда и в го. Также часто видел вакансии го прогеров, в которых писали, что рассмотрят челов с опытом на пыхе
Скорее всего код на ноде был плохо написан. Это не упрек, такое явление не редкость. С джавы на джаву переписывали полностью проект, получили производительность больше (была бы какая-нибудь скала или котлин или еще что там, сразу бы субъективно посчитали что дело в языке, а не архитектуре).
у нас чат и нотификатор написаны. Еще вроде сервисы с работой сети эфириума.
у нас миграция на го вызвана проблемой производительности. Легаси код на ноде и пхп не вывозит нагрузок, отчасти потому что сам код говно. На выбор было два стула: го и плюсы. Быстрее гохи только кресты будут, но пересадить команду на них пиздец сложно. И в целом время разработки увеличится в сотни раз. А го относительно простой(с пыхи наша команда легко перешла) и дает весомый буст в производительности лично в нашем случае.
а твитч на гохе написан?
Когда нода только пиарилась, молодой "тимлид" неделю мне зачесывал про то какая нода офигенная. А потом оказалось что она у них в одном экземпляре на 4 ядрах работала.
Так что js-разработчики те еще мастера своего дела.
У меня даже больше вопрос - как вообще пришла мысль для финансовых расчетов взять javascript? Это такая специальная олимпиада или что?
это говно индусы писали(или тайцы). Потом этот проект перешел в нашу компанию, нагрузки со временем увеличились, нода стала дохнуть. Решили переписывать на го
Всегда проигрываю с этой маняфантазии, что если мы возьмем язык Х код у нас будет работать быстрее в 100 раз!!
Во-первых - писать быстрый, то есть оптимизированный код, надо еще уметь (это не хилый скилл и вчерашняя макака на пхп или ноде на вряд ли умеет).
Как пример, писал часть некоторые оберток встроенных пхп функция на си, оказались что мой вариант тормозил в разы. Залез в сорцы и охерел как там оптимизировано написано (я так никогда не написал бы точно)
Во-вторых, даже в фейсбуке и вк не переписывали все на си или подобное, местами все равно остается пхп, потому что там где он отрабатывает - это экономия на спичках. Вы конечно же не искали узких мест подсказка, у вас она будет в базе данных, если это ваш первый затуп
В-третьих, как и писал, реальный прирост с CRUD минимальный, обычно решает кэш (можно вспомнить жабу, где она упаковывает и упорядочивает объекты в памяти, но в реале даже грамотный кэш на пхп может зарешать).
В-четвертых, если сравнивать все говно на статике и динамике (реальные проекты, а не перегонка в цикле листов), то динамика в реале просидает не боле так 10-20 не более (а порой меньше). Но реального вклада и денег статика требует больше (в том числе и на поиск спецов, на С++ вы на вряд ли найдете годных спецов, а если найдете, то завтра у вас их сразу же уведут)
какие маняфантазии? У нас был сервис на ноде, который не справлялся с нагрузками, теперь есть такой же на го, который все спокойно вывозит на проде. Ну и у нас этот сервис с финансовыми расчетами связан, на го априори эти вычисления будут быстрее. А ноду мы не выбирали - это подарок от предков.
пишу 4 года на питоне и все это время немного пописываю на го, думаю полностью перекатиться
То есть на ноде чтобы проект писать иделаьно, наняв 300к в сек сеньора, когда одна го-обезьяна напишет тот же проект, на отъебись и получит тот же результат?))
Готовься серьезно отвечать на вопросы о паралелльном программировании, конкуренси и прочего горутинного говна.
Почти никто не спрашивает базовые вещи.
Прошел-около-5-го-собеседований-в-скайпах
Планировщик, сборщик мусора, с азов (что такое горутины) до эскейп анализа (но нечасто).
>финансовыми расчетами
У тебя много коннектов, скажем 4 ядра и 100.000 горутин.
Одна горутина занимается расчетами, значит ~25.000 горутин зависли и ждут.
Асинхронный язык идеален для "получть-положить", "взять-отдать", любые вычисления вешают весь поток/процесс. Не удивлюсь что вы и сейчас вешаете что-то, просто более мозговитый шедулер го - более грамотно старается распределить по свободным потокам (может даже создает еще).
Снова жопой читаешь.
Как понять, что некоторые тесты плохо написаны? Очень просто, когда какой-нибудь язык опережает Си.
И Crystal
Чел, я не читал вашу дискуссию. Но ты пишешь в треде самого хайпового языка современности про то что нужен тред о маргинальных языках. Кого ты хочешь тут найти? Подними лисп тред для начала попробуй. Про nim и прочие подобные найти тут собутыльников вероятность крайне мала.
>Но ты пишешь в треде самого хайпового языка современности
Не вникал в вашу дискуссию, но прости, ты не в питон треде.
Ты же в курсе, что даже дарт обогнал по интересам го?
>хайпового языка
>питон
Ну раз вы считаете меня троллем, то, скажем так, ЯЗЫКИ РАЗМЕТКИ НЕ В СЧЁТ
В ldc, вроде, gpgpu завезли недавно.
>Топ ML язык
>Основной язык используемый в науке и анализе данных
>Numpy опережающий по скорости языки Си
>...язык разметки
>Пук, среньк, потёк из треда
Поэтому число-дробилки и пишут на сях. Что касается CRUD - то между питоном и сями ты даже не почувствуешь разницу.
В этом и прелесть, что питон такая "обертка" на сями, даже не знаешь когда работаешь с питон-модулями или сишными.
А в го? В го ты пишешь перманентно бойлерплейт.
Двачую адеквата. Мне Nim побольше D понравился, т.к. почти все киллер-фичи D переняли в новых стандартах C (к примеру, анонимные юнионы, стракты и enum'ы в C11). Питону дает за обе щеки, т.к. по сложности синтаксиса и возможностям метапрограммирования он к нему близок, но при этом полезных конструкций в языке побольше. А по скорости даже Go даст пососать, т.к. она близка к C, к тому же есть линкер (ибо бинарники по 50 KB куда приятнее, чем по 5+ MB).
Да ну конечно, с говно-обертками.
> почти все киллер-фичи D переняли в новых стандартах C
Опциональный GC тоже переняли? А SafeD? D позиционирует себя как по умолчанию безопасный, дающий возможность играться на небезопасном уровне или не беспокоиться о нём. Си не добьётся этого никогда.
Пили теперь тред по нему, борщехлебам он понравился. Можешь сразу с другими переосмыслениями C (Nim, Fantom, Zig, Pike или даже D) тред объеденить, как в раст-треде предлагалось. Если соберется больше, чем полтора аутиста - можно будет либы пописать и специальную олимпиаду устроить.
Я вечером запилю объединённый, с шапкой, инфой по языкам и полезными ссылками.
Отлично, надеюсь взлетит. Много языков не бери, главный приоритет - V, Nim, D, Zig (самые большие комьюнити). Тэг можешь взять /clike/, если ничего лучше не придумаешь.
> Nim, Fantom, Zig, Pike, D, V
Нахуй нужны все эти близнецы-уродцы?
>>577678
Уверен ты даже сравнительный анализ по ним дать не сможешь.
>Нахуй нужны все эти близнецы-уродцы?
А нахуй вообще ЯП нужны? Пиши прямиком на машинных кодах, и ассемблером не пользуйся, ибо их там тоже пара десятков реализаций (nasm, fasm, tasm, masm, *asm). А если серьезно, киллерфичи языков обычно подробно расписаны на их сайтах, которые запросто находятся по запросу %название_языка% lang. Для большинства это простота и безопасность по сравнению с C, но у каждого свои фичи - D себя позиционирует как переосмысление крестов, V имеет невероятно быстрый компилятор и встроенный менеджер зависимостей, Nim (и не только он, кажется) умеет транспилироватся в JS.
Имеется в виду на фоне уже имеющихся языков.
Менеджер зависимостей это не фича нихуя, он и так должен быть у любого промышленного языка, и вообще похуй встроенный он или нет. Транслятор в жс это тоже не фича языка, любой production-ready имеет минимум один транслятор в js, тоже мне блять достижение. «Переосмысление крестов» вообще охуеть, а что конкретно делает его настолько непохожим на остальные языки или те же кресты чтоб он был прямо интересной альтернативой?
> Уверен ты даже сравнительный анализ по ним дать не сможешь.
И не собирался. Для этого будет тред, а не шапка. Для сравнения нужно иметь опыт на этих языках. И не на одном.
>транслятор в js
У них теперь специальная олимпиада, кто лучше оттранслируется в жс. А по факту это просто кукаретики, которые насочиняют непойми чего и думают что они охуеть какие молодци, а если рядом найдётся ещё какой нибудь менее квалифицированный энтузиаст, то может образоваться петля с автоподдувом. Что в общем то и наблюдается почти с любым языком в индустрии. Для себя решил, что на таких фантазёров просто нет смысла время тратить.
Я уже написал тебе, как найти информацию о киллер-фичах этих ЯП. Для большинства вышеупомянутых ЯП там весьма неплохо перечислены отличия от C. Go, кстати, точно такой же наследник C, но с поддержкой крупной копропорации.
>>577733
В этом тысячилетии ЯП вряд ли способен взлететь чисто за счет удобного синтаксиса/семантики и прочих приятностей вроде скорости компиляции. Для взлета в этом миллениуме нужна либо поддержка от крупных игроков рынка (Go, C#), либо популярный софт, который вытянет язык (Ruby с рельсами, обертки для нейросетей на Python), либо эксклюзивность для платформы (Java/Kotlin для Android). У этих языков пока ничего такого нет.
Если ты не в курсе, это не значит, что не используется.
Человек задизайнил V лучше чем разрабы го, это уже достойно отдельного внимания.
Да, именно. Я пишу уже шапку пол часа, а завтра вставать рано. Так что, тред будет завтра. Не, я не забрасываю.
Nim сейчас двое человек делают, не считая всяких контрибьютеров с гитхаба. Их даже какая-то компания начала спонсировать, чтобы они круглосуточно писали. Релиз 1.0 уже был. Так что, есть пример языка, который смог, не смотря на маленькое сообщество.
Не думаю что выстрелит. Идея то не плоха, но все языки имеют фатальный недостаток - они не принадлежат какой-то топ компании. Это го или раст можно до посинения пытаться натянуть на рынок, а такие языки никому не нужны, потому что нельзя управлять комьюнити.
Nim имеет шанс потому, что он выглядит как питон на стероидах.
>работающий язык
Там был какой-то момент, не помню точно, в 1.5 они переписали ГЦ, сделали его "быстрым" за счет процессорного времени и естественно многие схватили падение до 30% процентов (для пет проекта это может незаметно, но многие ощутили).
Или случай с алиасами, или что там было. Они просто взяли и решили по-своему.
То есть, ребята двигают продукт как им надо, это уже плохой звоночек.
>Nim
Было бы офигенно если бы они убрали двоеточие после if, for и функций, сделав просто обязательный перенос строки.
>>578147
Пока ты там шапку нашиш, приходится nim обсуждаться в го треде.
Где-то читал, что гугл изначально создавал го для решения своих внутренних задач, и ему, в общем-то, должно быть плевать, что кто-то ещё захотел это использовать.
> обязательный перенос строки
Охуеть, и в ниме синтаксис зависит от форматирования? Всё, вычёркиваю из своего списка "интересных языков".
да, это требует линкера или IDE вменяемое, чтобы не страдать. Но после питона привык настолько, что даже скобки в if с трудом уже пишу
Кривая и нестабильная реализация vs работающий язык с неизвестным будущем.
Я бы 10 раз подумал, прежде чем начинать работать с гугловой инфраструктурой.
Конечно, если что, язык высрится в опенсорс, но по честному, это будет свалка истории.
Эти парни вообще не парятся тому факту, что их продукты не выстреливают потому, что они их закрывают постоянно. Это уже замкнутый круг.
https://www.reddit.com/r/programming/comments/ept5c1/google_is_finally_killing_off_chrome_apps_which/
Котлинисты сейчас тоже напряглись
Теперь мне кажется так-же.
Груви жалко, он мог бы стать моим топовым скриптовым инструментом. Но приходится душить змею.
Как думаешь, что более вероятно: язык В станет относительно стабильным vs разработчику надоест им заниматься и он его бросит ?
>>578174
Судьба котлин зависит от судьбы андроида. Если гугл разработает свою операционку взамен андроида или какой-то новый язык, то котлин легко станет языком, который никому не нужен
> Если гугл разработает свою операционку
Fuchsia.
> или какой-то новый язык
Dart. На Go для той операционки сетевой стек был написан.
>Fuchsia.
Если она дойдет до готовности и гугл начнет ее пропихивать.
Правда, пока не ясно, заменит фуксия андроид полностью, или станет 3 системы
>>578188
Только сейчас им показали как гугл очередной проект закрыл. Они сидят о фуксии мечтают.
>>578181
>относительно стабильным vs разработчику надоест им заниматься и он его бросит?
Никто не говорит перекатываться на кустарные проекты, есть такая стадия освоение языка "слежу за проектом" (или "играюсь с языком"). Этого для таких проектов достаточно.
>Тут предлагают нарезать архитектуру не вдоль (все контроллеры в одном каталоге, все модели в другом, конфигурация в третьем), а поперёк (в одном каталоге контроллеры/модели/etc, связанные с одной сущностью, в другом - с другой и т.д.).
Проблемы вебмакак.
Чем больше ты нарезаешь папок, тем вероятнее ты словишь циклический импорт, где-то на 10 вложении.
Почему тупые-то, V действительно лучше Go. Если бы Go не форсился корпорацией добра, его бы никто в руки не взял просто посмотрев на синтаксис.
И поэтому приходится вручную прокидывать ошибки наверх, потому что почти всегда на текущем уровне её не обработать. Из-за этих if err != nil { return nil, err } код разбухает в несколько раз. В джаве вон тоже изначально пытались бороться с игнорированием ошибок, высрав checked exceptions. Не прокатило, практика показала, что далеко не всё можно обработать здесь и сейчас.
А причин-то не добавлять эксепшены и нет, просто goвноеды из принципа упёрлись.
Спасибо за ваше мнение. Мы его учтем и непременно добавим в Go2 эксепшены, ведь про это нам сказал анон с двача.
Ну наконец-то.
Если потихоньку пинать разрабов пока ещё молодых языков в нужном направлении, то может наконец-то получиться если не убийца крестов, то хотя бы сишки.
Там где-то в сети гуляет статья, что го не ваш язык, а гугла.
В этом вся суть, хера кого-то ты там распинаешь.
Мыши продолжали писать на других языках с мыслью перекатиться на го, когда он станет достаточно годным.
Когда на нём можно будет stm прогать?
> Плюса у С++ только два. Минусы стремятся к бесконечности
Проиграл.
Вообще давно хотел попробовать D. Время пришло.
Вы двинутые что-ли? Зачем пробовать мёртвый язык? Как бы хорошо он не был написан, ему уже 10 лет и он не взлетел. Всё, тема закрыта. Хочется чего-то нового, берите scala, rust, haskell, erlang, на худой конец, nim.
Ну ладно, скалу и ерланг можно тогда. А вообще больше всего хочется Crystal.
Думаю это тот же самый анон, который ним предлагал. Предлагаю укатывайться в V тред, как раз для маргиналов.
>Зачем вы пробуете мертвый язык
>Лучше попробуйте эти мертвые языки
Есть только один язык и имя ему python
http://pypl.github.io/PYPL.html
Это у которого вышли три ломающие версии и каждая последующая с апокалипсисом всей предыдущей скодобазы?
Почему три и кто тебе вернул твой 2008?
Почему ты решил что гугл не сломает если захочет? Язык его, а не комьюнити.
Но вот питон такое уже явно не будет делать.
Я вообще бы на месте гугла го закрыл (отдал в опенсорс), а сам бы на базе полученных данных от этого затянувшегося эксперимента запилил бы новый язык.
И ведь ломает, причём достаточно активно. Выпиливает фичи от версии к версии, что-то переделывает. Синтаксис, к счастью, не меняется так радикально.
Вообще не представляю, как на таком языке долго поддерживают что-то большое.
Ну когда у тебя нет карьеры и работы с миллионом задач, всегда хочется чето попробовать.
O_o
Мы, видимо, слишком разные.
Казалось бы, нет карьеры и хорошей работы - ну так заведи её. Выучи любой действительно востребованный язык (джаву, пыху, гошечку, да даже джаваскрипт) и найди на нём работу.
Но вместо этого ты хочешь тратить время на то, что принципиально не способно решить твою проблему (не гуглив, уверен, что во всём СНГ ты не найдёшь ни одной вакансии на D или этом V).
Тот случай, когда востребованный язык симулирует ось x в графике
Ну да, фичи объявляются депрекейтед и выпиливаются. Других причин выпиливать и нет. А легаси ведь так мгновенно переписывается, что можно вообще об этом не париться.
> vendoring
> binary only packages
> go tool yacc
А ты про го? Го вообще прелесть, вроде и обновления маленькие, но реально может что-то сломаться.
Хз, имел бы я легион хомяков бесплатных, я бы тоже на них тестировал.
Что конкретно в го поломали? Максимум, что-то задепрекетили (и это нормальный процесс).
Что vendor, что yacc можете использовать совершенно свободно, они будут работать. vendor вообще в go modules нативно поддерживается.
Хз у знакомого там что-то упало, в принципе и при джаве не торопятся обновлять обычно. В общем, парни поигрались, потом откатились до обратно до жабы не без помощи участия начальства.
Давно было, тут половина еще в школу ходила.
Звучит, как "одна бабка сказала", я про джаву могу тоже очень много негативных слухов припомнить.
Ну может есть тут кто не пет-проекты тискает и между версией встрял.
Мне лично хватило когда они просто взяли и в пользу своего модного ГЦ мое процессорное время разменяли.
Попробуй так в джаве сделай.
Лолчто? И го и джава одинаково жертвуют процессорным временем для гц во имя упрощения работы с памятью. Гошный и джавовый гц немного по-разному работают, конечно, но это довольно специфичные материи и в 99% проектах эта специфика бесполезна.
гошные хейтеры такие хейтеры
Читаешь попой да?
Это было когда ввели микропаузы в 10 мс. И это уже была как минимум 1.5 версия (вроде), то есть люди активно пилили тырпрайз и они просто взяли и херанули.
Я знаю, ты не оч умен. Поэтому просто объясню, они походу заебались с ГЦ (или их заебали с ГЦ) и они тупо выкрутили на максимум.
Ну и конечно натянули токсичный маркетинг, мол, как теперь стало круто у го. Но оказалось это дается не бесплатно и кто-то хапнул на железках падение 20-40% (что в моих 70-80% было критично кстати).
Как потом оказалось, что в мире ГЦ не сложно достичь низких пауз, но достигается это не бесплатно, а самим дорогим ресурсом (нет, не ОЗУ мой юный друг) - а процессором
Ну и конечно они там не дали никакого ключа типа "хочу как раньше". Они просто сделали как пожелали и клали на все.
А IDE тебе на что дана? Там все подобные действия уже давно реализованы, одной горячей клавишей всё везде поменять можно.
>Мне кажется что работой жц в го можно таки управлять.
Два состояния в го:
1) Блин, тут наверное должно быть какое-то решение, не может же это быть так глупо сделано.
2) Бля...
Я не го программист но за 5сек нагуглил это https://golang.org/pkg/runtime/
Можно установить процент, можно запускать вручную. Стандартно всё.
Почему хуйню несёш ты, а стыдно мне?
Убей себя.
>Как потом оказалось, что в мире ГЦ
Спешите видеть, эксперт в программировании с двача открыл для себя автоматическое управление памятью. Ещё немного и начнёт откровения ООП раскрывать.
>Можно установить процент, можно запускать вручную.
Тебе сказали, что накатили другую модель ГЦ за счет железа (денег) пользователя, без возможности заюзать старую модель.
Что ты там по-подергать собрался, суслик? Не оторви себе.
Похожий момент был с алиасами, я уже выкатился и не помню точно. Но помню что гуглу нужно было какой-то сахар заюзать срочно, который вообще добавляет магию и неопределенность в код. Но комьюнити встало на дыбы. И тогда го-разрабы добавили это как-то постепенно, не так резко, со смазкой, с последующей версией. Суслики проглатили.
У гугла мона репа именно поэтому они так неохотно ели пакетный менеджер и высирали статьи "ненужно" (до сих пор там лажа какая-то).
Очевидно что го какой-то внутренний язык для узких задач, который выкатили чтобы на халяву получить опенсорс труд.
Я застал реинкарнаций 5-10 тредов по го (застал даже Илюшу), все эти треды жили на хейте и лулзлах над фанатиками.
Есть, конечно, очень маленькая доля рынка, где го просто был идеален в свое время, но сейчас, когда запихнули зеленные потоки async await даже в те языки где он не нужен, надо быть отбитым чтобы брать го.
Да толком ничего (или я забыл).
-Сайт с тортами или объявление тортов (жена пекла, может ИП).
-Мухосранск
-Ну что чел шизик (причем какой-то реально невменяемый).
Дианон в /pr уныл и беспощаден (там были какие-то данные, можно было погуглить, напрячься, но я ленивая жопа).
Вообще, были мемные события, особенно того же Илюши, которого полностью дианонили и лулзовали как могли, даже в го чате. Но никто это не увековечил даже в лурке, а Илюша вырос и стал музыкантом ушел из го. хотя вроде пытался пилить свой го, с блекджеком и дженериками, но увы, малолетний долбаеб, хотя вроде и умный
То есть, ты только что заявил, что деанонимизировал кого-то, и тут же признался что не деанонимизировал никого?
Тебе сколько лет?
> Тебе сказали, что накатили другую модель ГЦ за счет железа (денег) пользователя, без возможности заюзать старую модель.
Ну а пруфы, пруфы-то где?
Дополню вопрос, в то, что они улучшили gc - я верю, это легко гуглится. Где пруфы, что это так сильно влияет на ресурсы процессора?
Сдеанонили шизика по тортам.
@
Нашли объявление жены, фирму, номера телефонов, мухосранск
@
Анон не легион он один, забил тупо болт
@
Шизик обосрался и залег на дно реально срал в каждом треде
@
Смысл лулзов пропал вообще
@
Торто-куколд сейчас радуется что его не сдеанонили до соцсетей "ко-ко-ко" это не считается.
Ты не расслабляйся, вдруг треды в архивах.
Пока что я могу сказать, что судя по гитхабу, проблемы с деградацией решили где-то в go1.8, там в каждой версии, начиная с 1.5 были улучшения на эту тему.
Более того, быстрый гуглинг по статьям говорит, что он gc в го схожс jdk-шным, вроде бы даже реализован тем же разработчиком, но позже, с какими-то улучшениями.
Не могу квалифицированно сказать, что там конкретно поменялось, но вроде как они изменили архитектуру gc и это в ряде случаев начало вызывать проблемы.
Что сказать, да, они пидорасы, что выкатили настолько странную новую версию, которая вызывала такие проблемы. Хорошо, что потом это починили.
Ты это хотел услышать?
А ты чего ожидал? Что ему под дверь насрут?
>легион
>шизик
>куколд
>лулзы
Не поверю, что это может писать человек старше 20 лет
У нас уже получается гуглить. Это хорошо.
Тонна говна тогда выложили (лично читал боль в гугл группах), даже вроде в релизе говорили про цену в 10-20%
Но смысл, еще раз не в этом, даже срать починили они или нет никто там не починит, такая модель ГЦ просто. Где-то даже в подкастах на джаве умные люди на пальцах объясняли. Кстати, и не починили скорость компиляции, динозавры помнят
Речь про то, что они взяли продакшен-реди продукт и навернули как им пожелается. Случись такое где-то в жабе, говно до сих пор бы на вентиляторах вертелось.
Конечно, все на базе синтаксиса видели, что они делают как захотят высирая классическое ненужно, но никто не думал что они будут рантайм шатать.
Конечно, для среднего васяна тут вообще пофиг, но для нас это был звоночек и мы слезли с го.
Судя по тому что местные даже нагуглить не могут, не то что помнят сию трагедию, это можно уже считать мифом. Так что забей, кушайте кактус.
Да не обращайте на него внимания, он ебанутый. Сказки рассказывает какие-то про 80% деградацию, про какой-то деанон рассказывает. Сидимо, у первокурсника каникулы начались, вот и в свободное время засирает интернеты.
> Есть, конечно, очень маленькая доля рынка, где го просто был идеален в свое время, но сейчас, когда запихнули зеленные потоки async await даже в те языки где он не нужен, надо быть отбитым чтобы брать го.
И поэтому сейчас его начали использовать в Авито, Озоне, Мейлру, Тинькове и т.д.? Ну тупые, ведь анон с двача скозал что только отбитые так делают.
>>580415
Джава-ретард, ты? Начинай оправдываться.
https://blog.twitch.tv/en/2016/07/05/gos-march-to-low-latency-gc-a6fa96f06eb7/
Starting with Go 1.5 in August of 2015, Go’s garbage collector is mostly-concurrent and incremental, meaning that it no longer requires the application to be entirely stopped while it does the bulk of its work. Aside from relatively short setup and termination phases, our program can continue to operate while garbage collection is underway. Upgrading to Go 1.5 immediately led to a 10x improvement in the length of GC pauses in our chat system, with pause time on a heavily-loaded test instance shrinking from 2 seconds to around 200ms.
We’d endured the multi-second GC pauses of Go 1.2 through 1.4. Go 1.5 brought them down to around 200ms, and Go 1.6 cut it further to around 100ms. Now with pauses generally less than 70ms, we can claim an improvement of more than 30x.
With pre-release Go 1.7 from June 2016, the GC pause times are better than ever with no manual tuning required. Typical pause times for our chat server are close to 1ms out of the box — a 10x improvement over the tuned Go 1.6 configuration!
Profiling and tuning gave our application a 10x improvement in pause time with Go 1.5 and 1.6, but between Go 1.5 and Go 1.7 the runtime team was able to turn that into a 100x improvement in pause time for all apps like ours.
Торто-шизик, плиз.
В 2020 удивляться что крупные компании могут позволить себе взять и поиграться в очередной язык чтобы пропиарить себя в узкой группе разработки (ты же их запомнил, умница) и чтобы избежать текучку кадров, тем самым дав поиграться очередным своим макакам.
У нас так и руби был, нода, го, котлин даже тискали. Сейчас одна команда сидит и заливает как им очень нужен раст (они же постигали в свое время говно).
А зачем кому-то поддерживать узкие группы разработки по "плохому" языку? Зачем вкладывать ресурсы? Или ты думаешь, там тупые люди сидят, один ты тут такой умный - срыватель покровов с го?
Гоферы на все блестящие ведутся, думать не хотят совсем.
Парням очень важны были эти паузы, вместо того чтобы взять С++ или раст они тупо дрочили эти паузы и радовались.
Важны ли эти паузы тебе? В 99% нет.
Ладно, распишу для самых маленьких.
У тебя есть некий язык и у него есть два варианта использования:
1) У тебя есть сайтик, который раз в 5-10 минут делает stop-the-world в 200мс. Естественно, это незаметно для клиентов вообще.
2) У тебя есть сайтик, который очень часто делает stop-the-world, но всего лишь 10мс, плюс отнимает 20-40% процессорного времени. Естественно, тоже незаметно для клиентов вообще.
Какой вариант выберешь? Да никакой не выберешь у тебя нет выбора в го. У тебя есть только возможность читать очередные истории успеха, от которых приторно стало еще в 2015 году агрессивный и слащавый маркетинг это плохо
Ты тупой? Тебе там сразу написали.
1) Пиар. Потом хомяки бесплатно произносят твою фирму при холиваре. А так же пиар на конфиренциях.
2) Уменьшить текучку кадров, позволяя программистам во что-то новое поиграть. В условиях микросервисной архитектуры - это ничего не стоит.
>>581189
>Авито, Озоне, Мейлру, Тинькове
Вот пример, казалось бы не особо то продвинутые айти компании. Но суслик уже преподносит это как плюс. На халяву пиаря компании.
Мы в свое время на какой-то конфе чела отправляли, чтобы просто нашу ноуй-нейм фирму хотя бы услышали (а потом может узнавали). Вроде было про нод.жс, потом эту каку конечно выпилили потому что бывшие фронтент разработчики не очень то подходят для бэка
>Есть приложение на Го и это приложение хочет базу. Но базу оно хочет не абы какую, а Постгрю, что, учитывая масштабы применения приложения выглядит ебанутым проектированием скейлинга ради скейлинга. Короче, как с минимумом усилий подменить для Go-приложения postgres на sqlite3?
Без анализа того что именно и как твоё приложение делает - никак.
Или ты о чем вообще?
Что если оно жс запускает на стороне базы данных?
> Авито, Озоне, Мейлру, Тинькове
> Вот пример, казалось бы не особо то продвинутые айти компании
Толсто.
> бывшие фронтент разработчики не очень то подходят для бэка
Это почему? Я сам из фронта в бек выкатился и вполне успешно.
Успокойся уже, не отнимает он столько процессора. В 1.5 версии был конкретный баг (точнее, недоработка) связанный с конкурентной обработкой горутин, находящихся в паузе, сборщиком. Её пофиксили, теперь не только паузы маленькие, но и процессор он не жрёт.
А ты сиди дальше на своей джаве, жирной, как твои наезды на гошечку.
>Сдеанонили
>Нашли
Ты же говорил что сам лично сдеадонил.
>Анон не легион он один
Хм.
>Нашли объявление
А деадон то был?
>Ты не расслабляйся, вдруг треды в архивах.
Требую деадона.
Не верю в такие кулстори. Это как с гомоеблей, если даже и прекратишь - то пидором быть не перестанешь. С фронтендом та же история.
>теперь не только паузы маленькие, но и процессор он не жрёт.
Гоферы изменяют физику.
Ты думаешь нету реалтайм ГЦ? Есть, но оно оч дорогое по ресурсам.
Вам тупо "ползунок" выкрутили в одну сторону есть мнение что их запарило бороться с минутными паузами для 50гб систем.
Проблема то не в этом. У гоферов нет выбора, вот мне не нужны паузы в 10мс, я хочу себе throughput поднять, в жабе я могу сделать выбор, в го я могу только пукать в треде.
Ищи лучше.
Ты глупенький что ли? Он не реалтайм, он с паузами, его там оптимизировали (добавили конкурентную разметку, как я понимаю), чтобы паузы минимизировать. Да, это имеет некоторый оверхед, но он совсем не такой, как ты описываешь.
То, что ты пишешь - это какие-то сказки.
Кто сказал что го реалтайм?
Реалтайм ГЦ это крайняя степень, когда занижают throughput ради маленькой и стабильной latency.
Реалтайм показывает, что делать так можно, но не нужно.
https://trends.builtwith.com/framework
https://w3techs.com/technologies/overview/programming_language
Не общались*
Все ушли на шарфик?
Шизя, шизечка, шизоид, ути какой синенький, иди сюда, я тебя покормлю.
Ты попал по адресу
Поймал шизика схватил обнял.
Ути пути какой смешной ты у нас.
Держи тортик, вкусный тортик?
Как там диодон? Скоро уже? Давай диадон, а я тебя тортиками накормлю.
>Целый день искал в архивах те темы.
>@
>Не нашел
Шизя, я тебе архивы принёс.
https://2ch.hk/pr/arch/2017-06-14/res/973015.html (М)
Давай уже диадонь скорее, у меня для тебя целая гора тортиков.
>>584179
>Вы тут ебанулись?
В треде орудует шизик, любитель сладких тортиков, срет тут с 2017.
Ну так ведь не object oriented и не functional же.
Из гугла ( и скорее всего го тимы) уходит разраб, который 4ый по количеству коммитов в го репу
Ты настолько тупой, что даже не понял что паста была от твоего лица??
Заглянул неделю назад, обрадовался шизику.
>ахаха ты тут сидишь так долго я не шизик
Всё ещё жду деадона. Если не будешь стараться не получишь тортиков.
Мне тебя жалко.
А что не так? Тебе не нравится, что джава-треды перекатывают после 1000? Так это фича такая.
Мы долго поддерживаем свой тред, а не переписываем каждые 500 постов.
Эх, придётся перекатываться с гошечки в кровавый ынтырпрайз (нет)
2024? Да? Лол.
У таких интерфейсов есть и плюсы. Можно объявить интерфейс и принимать его на вход функции, которой передавать уже существующий тип.
Мимо фронтенд.
Зашел в джава тред, там все обсуждения - это как настроить иде и как сделать лабу по программированию
На жабу.
Если серьезно - си шарп
Ну местные же по многопоточности специализируются, тут часто мелькала в треде другая функциональщина.
>Мне одновременно интересен Эрланг и ОКамл. У Эрланга многопоточность, у ОКамла её нет, но зато там стронг статик. Как мне совместить эти две вещи в одном языке, чтобы не распыляться на два фронта?
Ada
Лол, когда жаберы уходят в дотнет, он полез в кобол.
Мимо реактообезьяна, пилить интерфейсы заебало. Я тоже хочу на бекенд, хоть куда. Дай наставлений, анон?
Шизик, таблеточки прими, или ты опять голодный?
Использую связку typescript + c_sharp
>В го нет потоков
Ку-ку дядя. Если горутина делает блокирующий системный вызов, то рантайм создаёт/берет из пула новый поток, а блокированный отправляет в пул.
А туда ли ты зашел - петушок?
ТС знаю достойно, а на ноде смогу написать небольшой сервер или утилиту. Есть чуть больше года опыта фронта и немного бекенда. Монго на уровне "добавь комментарий в блог". Представляя собеседование на бекенд позицию пугают вопросы про алгоритмы, SQL и паттерны / бест практисы (нихуя из этого не знаю). Как дальше поступать?
>Как дальше поступать
Я на интервью сразу говорю, что с sql неочень, т.к. у меня есть дба и они бля, да и вообще идите вы нахуй.
Все время спрашивают какую-то хуйню - вы умеете проектировать бд? Да хуле там проектировать, чертила, таблица хуяк хуяк нормализация.
Ну раз такой умный, помести мне эвент-луп tcp-сервера в отдельный сетевой неймспейс, оставив мейн-тред в текущем.
Да у них каждый первый язык, где есть функции, функциональный. Скоро и сишку будут классифицировать как функциональщину.
>отдельный сетевой неймспейс
Я тут мимопроходил.
Первый раз такое услышал.
Это что-то из POSIX socket API ? Я с системщиной неработал никогда, но на уровне пользования апи ос из тех-же сей никогда о таком не слышал, или я забыл просто?
Это фича ядра линукс, которая сегодня в основном используется для создания контейнеров. Она позволяет содавать отдельные области видимости для разных ресурсов системы, изолируя процессы друг от друга по ресурсам (не по ядру).
Сетевой неймспейс изолирует видимые сетевые девайсы, и соответсвенно даёт свою таблицу марштрутизации, цепочки в iptables и т.д.
https://www.youtube.com/watch?v=j_UUnlVC2Ss
Например внутри докера ты можешь как угодно сломать сеть и маршруты, и при этом в другом контейнере сеть будет нормально работать дальше, потому что это другой сетевой неймспейс.
Go позволяет запускать процессы в отдельных неймспейсах - тут хороший список примеров в нескольких статьях:
https://medium.com/@teddyking/linux-namespaces-850489d3ccf
Проблема той задачи выше в том, что нейспейс - это свойство потока в ОС, но Go очень сильно абстрагирует работу с потоками и не позволяет заиметь два пула потоков с разными свойствами, делая задачу "жить в двух неймспейсах одновременно" нетривиальной и настолько неудобной, что проще просто запустить отдельный процесс.
Т.о. в Go есть пул потоков, но сами потоки как объекты ОС го пощупать не даёт и не может дать - он сам ими управляет и сам шедулит горутины на потоки из пула.
Есть правда одно исключение - runtime.LockOsThread, оно позволяет решить часть задач, но он не позволяет указать несколько горутин которым разрешено сесть на текущий тред, только одну.
> сами потоки как объекты ОС го пощупать не даёт
Плохо выразился. Пощупать даёт, но с костылями (см. репу coreos) и одноразовыми тредами.
>>1591099 (OP) (OP)
Какая нахуй разница? Они все одинаковые.
Окей.
Как в C# в одном приложении один поток в один неймспейс а другой в другой запихнуть?
Это вообще где-то кроме Сях можно сделать? Ведь нужно напрямую команды ядру ОС посылать, верно?
>Проблема той задачи выше в том
Я вроде понял, но это тяжело назвать "не работает с потоками". Я первый раз в жизни слышу, чтобы кто-то делал подобное отдельно для отдельных потоков в одном процессе. Обычно всякие сгрупс распространяются на процесс.
Задача интересная конечно, очевидно ГО предлагает в таком случае выносить функционал в отдельный процесс.
Я видел как на отдельный тред вешали секкомп профиль. с неймспейсами не помню такого, но api позволяет. И есть всякие пруфы что это возможно вроде - https://unix.stackexchange.com/questions/494195/is-there-a-file-that-associates-a-thread-to-its-network-namespace
или man setns
Вообще и в го это можно - надо только забить на гошный шелуллер и сделать врапперы для pthreads. Насчёт других языков - в принципе, если треды под капотом держат нативные треды ОС, то всё сводится либо к вызову unshare и спауну нового треда, или к вызову clone с кастомными параметрами для создания нового треда.
Мне аж стало интересно запилить такое для ждавы с native threads
Будем надеяться что никто этим всерьёз заниматься не будет.
Не хочу такую хуйню в проекте встретить.
https://www.reddit.com/r/rust/comments/eytyug/why_discord_is_switching_from_go_to_rust/
inb4 только выиграли, хипстеры нинужны, дискордом никто не пользуется
>TLDR: Rust is faster and just as safe, Golang has GC lag spikes.
>
>It's interesting though because they are using a Cassandra database, which is pure Java and needs a lot of GC tuning to maximize performance, but it's still a very fast database.
Тут 2 момента: во первых разные GC это серьезное преимущество. Во вторых Cassandra более scalable чем fast.
Что они и делают:
> Post author here. Agreed Cassandra has issues due to GC too. We've been switching over to Scylla, which is a C++ database that is a drop in replacement for Cassandra. Scylla does not suffer from GC.
Джава обезьян снова ебут, да ещё крестами, какой позор.
Как же я лолирую с комментов гугл-фанбоев -
>Тесты не тесты!
>А пачиму старый гоу, мммм?!!! В новом гоу все хорошо!!!
>Руст - это сложно, гоу - хорошо!!
А что у них вообще на говне было написано?
Бенкенд у них на Elixir со вставками на Rust в местах требующих оптимизации. Фронт вроде на реакте.
>Scala
>Она же с динамической типизацией.
Лол. Нет конечно.
Более того там система типов по уровню фич сопоставима с Haskell.
Хуй знает может ты с Groovy перепутал.
>Как мне совместить эти две вещи в одном языке, чтобы не распыляться на два фронта?
Легко, берешь F# и получаешь OCaml с развитыми многопоточностью, асинхронностью, и даже с моделью акторов как в Эрланге, плюс развитая экосистема .NET Core, в которой есть все что нужно для жизни, чего ты не найдешь в Эрланге и в Окамле.
Выше кидали.
Щас бы следить за тем что делают в дискорде, и делать тоже самое. А если они завтра говно начнут жрать, ты тоже подтянешься??? Уверен что да.
Наркоман что ли? Во-первых - это практически мёртвый проект. Во-вторых никакой многопточки и грин тредов как в эрланге там нет, только убогие жвм либы.
Эрланг сильно живее, чем typed clojure.
Двачую, регулярно выходят релизы.
>Во-вторых никакой многопточки и грин тредов как в эрланге там нет, только убогие жвм либы.
Чаво? Clojure один из strong concurrent/multithreading language. Clojure один из редчайших языков, в который встроена STM, - транзакционная память, в само ядро языка, а не в сбоку.
кожура - претенциозное тормозное говно.
strong concurrent/multithreading language - не более чем просто слова, язык всегда живёт в экосистеме, так вот - экосистема жвм это всякое легаси говно, построенное на различных велосипедах или вовсе на блокирующем IO. Хуй там все клали на твои strong concurrent/multithreading.
Ебать ты олень. NIO это что блять? А Netty? Clojure стабильно находится в лидерах по производительности, как и джава впрочем. Только дебилы могут говорить, что в Джаве нет конкурентности и многопоточности. Я хоть джаву как язык терпеть не могу, но JVM это сила, это нельзя отрицать.
О, жвм петух опять фантазирует. У тебя весь бек на го, ты оподливился, даже твои убогие сервисы работают в докере, который оркестрируется кубером. Аналоги тоже на го, типа номада и консула. Рыночек доказал, что го лучше жвм-чиркашей, иначе бы всё было на них, но они не годны не для чего кроме поддержки обоссаного легаси.
Шизло, чини детектор. Ты там свою мамашу ещё жвм-петухом не называешь? Лол!
Raw SQL не удобно, gorm медленное говно.
Что есть ещё?
И да, кордевы утверждали, что им не нужен gc с поколениями.
Вот их и ткнули носом, что при большом хипе все скатится в говно.
> gorm медленное говно
Вся суть ORM.
>Что есть ещё?
Говнецо одно есть. ORM очень хуёво ложится на скудные фичи го. Самое годное - это
> Raw SQL
Есть еще всякие sql-builder, поищи.
Но вообще, raw sql - нормальное решение. В случае фейла запроса, лучше видеть, в каком он был виде, а не гадать, что же на самом деле вызывалось
> Но вообще, raw sql - нормальное решение
Вся суть просто. Господи, goвнина это просто язык для поржать, заходишь ИТТ или на реддит, и настроение подняли на весь день.
Masterminds/squirrel
Авотхуй, SQL-фобов это не обязательно энтерпрайз-кабанчик, это может быть один из создателей очередного интернет-магазина на Джанге или рельсах
*SQL-фоб
return findNode( node.left ) || findNode( node.right ) одна из строчек из-за которой не собиралась программа
Но оказывается в го нельзя так сравнивать указатели или если можно, то как это сделать?
Я уже переделал по другому
Хуйню скозал. Не более, чем в какой-нибудь Сишке
Да вообще, нет бы нормально язык сделать, сплошные антипаттерны
Нормальные орм начинают логировать запросы по щелчку logger-config.txt
Никак. В го нет указательной арифметики и неявных кастов. Пиши через if.
Нужно вставить что-то после Кафки и перед кликхаусом, что бы показывать реалтайм статистику и триггерить события при аномалиях.
> return findNode( node.left ) || findNode( node.right )
в го хоть что-то кроме булов поддерживает || ?
во всех императивных языках.
Ты сказал? Это чепуха. В Go даже размер стека настраивается.
Что я должен прочитать чтобы сделать это?
Пишу на питоне и жс
Это копия, сохраненная 29 марта 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.