Re[3]: Язык Go - слабые стороны
От: vsb Казахстан  
Дата: 15.02.22 11:42
Оценка: 1 (1) +11 -2
Здравствуйте, kaa.python, Вы писали:

vsb>>Лично для меня у Go самая фатальная проблема это система обработки ошибок. Я считаю, что исключения в сто раз лучше, чем то, что сделали в Go.


KP>В то же время подход с явной обработкой не выходит боком фактически никогда


Подход с явной обработкой выходит боком практически всегда. Ошибку либо тупо прокидывают вверх, теряя стектрейс, либо игнорируют, либо пытаются обрабатывать на месте (очень часто с багами, т.к. этот сценарий никогда не тестируют).

> в отличие от исключений, который крайне легко забыть, или не верно обработать.


Никогда у меня не было проблем с исключениями. Если про исключение забыл, значит сценарий не отрабатывает, в логах появляются страшные сообщения, идёшь и фиксишь код, никаких последствий. А чаще всего всё просто работает как ожидается — исключение вылетает наверх, где-нибудь там сверху ловится и всё.
Re: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 05:18
Оценка: 1 (1) -6 :))
Здравствуйте, Shmj, Вы писали:

S>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?

Нет ООП. Выбрасывайте.
Matrix has you...
Re: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 09:45
Оценка: +1 :))) :))) :)
Здравствуйте, Shmj, Вы писали:

S>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?


Ну, фраза "я программист на C++" заставляет девок покраснеть и дышать чаще, а то же самое про Go заставляет их лишь пожать плечами.
Re[2]: Язык Go - слабые стороны
От: ononim  
Дата: 15.02.22 10:16
Оценка: :))) :)))
S>>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?
Pzz>Ну, фраза "я программист на C++" заставляет девок покраснеть и дышать чаще, а то же самое про Go заставляет их лишь пожать плечами.
Девок QAщиц?
Как много веселых ребят, и все делают велосипед...
Re[3]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 11:10
Оценка: +2 :))) :)
Здравствуйте, ononim, Вы писали:

S>>>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?

Pzz>>Ну, фраза "я программист на C++" заставляет девок покраснеть и дышать чаще, а то же самое про Go заставляет их лишь пожать плечами.
O>Девок QAщиц?

Да есть ли разница? Или ты программировать с ними собрался?
Re: Язык Go - слабые стороны
От: ArtDenis Россия  
Дата: 15.02.22 06:31
Оценка: :))) :))
Здравствуйте, Shmj, Вы писали:

S>Вот, кстати, что на счет Go?


Го выбирают из-за:
1) поддержки очень крупной компанией,
2) поддержки очень крупной компанией,
3) поддержки очень крупной компанией,
4) киллер-фич и комьюнити

Первые три пункта перечёркивают его любые слабые стороны
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[3]: Язык Go - слабые стороны
От: Hobbes Россия  
Дата: 15.02.22 13:11
Оценка: +5
Здравствуйте, Pzz, Вы писали:

Pzz>Ну, на самом деле, Go как раз позиционируется именно как язык, в котором нет и никогда не будет всех этих крутых и совершенно непостижимых фич, которыми столь славен C++.


Каких непостижимых фич? Итераторы блин непостижимые? Перегрузка оператора сравнения это непостижимо? Без перегрузки оператора сравнения зачастую нельзя использовать тип для индексирования map.
Re[6]: Язык Go - слабые стороны
От: CreatorCray  
Дата: 16.02.22 07:57
Оценка: +5
Здравствуйте, Sheridan, Вы писали:

S>Это проблемы не бинарей, а раздрая в команде и некомпетентности программистов. Я удивляюсь как вообще можно не понимать что используемые либы надо актуализировать при их релизе сразу во всех проектах команды. Не получается при релизе либ — так хотя бы раз в квартал актуализировать.


Ещё раз, при деплое куда лучше всё что надо иметь в себе, и ни от кого не зависеть.
Все внешние зависимости приводят к вариациям dll/libc-hell
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[12]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 10:03
Оценка: -1 :))) :)
Здравствуйте, night beast, Вы писали:

S>>>>Это тоже способ уйти от необходимости обновлять у себя используемое.

NB>>>макс, давай ты не будешь фантазировать о том, почему ушли от монолитов.
S>>Ну расскажи ты.
NB>Pzz уже изложил
Ни разу не опроверг а местами даже подтвердил.
Matrix has you...
Re[7]: Язык Go - слабые стороны
От: Vetal_ca Канада http://vetal.ca
Дата: 16.02.22 12:34
Оценка: +5
Здравствуйте, Ikemefula, Вы писали:

I>Поэтому обычно используются другие подходы, например — zero dependency, или all-in-one, или доккер, или lambda, или итд.


Это не лечится. Уже были эти споры. Все уже тысячу раз доказано а у Шеридана все "Нужно сечь разработчиков плетями". Он остановился, закостенел.

На картах его мира нет белых пятен: его мир оконечен и определен, как полные карты средневековья. Все уже открыто, известно и внесено в "Библию Шеридана". Пустые белые пространства замещаются монстрами и плетями, поджидающими непослушных, молодых и дерзких.

Лучше подумать о том, что каждый из наз подвержен такой же ловушке. И надо ее избежать.
Re[9]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 09:24
Оценка: +4
Здравствуйте, Sheridan, Вы писали:

S>Сначала были монолиты. Чтобы решить проблему используемых при разработке либ (не всем дано вовремя обновляться, да и лень) — придумали микросервисы.


Микросервисы придумали, чтобы разбить большую систему на небольшие части, связанные интерфейсами, но не доступом ко внутренностям. Собственно, это — та же идея, что и ООП, но на новый лад.

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

S>Спустя какоето время поняли что микросервисы решили только проблему разработки и переместили проблему зависимостей на deploy-time. Поэтому придумали изоляцию (докер)


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

S>А теперь и докер перестал устраивать. Поэтому с одной стороны появляются языки, где секут плетями за "не такой" код и либы вкомпиливаются в бинарник (сабж). А с другой стороны пилят кубернетес чтобы хоть както управлять контейнерами и их версиями.


В Go развелось статических анализаторов не потому, что мир Go — это царство фашизма, а потому, что могут. Go настолько простой язык, что его легко статически анализировать. Плюс, полноценный синтаксический анализатор Go является частью системной библиотеки, причем это не какой-то там анализатор для пользователей, а ровно тот же самый, который использует компилятор. Поэтому и анализируют. C++ тоже бы анализировали, но это в разы сложнее, и анализаторы плохо работают.

S>А казалось бы — обновляйтесь вовремя и никаких проблем.


Народ не обновляется не потому, что лень, а потому, что неизвестно, какие проблемы принесет новое обновление. Увы, интерфейс остается синтаксически тем же, а поведение под капотом меняется. И иногда эти изменения неожиданным образом просачиваются на поверхность. Причем это всегда происходит не вовремя.
Re: Язык Go - слабые стороны
От: ononim  
Дата: 14.02.22 21:47
Оценка: +3
S>Вот, кстати, что на счет Go?
S>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?
Хреновая поддержка динамических библиотек. Ее фактически нет.
Ну и наличие GC как бы намекает, что это совершенно другая ниша. Впрочем, имеющая пересечения с исторической нишей С/С++ в плане написания командлайновых полезняшек.
Как много веселых ребят, и все делают велосипед...
Re[5]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 17:01
Оценка: +1 :))
Здравствуйте, mrTwister, Вы писали:

Pzz>>Пайк задумывал Go как C 2.0. Как язык для настоящих мужчин, но без недостатков C, и с достоинствами Алефа и Лимбо и с современным синтаксическим стилем, без всех этих ненужных скобочек после if'а. Но все мы знаем, что программировать на Go побежали в основном не небритые сишники, а молодые и прыщавые программисты на Питоне, не способные освоить даже JavaScript.


T>И те и другие побежали. Посмотри на список крутых OSS проектов на го, это же как раз небритые сишники


Ну, даже Пайк где-то жаловался, что они рассчитывали привлечь сишников/плюсовиков, а прибежали питонщики.

Хотя я бы плюсовиков привлечь не рассчитывал. У них чувство собственного достоинства растет, как на дрожжах, питаясь непостижимой сложностью ихнего языка, так что простотой языка их не соблазнишь.
Re[4]: Язык Go - слабые стороны
От: rudzuk  
Дата: 15.02.22 18:30
Оценка: +3
Здравствуйте, Pzz, Вы писали:

Pzz> Пайк задумывал Go как C 2.0. Как язык для настоящих мужчин, но без недостатков C, и с достоинствами Алефа и Лимбо и с современным синтаксическим стилем, без всех этих ненужных скобочек после if'а. Но все мы знаем, что программировать на Go побежали в основном не небритые сишники, а молодые и прыщавые программисты на Питоне, не способные освоить даже JavaScript.


А я слышал, что его делали для неосиливающих нормальные языки:

давайте послушаем слова самого Роба Пайка:

Фишка в том, что наши программисты гуглеры, а не ученые. Это обычно молодые, только выпустившиеся пацаны, которые возможно выучили Java, возможно даже C/C++ и может быть Python. Они не в состоянии понимать пробздетый язык, но мы все равно хотим, чтобы они делали хороший софт. Таким образом, мы даем им легкопонимаемый язык, к которому они быстро привыкнут.


Короче, нужно было хоть как-то этих обезьян утилизировать... GO!
avalon/3.0.0
Re[6]: Язык Go - слабые стороны
От: night beast СССР  
Дата: 15.02.22 18:58
Оценка: +3
Здравствуйте, Pzz, Вы писали:

Pzz>Ну, даже Пайк где-то жаловался, что они рассчитывали привлечь сишников/плюсовиков, а прибежали питонщики.


привлекать сишников языком с GC -- так себе идея
Отредактировано 15.02.2022 19:03 night beast . Предыдущая версия .
Re[3]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 05:15
Оценка: :)))
Здравствуйте, Anton Batenev, Вы писали:

AB>А зачем? Для ниши go монобинарь удобнее (в деплое и поддержке).

Насрать вообщето деплою и поддержке.
Более того, предпочту нормальные бинари, не приносящие всё-внутри-себя-с-собой и страдающие от этого ожирением.
Matrix has you...
Re[4]: Язык Go - слабые стороны
От: CreatorCray  
Дата: 16.02.22 07:47
Оценка: +3
Здравствуйте, Sheridan, Вы писали:

S>Более того, предпочту нормальные бинари, не приносящие всё-внутри-себя-с-собой и страдающие от этого ожирением.

Дада, лучше те бинари, что требуют поставить для них пачку frameworks, да ещё и конкретных версий, которые ещё с другими такими же конфликтанут.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[7]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 08:51
Оценка: :)))
Здравствуйте, CreatorCray, Вы писали:

CC>Ещё раз, при деплое куда лучше всё что надо иметь в себе, и ни от кого не зависеть.

Ещё раз: абсолютно насрать. Что надо — то и задеплоится. Надо один ьинарник — будет один бинарник. Надо 100500 либ впридачу — будет 100500 либ впридачу. Не программистское дело — лезть в деплой. Просто скажите что надо — то и будет.

CC>Все внешние зависимости приводят к вариациям dll/libc-hell

Это от некомпетентности того кто допустил этот самый hell.
Matrix has you...
Re[7]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 09:07
Оценка: :)))
Здравствуйте, Ikemefula, Вы писали:

S>>>>Более того, предпочту нормальные бинари, не приносящие всё-внутри-себя-с-собой и страдающие от этого ожирением.

CC>>>Дада, лучше те бинари, что требуют поставить для них пачку frameworks, да ещё и конкретных версий, которые ещё с другими такими же конфликтанут.
S>>Это проблемы не бинарей, а раздрая в команде и некомпетентности программистов.

I>Снова у Шеридана программисты некомпетентные. Может это ты разработку не понимаешь?

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

I>Надо вспомнить, что стоимость труда разработчиков выросла до небес, а стоимость стораджа упала ниже плинтуса, при этом сложность софта растет непрерывно.

И поэтому надо писать говно на говне и делать модным говно. Я тебя услышал.

>> Я удивляюсь как вообще можно не понимать что используемые либы надо актуализировать при их релизе сразу во всех проектах команды. Не получается при релизе либ — так хотя бы раз в квартал актуализировать.

I>Актуализация либ это процесс крайне трудозатратный. Настолько трудозатратный, что большинство проектов просто отказываются и делают это только когда секюрити баг найден или что навроде. В самых популярных либах такое конечно протекает легко. Штука в том,что далеко не все сводится к тем самым хорошим и правильным либам, коих в общей массе единицы.
Когда проепустили пару десятков версий а потом пришол петух с вооот таким клювом и таки клюнул — то да. Очень трудозатратный процесс. Потому что надо в кратчайшие сроки сделать работу, которую надо было делать на протяжении нескольких лет.


I>Например — обновил ты либу, упали тесты А. Фиксанул. Обновил другую — упали тесты Б. Фиксанул — снова упали А. Фиксанул — упали тесты Б. Обычно здесь надо засаживаться за глубокую отладку, что бы выяснить, почему либы несовместимы, писать тикеты, искать версии, которые хоть как то совместимы, или гуглить до посинения, пока кто нибудь не подскажет тебе комбинацию.

Стандартный рабочий процесс. Если не оттягивать и не ждать петуха.

I>Такое, во первых, требует высокой квалификации, во вторых, огромных трудозатрат.

Про трудозатраты я уже сказал. Про квалификацию: что, серьёзно настолько всё плохо что программисты разучились читать ченгджлоги и пользоваться поиском? Серьёзно?

I>И что получаем — высококвалифицированый специалист за конскую зп 100% времени занимается мелочовочкой.

Это когда петух приходит. А когда вовремя всё — то и затраты около нуля.

I>За деньги, которые этот разработчик потратит на миграцию, можно проплатить хостинг-деплоймент-клауд на год. Отсюда ясно, что постоянно заниматься миграциями никто в своём уме не будет.

Ты придумал высокие затраты и теперь пишешь про то что можно сделать вместо них. И выглядит всё логично и правильно.
Только вот высокие затраты ты придумал. В этом проблема.

I>Поэтому обычно используются другие подходы, например — zero dependency, или all-in-one, или доккер, или lambda, или итд.

Это от некомпетентности/лени. Потому что лень обновить либу, лень посмотреть/почитать чего нового появилось в мире.

Приведу пример:
Берём линупс. Буквально любой. А на больших промежутках времени (десятилетия) то и любую вообще ОС.
Устанавливаем ОС и не обновляем несколько лет. А потом обновляем. ВНЕЗАПНО возникает такая гора проблем, что для их решения реально нужны действительно дорогие специалисты и время.
А вот если обновлять ОС хотя бы раз в месяц — то и проблем не будет. Либо для их решения достаточно обычного приходящего админа.
Matrix has you...
Re[9]: Язык Go - слабые стороны
От: night beast СССР  
Дата: 16.02.22 09:24
Оценка: +3
Здравствуйте, Sheridan, Вы писали:

CC>>>Ещё раз, при деплое куда лучше всё что надо иметь в себе, и ни от кого не зависеть.

NB>>или как альтернатива разворачивать свой докер образ

S>Это тоже способ уйти от необходимости обновлять у себя используемое.


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

S>А казалось бы — обновляйтесь вовремя и никаких проблем.


не просто обновляйся, но и заставь всех клиентов обновляться. причем на ту версию, что поставилась в твоей системе.
в реальной жизни это почему-то не работает
Re[15]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 17.02.22 14:54
Оценка: :)))
Здравствуйте, Ikemefula, Вы писали:

I>>>Вот именно по этому all-in-one предпочтительнее. Кроме того, ты забыл, что вместе с твои софтом будей и другой, у которого могут быть совсем другие предпочтения по версиям.

S>>Решение подсказать? Нужно свой софт писать так, чтобы использовал те версии либ, которые есть в дистрибутиве. А если нет такой либы вообще, то в свой репозиторий складывать в виде зависимости к пакету с твоим софтом. А заказчику давать линк на свою репу, которую надо подключить ему к дистрибутиву чтобы потом стандартными средствами установить ваш софт.
I>В любом случае конфигурация финишного деплоймента на момент разработки неизвестна. И в конце спокйно может оказаться мешанина вида "софтина-плагины-еще-софтина-еще-плагины" имее взаимоисключающие требования.
Всмысле неизвестна? Как софт должен установиться и как работать уже должно быть известно ещо до первой строки кода, на проектировании. Окружение по мере разработки да, может поменяться. Наприер, используемая БД или средства мониторинга. Но чем ближе к финишу, тем всё более точно известно и окружение.
При этом деплой пишется сразу, параллельно разработке. И этим кодом деплоя выкатывается продукт на stage сервера.


I>>>Неинтересно. Чет заказчик на такое не жаждет соглашаться. Что предложишь, оскорбить его, обмануть, кинуть?

S>>Если заказчик платит деньги чтобы ваш софт появился в его дистрибутиве то вам нужно опакетить ваш софт для того дистрибутива.
I>Заказчик платит не за софт в дистрибутиве, а за решение конкретной его проблемы. all-in-one это хороший вариант исключить проблемы с шаред/транзитивными зависимостями.
Определитесь уже. То заказчик не может на свои сервера поставить для вашего продукта нужную ОС (из списка популярных и заведомо стабильных), то ему побоку на ОС и ему надо решить некую проблему. Взаимоисключающие пункты.


S>>У меня значит получалось выяснить что и почему не работает (и это включало в себя например сборку подправленного постгреса с дополнительным дебаг-логом). А у настоящих тру-программистов-профессионалов лапки.

I>Снова тебе программисты мешают.
Я чтото не так сказал? Программисты умеют находить корни проблем и исправлять их? Если да, то к чему этот разговор? Срач ради срача?


I>>>Похоже, ты уже начал кое что понимать.

S>>Я изначально к этому вёл, но у тебя закостенение "шеридан-долбоклюй-непрофессионал" и это мешает тебе воспринимать то что я пишу.
I>Здесь ровно наоборот- ты по пять раз на сообщении утверждашь, что с прграммистами чтото не то.
Конечно чтото не то. Вас послушать так программист умеет только код в студии набирать. Чуть чтото не так и сразу у него лапки.


I>>> Смешно. У тебя похоже экономическая составляющая вообще в рассуждениях не присутствует. С чего ты взял, что влегкую фиксанешь произвольную либу?

S>>А я говорил что это будет легко? Я сказал что если либа не поддерживается больше, то выполнить один из этих двух пунктов тупо придётся. Ты будешь с этим спорить? Ты правда программист?
I>Совсем необязательно, что придется. Это всего лишь риск. Сработает ли он, и во что обойдутся последствия это отдельный разговор. И слишком часто заказчик принимает решение, что ему выгоднее всего игнорировать такие риски.
Ты по верхам прыгаешь. Спустись на землю. Этот риск при своевременном обновлении либ воообще не возникнут.


S>>Ну то есть никто на протяжениии нескольких лет не чинит баги означает что либа полностью и адекватно поддерживается автором?

S>>Г — лоГика.
I>Да, бывают такие баги, которые трудно воспроизводятся, или их фикс ломает обратную совместимость. БОлее того — приоритеты в разработке никто не отменял. А в опен-сорсе тебе никто ничего не должен.
Это ты к чему? Да, такие баги бывают. Но как это относится к тому что автор забил на свой проект и несколько лет его вообще не сопровождает?


I>>>У тебя багтрекер это синоним "магия". Ну есть баг в том трекере, только например описан он совсем не так, как тебя проявляется. Что дальше?

S>>Опиши так как у тебя проявляется. Надеюсь ты сам понимаешь, что это поможет автору баг исправить.
I>Это только с детскими багами так, когда сразу ясно где он, и как его воспроизвести. А слишком часто баг в одном месте, а причина — в противоположном, и появляется не сразу, а время от времени, через пару дней и последствия
То у тебя тот же баг в другом месте. То у тебя баг вообще неуловимый. Сколько у тебя обуви то?


S>>А как ещо назвать разрабов, которые говорят "если на баг никто не отвечает, то ты неправ что либа не поддерживается автором а наоборот."?

I>А это норма в опен-сорсе — игнорить баги. Заходишь зарепортать в популярный репозиторий, а там булькают вещи еще с нулевых.
Если брать к себе в проект либу которую когдато вася пуповкин написал для себя то так и будет. И часто у вас ошибки выбора используемых либ? Как часто вы хватаете первое попавшееся а потом "ойвей, а либа то мёртвая!"?.


I>>>Выглядит как юношеский максимализм. Я и моя команда и без тебя все это делаем.

S>>Если вы и так это всё делаете, то какого Иакова вы мне тут мозги полоскаете? Так и напиши "да, мы этим занимаемся, но по мере возможностей". И вопросов не будет. Срач ради срача?
I>Так я не сужу по себе.
Вот только не надо говорить мне что если весь мир называет белое чорным то и я обязан это делать.


I>>>Зато факт в том, что большинство долгоиграющих проектов такой роскоши позволить себе не могут. Причины самые разные. И только ты один обвиняешь разрабов в некометентности. Тут похоже весь мир живет не по твоим правилам

S>>Причин две: лень и некомпетентность. Я бы добавил третью: недальновидность. Но программисту бизнес-бабки-платит-я-кодю этого не понять.
I>Снова программисты виноваты.
Не все, а только те, которые тупы.

I>У тебя похоже риск и инцидент это одно и то же.

Нет. Но тебе же важно набросить на вентилятор.
Matrix has you...
Re[14]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 17.02.22 17:25
Оценка: -1 :))
Здравствуйте, Vetal_ca, Вы писали:

S>>Макака одно приложение сваяет на образе одно версии убунту, второе на образе другой версии, третье на образе какой-нибудь sles11 (ибо нужные компоненты только под неё есть). И пропали твои слои

V_>Что, у вас нет человека, который Docker image не может написать, сохранив путь макаки на требуемом образе?
V_>Переделать под общий корпоративный стиль, какой нибудь Alpine, scratch или distroless ?
V_>Это не та проблема, о которой-то и упоминают, вообще. Делают, и работает.
V_>Тем более, что, собралось раз и, порядок.
А что мешает то сделать второй шаг и поддерживать свежие версии либ для проектов? Тогда и докер не нужен то будет.
Matrix has you...
Re[17]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 18.02.22 20:30
Оценка: +2 :)
Здравствуйте, Hobbes, Вы писали:

H>А общие данные и методы можно вынести в общего абстрактного предка. Или отдельно в общего мембера.

Не должно быть общих методов. Если есть общая функциональность — вынести её в отдельный класс и использовать композицию.
Sapienti sat!
Re[27]: Язык Go - слабые стороны
От: night beast СССР  
Дата: 24.02.22 06:10
Оценка: +3
Здравствуйте, alex_public, Вы писали:

NB>>я же пример приводил -- команды гет в одну сторону, другие в другую.


_>Да, прошу прощения, что пропустил это тогда, хотя ещё тогда должен был среагировать. Собственно реакция:

_>А зачем собственно может понадобится подобная сомнительная балансировка?

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

NB>>как ты это будешь в grpc делать?


_>Если мне вдруг всё же понадобится реализовывать подобное (крайне сомневаюсь в полезности подобной задачи), то я просто поделю весь сервис на две части (с мутабельными и иммутабельными функциями), разместив их соответственно по разным адресам (т.е. так весь gRPC сервис живёт на одном URL, а так будет на двух).


то есть будешь колхозить, о чем и речь.
Re[6]: Язык Go - слабые стороны
От: rudzuk  
Дата: 15.02.22 19:23
Оценка: 2 (1) +1
Здравствуйте, Pzz, Вы писали:

Pzz> R>давайте послушаем слова самого Роба Пайка:


Pzz> R> Фишка в том, что наши программисты гуглеры, а не ученые. Это обычно молодые, только выпустившиеся пацаны, которые возможно выучили Java, возможно даже C/C++ и может быть Python. Они не в состоянии понимать пробздетый язык, но мы все равно хотим, чтобы они делали хороший софт. Таким образом, мы даем им легкопонимаемый язык, к которому они быстро привыкнут.


Pzz> R>Короче, нужно было хоть как-то этих обезьян утилизировать... GO!


Pzz> Вот тут он врет. Перед кем, хоть, выступает-то?


Lang.NEXT 2014. From Parallel to Concurrent. Вот именно этот отрывок...
avalon/3.0.0
Re[15]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.02.22 05:29
Оценка: 2 (1) +1
Здравствуйте, Sheridan, Вы писали:

S>Ну как бы, на секундочку, это минус. Негоже в рамках одного проекта держать зоопарк подпроектов на разных языках. Нет, оно конечно можно, если смысл есть и профит, но мультиязычность ради мультиязычности — никуда не годится.

S>Такой себе аргумент, короче.
Ну, во-первых, я там ниже пояснил, что "что угодно" в контексте enterprise-проекта запросто может оказаться тупо разными версиями одного и того же рантайма.
S>Вот разве что если речь идет про модули-плагины которые можно под ваш сервис самостоятельно писать — то да, мультиязычность будет плюсом. И это пожалуй единственное место где оно действительно оправдано.
Во-вторых, в рамках достаточно крупной компании, всё примерно так и есть. Нет никакого "вашего сервиса", а есть огромная платформа, в которой варится огромное количество разного кода. И контрибутят в код этого решения с десяток различных команд, которые разбросаны по всему глобусу, и зачастую между собой вообще незнакомы.
Нет, если этого монстра пишет и маинтейнит одна небольшая сплочённая команда в пару десятков человек, то плодить вавилон будет неэффективно. Как раз потому, что трудно её укомплектовать сотрудниками, каждый из которых может и в питон, и в джаву, и в тайпскрипт, и в го, и в раст, и в сишарп, и в sql, и в редис, и в монгу, а заодно хорошо понимает HTML5 и css с его less/sass вариантами.
Но даже в этом случае имеет смысл смотреть в перспективу: а не захотим ли мы отдать часть рутинной разработки в какой-нибудь регион с дешёвой рабочей силой?
Какие-то куски у нас будут вычислительно сложными, с тяжёлыми алгоритмами — там нам будут нужны крутые спецы, которые умеют пользоваться профайлерами, и понимают не только синтаксис своего ЯП, но и особенности его компиляции в нативный код и тонкости всяких эффектов типа кэширования и многопоточности.
А какие-то куски — это одноразовые лендинги типа "зарегистрируйтесь на нашу конференцию и получите 12 часов VM бесплатно". Тратить силы вот этих вот бородатых парней с двумя PhD в несмежных областях — оверкилл.
Пусть там студенты за миску плова это делают, и пусть это будет на чём угодно.

То есть в мс-архитектуре вся система и состоит из "модулей-плагинов". Те же самые идеи, что и в компонентной архитектуре, популярной 30 лет назад, только механика взаимодействия теперь построена не на RPC или CORBA, а на HTTP.
И, да, называть вот это "проектом" — неверно. "Проект" — это ограниченная во времени активность, у которой есть фиксированный набор ожидаемых результатов.
А рамках подобного решения параллельно выполняются десятки/сотни "проектов". Вот как раз "добавить лендинг для регистрации на саммит" — это проект. В рамках него принимается набор независимых решений по выбору технологического стека, без оглядки на Главного Архитектора Всей Системы и остальные команды. При этом никакими "подпроектами" они не являются — у них независимый жизненный цикл.

Это в монолите у нас есть цикл релизов, и кто-то должен решить, что войдёт в версию 67, а что не войдёт. И все команды должны успеть прибежать к общему дедлайну; и приходится принимать трудные решения типа задержать релиз ешё на месяц, или выпилить какой-то из "подпроектов" (с риском потратить ещё больше времени на тестирование "системы без лендинга"). А если задерживать ещё на месяц — появляется искушение всунуть в релиз что-то ещё сверх исходного скоупа, а то те команды, которые уже всё сделали, будут простаивать (ну или ведь крайне же обидно, когда в бранче уже готова ещё одна фича, которая нам будет приносить +XXX бабла в месяц; по плану она выйдет только в версии 68 ещё через год. Релиза-то ещё нет, так давайте вкатим её в 67 и заработаем на 11*XXX больше долларов).
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Язык Go - слабые стороны
От: Hobbes Россия  
Дата: 14.02.22 22:01
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?


Укуренная система типов. Слабые средства метапрограммирования, отсутствие статического полиморфизма. Набор библиотек слабоват.

Парадигма обработки ошибок приводит к бойлерплейту. В целом, средства абстракции слабоваты, например итераторов — нет, и никак не сделать.

Моё резюме: берите го, если вам позарез нужны горутины. В остальных случаях не рекомендую. Да и в том же C++ тоже есть корутины, только с более мудрёным синтаксисом, явной передачей контекста и т. д., короче в го корутины реально удобнее.
Re: Язык Go - слабые стороны
От: vsb Казахстан  
Дата: 15.02.22 10:39
Оценка: +1 -1
Лично для меня у Go самая фатальная проблема это система обработки ошибок. Я считаю, что исключения в сто раз лучше, чем то, что сделали в Go.

В остальном язык классный.
Re[2]: Язык Go - слабые стороны
От: Anton Batenev Россия https://github.com/abbat
Дата: 15.02.22 10:40
Оценка: +2
Здравствуйте, ononim, Вы писали:

o> Хреновая поддержка динамических библиотек. Ее фактически нет.


А зачем? Для ниши go монобинарь удобнее (в деплое и поддержке).
Re[2]: Язык Go - слабые стороны
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 15.02.22 11:03
Оценка: +2
Здравствуйте, vsb, Вы писали:

vsb>Лично для меня у Go самая фатальная проблема это система обработки ошибок. Я считаю, что исключения в сто раз лучше, чем то, что сделали в Go.


В то же время подход с явной обработкой не выходит боком фактически никогда, в отличие от исключений, который крайне легко забыть, или не верно обработать.
Re[4]: Язык Go - слабые стороны
От: ononim  
Дата: 15.02.22 11:33
Оценка: +1 :)
S>>>>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?
Pzz>>>Ну, фраза "я программист на C++" заставляет девок покраснеть и дышать чаще, а то же самое про Go заставляет их лишь пожать плечами.
O>>Девок QAщиц?
Pzz>Да есть ли разница? Или ты программировать с ними собрался?
Девка QAщица, узнав что ты С++сник — может внезапно достать изза пазухи десятидюймовый pentesting tool.
Как много веселых ребят, и все делают велосипед...
Отредактировано 15.02.2022 11:35 ononim . Предыдущая версия .
Re[5]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 07:50
Оценка: -2
Здравствуйте, CreatorCray, Вы писали:


S>>Более того, предпочту нормальные бинари, не приносящие всё-внутри-себя-с-собой и страдающие от этого ожирением.

CC>Дада, лучше те бинари, что требуют поставить для них пачку frameworks, да ещё и конкретных версий, которые ещё с другими такими же конфликтанут.
Это проблемы не бинарей, а раздрая в команде и некомпетентности программистов. Я удивляюсь как вообще можно не понимать что используемые либы надо актуализировать при их релизе сразу во всех проектах команды. Не получается при релизе либ — так хотя бы раз в квартал актуализировать.
Matrix has you...
Re[6]: Язык Go - слабые стороны
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.02.22 08:50
Оценка: +2
Здравствуйте, Sheridan, Вы писали:

S>>>Более того, предпочту нормальные бинари, не приносящие всё-внутри-себя-с-собой и страдающие от этого ожирением.

CC>>Дада, лучше те бинари, что требуют поставить для них пачку frameworks, да ещё и конкретных версий, которые ещё с другими такими же конфликтанут.
S>Это проблемы не бинарей, а раздрая в команде и некомпетентности программистов.

Снова у Шеридана программисты некомпетентные. Может это ты разработку не понимаешь?

Надо вспомнить, что стоимость труда разработчиков выросла до небес, а стоимость стораджа упала ниже плинтуса, при этом сложность софта растет непрерывно.

> Я удивляюсь как вообще можно не понимать что используемые либы надо актуализировать при их релизе сразу во всех проектах команды. Не получается при релизе либ — так хотя бы раз в квартал актуализировать.


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

Больше всего проблем доставляют шаред и транзитивные зависимости. Например — обновил ты либу, упали тесты А. Фиксанул. Обновил другую — упали тесты Б. Фиксанул — снова упали А. Фиксанул — упали тесты Б. Обычно здесь надо засаживаться за глубокую отладку что не всегда возможно, писать тикеты и ждать фиксов, искать версии, которые хоть как то совместимы, или гуглить до посинения, пока кто нибудь не подскажет тебе комбинацию.
Такое, во первых, требует высокой квалификации, во вторых, огромных трудозатрат, и часто абсолютно непредсказуемо по продолжительности.
И что получаем — высококвалифицированый специалист за конскую зп 100% времени занимается мелочовочкой.

За деньги, которые этот разработчик потратит на миграцию, можно проплатить хостинг-деплоймент-клауд на год. Отсюда ясно, что постоянно заниматься миграциями никто в своём уме не будет.

Поэтому обычно используются другие подходы, например — zero dependency, или all-in-one, или доккер, или lambda, или итд.
Отредактировано 16.02.2022 9:46 Pauel . Предыдущая версия .
Re[8]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 09:14
Оценка: -1 :)
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, CreatorCray, Вы писали:


CC>>Ещё раз, при деплое куда лучше всё что надо иметь в себе, и ни от кого не зависеть.


NB>или как альтернатива разворачивать свой докер образ

Это тоже способ уйти от необходимости обновлять у себя используемое.
Смотри:
Сначала были монолиты. Чтобы решить проблему используемых при разработке либ (не всем дано вовремя обновляться, да и лень) — придумали микросервисы.
Спустя какоето время поняли что микросервисы решили только проблему разработки и переместили проблему зависимостей на deploy-time. Поэтому придумали изоляцию (докер)
А теперь и докер перестал устраивать. Поэтому с одной стороны появляются языки, где секут плетями за "не такой" код и либы вкомпиливаются в бинарник (сабж). А с другой стороны пилят кубернетес чтобы хоть както управлять контейнерами и их версиями.
А казалось бы — обновляйтесь вовремя и никаких проблем.
Matrix has you...
Re[10]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 09:57
Оценка: :))
Здравствуйте, night beast, Вы писали:

S>>Это тоже способ уйти от необходимости обновлять у себя используемое.

NB>макс, давай ты не будешь фантазировать о том, почему ушли от монолитов.
Ну расскажи ты.

S>>А казалось бы — обновляйтесь вовремя и никаких проблем.

NB>не просто обновляйся, но и заставь всех клиентов обновляться. причем на ту версию, что поставилась в твоей системе.
NB>в реальной жизни это почему-то не работает
Причины я уже назвал
Matrix has you...
Re[8]: Язык Go - слабые стороны
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.02.22 12:51
Оценка: +2
Здравствуйте, Sheridan, Вы писали:

I>>Снова у Шеридана программисты некомпетентные. Может это ты разработку не понимаешь?

S>Может это программисты деплой не понимают? Может это программисты не понимают что на машине может крутиться не только их, безусловно божественный, проект?

Именно потому, что на машине может крутиться чтото еще, стоит использовать, как вариант, all-in-one.

I>>Надо вспомнить, что стоимость труда разработчиков выросла до небес, а стоимость стораджа упала ниже плинтуса, при этом сложность софта растет непрерывно.

S>И поэтому надо писать говно на говне и делать модным говно. Я тебя услышал.

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

S>Когда проепустили пару десятков версий а потом пришол петух с вооот таким клювом и таки клюнул — то да. Очень трудозатратный процесс. Потому что надо в кратчайшие сроки сделать работу, которую надо было делать на протяжении нескольких лет.


Бывает трудозатратно и на одну версию перейти. Что выберешь — либа кидает OutOfMemory на DrawLine, если координаты слишком близко, или загрузка ядер на 5% при параллельной загрузке?
Я выбрал апгрейд на OutOfMemory,т.к. выяснил, что это ошибка — бросается не то исключение. Это стоило примерно один месяц — перебрать версии, идентифицировать проблемы, подебажить, выбрать нужную, протестировать, понаписывать сто заплаток и вкомитать.

I>>Такое, во первых, требует высокой квалификации, во вторых, огромных трудозатрат.

S>Про трудозатраты я уже сказал. Про квалификацию: что, серьёзно настолько всё плохо что программисты разучились читать ченгджлоги и пользоваться поиском? Серьёзно?

К твоему сведению, в ченджлогах пишут зафикшеные баги, а не новые неизвестные.

I>>И что получаем — высококвалифицированый специалист за конскую зп 100% времени занимается мелочовочкой.

S>Это когда петух приходит. А когда вовремя всё — то и затраты около нуля.

Это голословно.

S>Ты придумал высокие затраты и теперь пишешь про то что можно сделать вместо них. И выглядит всё логично и правильно.

S>Только вот высокие затраты ты придумал. В этом проблема.

Наоборот. Я знаю ситуацию с обоих сторон — и как потребитель фремворка, и как разработчик.
Обеспечить обратную совместимость адски тяжело, при этом бОльшая часть времени уходит именно на это.
Правило большого пальца при разработке либы/фремворка — любое измнение/фикс что нибудь да поломает и не существует способа гарантировано это обнаружить.

> Это от некомпетентности/лени. Потому что лень обновить либу, лень посмотреть/почитать чего нового появилось в мире.


См выше про содержимое ченджлога.

S>А вот если обновлять ОС хотя бы раз в месяц — то и проблем не будет. Либо для их решения достаточно обычного приходящего админа.


Голословно. Любая версия либы может сломать обратную совместимость. Нет способа гарантировать отсутствие багов.
Когда проблема в общих/транзитивных зависимостях, не существует способа гарантировано безопасно перекатиться на новую версию. Отвалилась кучка тестов и все решилось небольшим багфиксом — это идеальный случай.
Проблема не в девелоперах, в новых, неизвестных проблемах которые содержатся в новых версиях. Писать без багов пока что только шериданы умеют, и то на словах.
Отредактировано 16.02.2022 12:59 Pauel . Предыдущая версия .
Re[9]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 12:59
Оценка: :))
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, Sheridan, Вы писали:


I>>>Снова у Шеридана программисты некомпетентные. Может это ты разработку не понимаешь?

S>>Может это программисты деплой не понимают? Может это программисты не понимают что на машине может крутиться не только их, безусловно божественный, проект?
I>Именно потому, что на машине может крутиться чтото еще, стоит использовать, как вариант, all-in-one.
Нет. Это должно происходить когда все остальные шаги (такие как обновления библиотек в своём проекте) предприняты и не помогла.


I>>>Надо вспомнить, что стоимость труда разработчиков выросла до небес, а стоимость стораджа упала ниже плинтуса, при этом сложность софта растет непрерывно.

S>>И поэтому надо писать говно на говне и делать модным говно. Я тебя услышал.
I>Вероятно, это ты так видишь свою работу. Только при чем здесь другие программисты, если дело в тебе?
Нет, это я так вижу работу отвечающих мне тут программистов, которые кричат о том что можно делать говно так как юзер просто купит памяти/стораджа и поэтому можно тяпляп.


S>>Когда проепустили пару десятков версий а потом пришол петух с вооот таким клювом и таки клюнул — то да. Очень трудозатратный процесс. Потому что надо в кратчайшие сроки сделать работу, которую надо было делать на протяжении нескольких лет.

I>Бывает трудозатратно и на одну версию перейти. Что выберешь — либа кидает OutOfMemory на DrawLine, если координаты слишком близко, или загрузка ядер на 5% при параллельной загрузке?
Написать баг авторам либы и не переходить пока он не будет починен.


I>>>Такое, во первых, требует высокой квалификации, во вторых, огромных трудозатрат.

S>>Про трудозатраты я уже сказал. Про квалификацию: что, серьёзно настолько всё плохо что программисты разучились читать ченгджлоги и пользоваться поиском? Серьёзно?
I>К твоему сведению, в ченджлогах пишут зафикшеные баги, а не новые неизвестные.
Для них есть багтрекер. Выше только что написал.


I>>>И что получаем — высококвалифицированый специалист за конскую зп 100% времени занимается мелочовочкой.

S>>Это когда петух приходит. А когда вовремя всё — то и затраты около нуля.
I>Это голословно.
Нет, так делают люди, у которых процесс поставлен нормально а не "и так сойдёт".


S>>Ты придумал высокие затраты и теперь пишешь про то что можно сделать вместо них. И выглядит всё логично и правильно.

S>>Только вот высокие затраты ты придумал. В этом проблема.
I>Наоборот. Я знаю ситуацию с обоих сторон — и как потребитель фремворка, и как разработчик.
ВНЕЗАПНО, я тоже. И я знаю, что если обновления планировать и выполнять в запланированное время (хотя бы раз в квартал), то затраты сильно ниже, чем обновляться только тогда когда приходит петух со своим клювом.


>> Это от некомпетентности/лени. Потому что лень обновить либу, лень посмотреть/почитать чего нового появилось в мире.

I>См выше про содержимое ченджлога.
См выше про багтрекер и отложенное обновление.


S>>А вот если обновлять ОС хотя бы раз в месяц — то и проблем не будет. Либо для их решения достаточно обычного приходящего админа.

I>Голословно. Любая версия либы может сломать обратную совместимость. Нет способа гарантировать отсутствие багов.
Я понял, ты теперь прицепился к возможным багам и не отцепишся. Багтрекер, друже, бааагтрееекер.
Matrix has you...
Re[10]: Язык Go - слабые стороны
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.02.22 13:14
Оценка: +2
Здравствуйте, Sheridan, Вы писали:

S>>>Может это программисты деплой не понимают? Может это программисты не понимают что на машине может крутиться не только их, безусловно божественный, проект?

I>>Именно потому, что на машине может крутиться чтото еще, стоит использовать, как вариант, all-in-one.
S>Нет. Это должно происходить когда все остальные шаги (такие как обновления библиотек в своём проекте) предприняты и не помогла.

Алё — на этапе разработки ты и представить не можешь, что куда кому взбредет в голову задеплоить. Как ты собираешься проанализировать тысячу-другую возможных комбинаций?

I>>Вероятно, это ты так видишь свою работу. Только при чем здесь другие программисты, если дело в тебе?

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

Как я вижу, у нас есть Шеридан, который не в курсе что на этапе разработки нет сведений из будущего
1. кто куда чего может задеплоить
2. какие новые неизвестные баги могут быть привнесеные в какую из десятков или сотен зависимостей?

I>>Бывает трудозатратно и на одну версию перейти. Что выберешь — либа кидает OutOfMemory на DrawLine, если координаты слишком близко, или загрузка ядер на 5% при параллельной загрузке?

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

Бинго! И автор либы через месяц сообщает, что он пофиксит, но возможно после того, как выкатит две версии.
А потом заходишь ты в гитхаб либы, и видишь, что эта проблема булькает уже три последних года.

I>>К твоему сведению, в ченджлогах пишут зафикшеные баги, а не новые неизвестные.

S>Для них есть багтрекер. Выше только что написал.

Похоже, что ты не различаешь "новые известные" и "новые неизвестные". Первые — в баклоге. А вот остальные булькают то тут то там и возможно не скоро попадут в баклог.

I>>Это голословно.

S>Нет, так делают люди, у которых процесс поставлен нормально а не "и так сойдёт".

Шериданы что ли?

I>>Наоборот. Я знаю ситуацию с обоих сторон — и как потребитель фремворка, и как разработчик.

S>ВНЕЗАПНО, я тоже. И я знаю, что если обновления планировать и выполнять в запланированное время (хотя бы раз в квартал), то затраты сильно ниже, чем обновляться только тогда когда приходит петух со своим клювом.

Это какие то общие слова вида "хорошее лучше плохого".

I>>Голословно. Любая версия либы может сломать обратную совместимость. Нет способа гарантировать отсутствие багов.

S>Я понял, ты теперь прицепился к возможным багам и не отцепишся. Багтрекер, друже, бааагтрееекер.

Что бы баг попал в багтрекер, его ктото должен обнаружить, идентифицировать, подготовить описание, стабильную последовательность. До того этот баг будет просто булькать тут и там и подламывать разработку.
В каждом проекте либы/фремворка есть кучка вечно живых багов, которые никто не берется фиксать, потому что
1. фикс ломает обратую совместимость
2. есть проблемы более приоритетные
Тем, для кого такой баг стал критичным, можно только посочувствовать.
Re[10]: Опять дваццатьпять
От: smeeld  
Дата: 17.02.22 11:53
Оценка: +2
Здравствуйте, Sheridan, Вы писали:


S>Как по мне — контейнеры нужны в паре случаев всего:

S>1. Для разработки, чтобы не захламлять рабочую машину всевозможными кроликами, постгрями, мускулями итд
S>2. Когда нужно уметь разворачивать мощности при возрастании нагрузки и сворачивать обратно потом (aws тотже)

Есть ещё третий вариант, и именно он обеспечил массовость популярность контейнеров и докера в частности. Это когда сидит макака, ваяет у себя на локалхосте на последней убунту приложение, тащит для этого кучу всякого разношерстного и разноверсионного хлама из самых разных реп, самыми разными пакетными менеджерами, отличными от штатного (pip-ы, npm-ы). Поучается нагроможение и мессиво. Работать будет только у него на локалхосте. А нужно чтоб работало где-то на любом сервере, в закрытом или публичном облаке. Что делать? Завернуть всю эту кучу вместе с загаженным обазом ОС в контейнер, и этот контейнер можно уже запускать где угодно. А то, что вместе с жалкими 10KB творения макаки на каждый сервер тащится ещё 500MB образа ОС, то это макаку не волнует, а провайдеры только за-повышенное потребление ресурсов клиентами для них прибыль.
Контейнеры, их необходимость и популярность-это деградация именно культуры разработки ПО.
Re[5]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 17.02.22 12:35
Оценка: -2
Здравствуйте, Sheridan, Вы писали:

S>ЧСХ, я сразу написал что в гошечке нет ООП и потому надо закапывать. Но пытаются из-за этого закопать меня


Закапывать надо ООП, а не гошечку.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 17.02.22 13:12
Оценка: -2
Здравствуйте, Sheridan, Вы писали:

S>>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?

S>Нет ООП. Выбрасывайте.

ООП? Согласен.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[14]: Язык Go - слабые стороны
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 17.02.22 14:15
Оценка: +2
Здравствуйте, Sheridan, Вы писали:

I>>Вот именно по этому all-in-one предпочтительнее. Кроме того, ты забыл, что вместе с твои софтом будей и другой, у которого могут быть совсем другие предпочтения по версиям.

S>Решение подсказать? Нужно свой софт писать так, чтобы использовал те версии либ, которые есть в дистрибутиве. А если нет такой либы вообще, то в свой репозиторий складывать в виде зависимости к пакету с твоим софтом. А заказчику давать линк на свою репу, которую надо подключить ему к дистрибутиву чтобы потом стандартными средствами установить ваш софт.

В любом случае конфигурация финишного деплоймента на момент разработки неизвестна. И в конце спокйно может оказаться мешанина вида "софтина-плагины-еще-софтина-еще-плагины" имее взаимоисключающие требования.

I>>Неинтересно. Чет заказчик на такое не жаждет соглашаться. Что предложишь, оскорбить его, обмануть, кинуть?

S>Если заказчик платит деньги чтобы ваш софт появился в его дистрибутиве то вам нужно опакетить ваш софт для того дистрибутива.

Заказчик платит не за софт в дистрибутиве, а за решение конкретной его проблемы. all-in-one это хороший вариант исключить проблемы с шаред/транзитивными зависимостями.

S>У меня значит получалось выяснить что и почему не работает (и это включало в себя например сборку подправленного постгреса с дополнительным дебаг-логом). А у настоящих тру-программистов-профессионалов лапки.


Снова тебе программисты мешают.

I>>Похоже, ты уже начал кое что понимать.

S>Я изначально к этому вёл, но у тебя закостенение "шеридан-долбоклюй-непрофессионал" и это мешает тебе воспринимать то что я пишу.

Здесь ровно наоборот- ты по пять раз на сообщении утверждашь, что с прграммистами чтото не то.

I>> Смешно. У тебя похоже экономическая составляющая вообще в рассуждениях не присутствует. С чего ты взял, что влегкую фиксанешь произвольную либу?

S>А я говорил что это будет легко? Я сказал что если либа не поддерживается больше, то выполнить один из этих двух пунктов тупо придётся. Ты будешь с этим спорить? Ты правда программист?

Совсем необязательно, что придется. Это всего лишь риск. Сработает ли он, и во что обойдутся последствия это отдельный разговор. И слишком часто заказчик принимает решение, что ему выгоднее всего игнорировать такие риски.

S>Ну то есть никто на протяжениии нескольких лет не чинит баги означает что либа полностью и адекватно поддерживается автором?

S>Г — лоГика.

Да, бывают такие баги, которые трудно воспроизводятся, или их фикс ломает обратную совместимость. БОлее того — приоритеты в разработке никто не отменял. А в опен-сорсе тебе никто ничего не должен.

I>>У тебя багтрекер это синоним "магия". Ну есть баг в том трекере, только например описан он совсем не так, как тебя проявляется. Что дальше?

S>Опиши так как у тебя проявляется. Надеюсь ты сам понимаешь, что это поможет автору баг исправить.

Это только с детскими багами так, когда сразу ясно где он, и как его воспроизвести. А слишком часто баг в одном месте, а причина — в противоположном, и появляется не сразу, а время от времени, через пару дней и последствия
Соответственно, такие вещи тестами просто так не возьмешь.

S>А как ещо назвать разрабов, которые говорят "если на баг никто не отвечает, то ты неправ что либа не поддерживается автором а наоборот."?


А это норма в опен-сорсе — игнорить баги. Заходишь зарепортать в популярный репозиторий, а там булькают вещи еще с нулевых.

I>>Выглядит как юношеский максимализм. Я и моя команда и без тебя все это делаем.

S>Если вы и так это всё делаете, то какого Иакова вы мне тут мозги полоскаете? Так и напиши "да, мы этим занимаемся, но по мере возможностей". И вопросов не будет. Срач ради срача?

Так я не сужу по себе.


I>>Зато факт в том, что большинство долгоиграющих проектов такой роскоши позволить себе не могут. Причины самые разные. И только ты один обвиняешь разрабов в некометентности. Тут похоже весь мир живет не по твоим правилам

S>Причин две: лень и некомпетентность. Я бы добавил третью: недальновидность. Но программисту бизнес-бабки-платит-я-кодю этого не понять.

Снова программисты виноваты. У тебя похоже риск и инцидент это одно и то же.
Re[9]: Опять дваццатьпять
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.02.22 14:55
Оценка: +2
Здравствуйте, CreatorCray, Вы писали:

НС>>Да. Про контейнеры слышал?

CC>Предлагаешь каждую софтину запихивать в контейнер?
CC>А не дороговато ли выйдет?
Да ну откуда? Контейнеры же из слоёв; как я понял — слои повторно используются.
Поэтому если у тебя на железке 30 контейнеров с аппликухами построены на одном и том же дистрибутиве, и в 20 используется питон, а в 10 — go, то физически на диске будет лежать 1 питон и 1 го.
Если кому-то потребовался питон 2.7, а не 3.1, то появится 1 экземпляр питона 2.7, при этом он никак не помешает тем 20 аппликухам, которым нужен питон 3.1.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[12]: Опять дваццатьпять
От: smeeld  
Дата: 17.02.22 15:05
Оценка: +2
Здравствуйте, Sinclair, Вы писали:

S>Падажжите. Разве там не будет слой незагаженного образа ОС...


Макака одно приложение сваяет на образе одно версии убунту, второе на образе другой версии, третье на образе какой-нибудь sles11 (ибо нужные компоненты только под неё есть). И пропали твои слои
Re[14]: Опять дваццатьпять
От: smeeld  
Дата: 17.02.22 16:53
Оценка: +2
Здравствуйте, Vetal_ca, Вы писали:


V_>Что, у вас нет человека, который Docker image не может написать, сохранив путь макаки на требуемом образе?


У "нас" то есть, но у "нас" и докер юзается только для разработки и тестирования, в проде это исполняется нативно, ибо нефиг лишним мусором систему захламлять. А вот у основной массы потребителей облаков, таких человеков как правло нет.
Re[16]: Опять дваццатьпять
От: Cyberax Марс  
Дата: 17.02.22 22:28
Оценка: +2
Здравствуйте, Sheridan, Вы писали:

V_>>Я за этим не слежу, у всех разные требования к либам. Чтобы все оптимизировать до одного слайса, у нас есть много других, более актуальных дел. Префекционизм любой ценой — зло

S>Да никто перфекционизма то и не просит. Просто планируйте обновления либ и работайте по плану. Это сложно? Ну серьёзно то. Сложно? Невыполнимо?
Учитывая, что дистрибутивы Линукса пишут жопорукие, то да. Ни одному из них доверять вообще нельзя без того, чтобы 10 раз протестировать на staging с постепенным сдвигом трафика на production.

Вот из-за этой реальности и приходится использовать Docker/k8s. Если бы дистрибутивы не писали полные идиоты, то может быть такое и возможно было бы.
Sapienti sat!
Re[10]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 18.02.22 07:50
Оценка: :))
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>Неадекватность современным задачам, плохо работающие идеи.

S>>эммм... Можешь более подробно пжлст?

НС>Могу

Первый же пункт, про наследование которое не имеет отражений в реальном мире. Серьёзно? Что с эволюцией делать будем?
Ну и вообще там всё такое.. "А может быть, а может и не быть". В челом написано умно но ничего существенного.
Ну отсутствуют какието формализованные правила — ну так их и нигде нет.
OO is Xenophobic — вообще фантастический аргумент

В общем, автор очень хочет очернить ООП, явно видно.
Matrix has you...
Re[15]: Опять дваццатьпять
От: Vetal_ca Канада http://vetal.ca
Дата: 18.02.22 14:14
Оценка: +1 -1
Здравствуйте, Sheridan, Вы писали:

S>А что мешает то сделать второй шаг и поддерживать свежие версии либ для проектов? Тогда и докер не нужен то будет.


Это не бизнес требование. Это не всегда нужно, не всегда целесообразно и, часто, вредит. Уже 100 раз написали про эту твою религиозную догму.
В реальной жизни это не применяется, что доказывает, что в реальных проектах тебя нет и самозвание словом "специалист" — абсурдно и смехотворно.

Естественно, разжевывать почему это так — выгодно только когда применяется для неопытных и перспективных людей, которые научатся и будут приносить прибыль. Тратить время на самозванцев — слишком большая честь.
Re[19]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.02.22 12:26
Оценка: +2
Здравствуйте, alex_public, Вы писали:

_>1. Максимально убогая сериализация. Т.е. в том же gRPC используется далеко не идеальный Protocol Buffers (например MessagePack намного эффективнее), но по сравнению со стандартным подходом сериализации из REST, это просто мегашедевр эффективности. )))

Да, хороший поинт. Впрочем, сам REST ничего про сериализацию не говорит. Если state, который мы передаём, хорошо описывается MessagePack, то почему бы не передавать его MessagePack?
Но есть у меня подозрение, что для REST MessagePack мало что даст. Ну, из банального — там есть очевидный, механический способ построить delta-encoding?

_>2. Несимметричные возможности у клиента и сервера. По сути REST — это однонаправленный протокол, в то время как в gRPC после установки соединения сервер может спокойно инициировать отсылку данных клиенту.

Ну, сделать reliable two-way state transfer ещё тяжелее, чем однонаправленный. Я пока что не очень представляю себе задачу, где это было бы уместно с точки зрения архитектуры.
То есть если нас устраивает ненадёжность — то без проблем, можно делать двусторонние каналы. А если нужна надёжность — то рисковать полагаться на клиента, который может лечь...

_>3. Одновременная и убогость и излишество базовых методов REST (которые наследие HTTP). Это наверное самый важных архитектурный пункт, так что поясню подробнее. При использование REST возможны два разных архитектурных подхода:

_>- использование базовых методов в качестве набора команд (API) нашего сервиса. Очевидно, что это подходит только для максимально простеньких задач, целиком укладывающихся в CRUD. И тут чувствуется вся убогость этого набора команд.
Нет конечно. Прямо на этом сайте уже поднимались примеры "сложных задач", где применение RPC "очевидно" эффективнее. Во всех случаях, АФАИР, RPC проиграл.
В рамках CRUD можно представить всё, что угодно. Более того — как раз такое представление и является единственно возможным способом строить распределённые приложения.

_>- использование удобного нетривиального API, реальные команды которого передаются в REST запросах в качестве данных (параметров). Т.е. в этом случае REST уже служит просто очередным сетевым слоем (ниже прикладного), правда достаточно не эффективным. И в этом случае наоборот очевидно излишество базовых методов (в принципе одного POST достаточно для передачи любой прикладной команды).

Это банальный антипаттерн. Никакогог REST тут нету, а есть RPC over HTTP. Его крайним развитием является SOAP, место которого — в аду.

_>В целом меня совсем не удивляет происходящий сейчас переход на gRPC. Меня скорее удивляет почему индустрия не сделала этого намного раньше, потратив десятилетие на REST убожество.

Хм. Пока что не вижу аргументов, кроме какого-то непонимания REST.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[21]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.02.22 15:04
Оценка: +2
Здравствуйте, alex_public, Вы писали:

_>Ну для начала не стоит забывать про то, что в REST у тебя для части данных жёстко определён способ сериализации, причём максимально убогий — urlencoded .

А что у нас в gRPC? Там же внизу тот же HTTP, то есть адресация по прежнему через URL.

_>А далее, даже если мы возьмём MessagePack и HTTP/2 для REST, то это всё равно не позволит нам получить сравнимую эффективность из-за наличия в gRPC такого "типа данных" как stream. Который позволяет отправить множество сообщений в рамках одного запроса (а не проводить весь комплекс установки ip, tcp, http, ssl соединений для каждой маленькой пачки данных).

Не очень понятно, что нам помешает отправить в REST пачку данных в рамках одного запроса или реквеста.
Большинство REST-данных именно так и устроены. Более того — в RPC вы не сможете получить сравнимую с REST эффективность из-за отсутствия conditional get и delta encoding.

_>Эээ что? )

Сказать серверу "данные вплоть до 18.02 у меня уже есть. Если есть что-то новее — то пришлите разницу. Если нет — то достаточно просто 304".

_>Могу привести тебе пример такой задачи. Более того, решаемой прямой сейчас в работающих системах именно таким способом. Например это получение клиентом данных о биржевой торговле (стакан и т.п.) в реальном времени.

Ну, про биржевую торговлю я не специалист. Те клиенты, которыми я пользовался, работают поверх REST. Никакого gRPC. Но я понимаю, что там всё для людей — роботам нужно что-то другое; для чего вебхуки категорически не подойдут.
S>>То есть если нас устраивает ненадёжность — то без проблем, можно делать двусторонние каналы. А если нужна надёжность — то рисковать полагаться на клиента, который может лечь...

_>Типа если клиент с REST ляжет, то это как-то поможет не забыть отреагировать в нужный момент на текущие данные? )))

Типа если REST-клиент ляжет, это никак не повлияет на поведение сервера. А ставить поведение всей системы в зависимость от того, смог ли клиент получить данные немедленно или нет — это путь к катастрофе.

_>Ну вот тебе простейшая (и опять же из вполне реальной практики) задачка. Есть шаговый манипулятор со свободным вращением (но без энкодера). И соответственно у управляющей им схемы есть две команды: move_left() и move_right(). Доступ к этому через RPC очевидно выглядит полностью естественно — прямо как и реальные команды. А вот как по твоему будет выглядеть логичный REST вариант интерфейса? )))

Погодите, у вас где-то за океаном стоит шаговый манипулятор, и вы хотите управлять им через RPC, я правильно понял?
И вас никак-никак не беспокоит то, что вы не имеете представления о его текущем положении?
По-моему, эта схема архитектурно обречена. Чтобы спроектировать нормальное решение, надо начать плясать от задачи, а не от "у нас есть шаговый манипулятор, бутылка виски и два билета на бейсбол. Какой API нам выставить для всего этого?".

_>Ну возможно это мои личные субъективные ощущения (а индустрия возвращается к RPC по каким-то другим причинам), а возможно ты слепой (не видишь аргументов, а они есть). Не знаю.

Мне вот кажется, что индустрия просто так и не перешла на REST. Ну, то есть кто-то продолжал пилить RPC over HTTP, называя его REST — вот эти люди, понятное дело, с большим облегчением переезжают на всякие gRPC и MessagePack.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[25]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.02.22 06:34
Оценка: +1 :)
Здравствуйте, alex_public, Вы писали:

_>Что и? В gPRC это возможно в рамках одного соединения, а в REST нет.

Возможно, хотя и с натяжкой.

_>Так встроено или надо допиливать сервер?

Встроено в протокол. Реализация в сервере — дело добровольное.
_>Ты вот это сейчас серьёзно? ) Ты считаешь, что при запросе коллекции данных никому не придёт в голову указывать в запросе её срез и все будут возвращать только коллекцию целиком? )))
Конечно. Именно так. Давайте посмотрим на ваш "реальный пример" и убедимся, что, к примеру, в https://tinkoff.github.io/investAPI/marketdata/#getlastpricesrequest не предусмотрено никакого способа запросить "изменения цен с прошлого запроса".
Только коллекция целиком. И так всё и везде.

_>Ой, т.е. оказывается уже целая большая область обнаружилась, где REST сливает RPC?


А кто же у нас вот только что писал:
_>

_> Прямо на этом сайте уже поднимались примеры "сложных задач", где применение RPC "очевидно" эффективнее. Во всех случаях, АФАИР, RPC проиграл. В рамках CRUD можно представить всё, что угодно. Более того — как раз такое представление и является единственно возможным способом строить распределённые приложения.

_>И вот уже "неожиданно" оказывается что не "во всех случаях"? )))
Ну так это же как раз несложная задача.

_>А если дальше пойдём разбираться, то вообще окажется что всё наоборот... )))

Не, если мы пойдём дальше разбираться, то как раз и окажется, что RPC уместен там, где не нужна надёжность.

_>Да, кстати, у ребят в указанном примере ещё год назад был REST интерфейс (OpenAPI и всё такое)... )))

Во-первых, почему "был"? Вот он и сейчас есть: https://tinkoff.github.io/invest-openapi/rest/
Во-вторых, он никакой не REST. Это легко понять, посмотрев на список глаголов. У них все операции сделаны через POST — это как раз означает, что архитекторы тинькова — недоучки, и про REST не поняли ничего.
Это подтверждает мою гипотезу — на gRPC переходит не вся индустрия, а те, кто не осилил REST.

_>Нет, как раз требуется гарантированное извещение. И более того, условия ещё более жёсткие — оно требуется в чёткие интервалы времени (чуть позже и эта информация уже бесполезна). Однако сама эта задача априори требует нормальной работоспособности обеих сторон (иначе она просто не может быть решена). Так что вариант с корректной обработкой ситуации умершего клиента смешно даже рассматривать — это априори форс-мажор и потенциальная потеря денег.

Совершенно верно. Поэтому опытные HFT-пользователи размещают свои сервера в том же датацентре, что и биржа, не так ли
Но большинству простых смертных приложений такой роскоши, как сеть с надёжностью в шесть девяток, никто не даст. Поэтому делать вид, что решение, уместное для биржевых спекулянтов, подойдёт и "списку дел на сегодня" — как-то странно.

_>Да я смотрю ты и в этой области специалист.

Не надо быть специалистом, чтобы понять, как это будет работать. Во времена моей юности мышки были "продвинутым оборудованием", и часть народу на полном серьёзе утверждала, что в кваку можно играть и с клавиатурой.
Сетевой режим расставил всё по своим местам — мышевозы вытеснили клавишников.
Впрочем, мы же рассуждаем о воображаемой задаче. Вообразить-то можно всё что угодно — и пользователя, которому безразлично, в какую сторону смотреть. И оборудование, где на веб-камеру денег хватило, а на енкодер (или хотя бы оптопары для детектирования нулевого положения) — нет.
Я вот могу вам поверх вашей воображаемой задачи предложить другую, на которой ваше "очевидное" решение тут же сольётся: я хочу написать робота, который каждый час заходит в этот API, делает снимки с шагом в 15 градусов, и склеивает из них панораму. При этом связь, как обычно, ненадёжная, а каждая панорама должна быть корректной и выровненной по углу — я потом склею из неё time-lapse.

Если посмотреть с точки зрения архитектуры, то у вашей задачи и HFT есть одна общая черта: мы пренебрегаем ненадёжностью сети. В одном случае — потому, что мы готовы переплачивать за надёжность сети. В другом — потому что нам наплевать на результат. Ну, как eventual-to-never consistency: даже если у нас какой-то из визитов на страницу и не запишется в лог — ничего страшного.
_>Оу, видеопоток через REST... Это прямо максимально интересно становится.
А что вас удивляет? Сейчас так делают более-менее все. Вот, пару недель назад жена участвовала в конференции удалённо. Аудиовидеостриминг в реальном времени.
Благодаря тому, что это было сделано через REST, мы смогли записать полное видео — причём на второй день, записали и первый и второй дни.
Потому что вот так вот устроен стриминг — это не fire-and-forget протокол вроде UDP или RTP, а честный HTTP, причём именно в стиле REST. То есть там лежит некоторый ресурс, который мы можем "читать", а кто-то одновременно дописывает новые данные в хвост этого ресурса.
_>Эээ что? ) Весь смысл всего это в том, чтобы человек пейзажики смотрел...
Это вам сейчас так кажется. А потом выяснится, что человеку интересно, на север он смотрит, или на юг. И что его раздражает невозможность прицелиться в нужную сторону из-за лагающей обратной связи и теряющихся prev/next.
Даже формы опросников, сделанные в RPC стиле, раздражают до неимоверности (это те, где нельзя сделать back в браузере, а надо непременно жать кнопку "Назад").

_>Какого ещё архитектурного решения? У тебя есть физическая железка с заданными параметрами (условно двумя кнопками влево/вправо и кнопкой включения камеры, возвращающей поток кадров) и надо приделать к ней удалённый доступ.


_>Архитектуру можешь плодить какую хочешь. Но ты уже показал, что в рамках REST подхода ты можешь только слиться с невнятными оправданиями.
Почему же? я прикручу к этой железке датчик нуля, сделаю процедуру инициализации, и выставлю REST-протокол по управлению положением.

_>Это просто инструмент переходного периода. Когда хочется перейти на быстрые современные решения, но при этом надо поддерживать ещё и клиентов с устаревшими подходами...


Посмотрим, посмотрим.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[26]: Язык Go - слабые стороны
От: alex_public  
Дата: 23.02.22 21:10
Оценка: :))
Здравствуйте, night beast, Вы писали:

_>>И я даже не буду говорить о том, что в реализацию gRPC уже встроена автоматически работающая клиентская балансировка (https://github.com/grpc/grpc/blob/master/doc/load-balancing.md). Предположим что этого всего нет и будем говорить только о серверной балансировке. И так, зачем для неё нужна формализация команд?

NB>я же пример приводил -- команды гет в одну сторону, другие в другую.

Да, прошу прощения, что пропустил это тогда, хотя ещё тогда должен был среагировать. Собственно реакция:

А зачем собственно может понадобится подобная сомнительная балансировка?

NB>как ты это будешь в grpc делать?


Если мне вдруг всё же понадобится реализовывать подобное (крайне сомневаюсь в полезности подобной задачи), то я просто поделю весь сервис на две части (с мутабельными и иммутабельными функциями), разместив их соответственно по разным адресам (т.е. так весь gRPC сервис живёт на одном URL, а так будет на двух).
Re[28]: Язык Go - слабые стороны
От: alex_public  
Дата: 28.02.22 21:45
Оценка: :))
Здравствуйте, Sinclair, Вы писали:

_>>Ой, ну к чему эти глупые фантазии))) Двухсторонний канал банально невозможен в REST.

S>Формально — да, у нас любой запрос в REST является "атомарным". Делаем GET, рассчитываем на хидер Content-Length, вычитываем указанное количество байт, и только потом начинаем разбор.
S>Однако мы можем несколько отступить от строгих требований, и в ответ на GET получить поток структурированных фрагментов, которые мы будем разбирать, не дожидаясь окончания передачи.
S>То есть сервер отдаёт столько данных, сколько у него есть, но не закрывает соединение, а продолжает отправлять "сообщения" по мере поступления. Вот вам и "двусторонний" канал.
S>Более того — в случае внезапного обрыва соединения у клиента есть штатный способ запросить данные не с нуля, а с того байта, на котором произошёл обрыв.
S>Технологии COMET больше лет, чем AJAX. Кстати, не расскажете, как gRPC обрабатывает ситуацию обрыва соединения? Как клиенту получить остаток потока с того места, до которого он дочитал в прошлый раз?

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

_>>Ну т.е. чтобы это заработало, это надо написать руками. Так и в gRPC тоже самое. В чём отличие то по твоему? )))

S>Конечно же в обратной совместимости, negotiation и graceful degradation.

Ты думаешь что использование английский слов как-то улучшает твою аргументацию? На самом деле это только показывает твоё слабое владение профессиональной терминологией.

_>>Если же ты хотел именно банальный срез монотонного массива, то там прямо рядом лежит функция https://tinkoff.github.io/investAPI/marketdata/#getcandlesrequest с классическими параметрами среза from и to, возвращающая классический кусок массива.

S>
S>Нет, я не хотел ни весь массив, ни монотонный срез.
S>Я хотел получить список элементов, изменённых с определённого момента времени. А вы путаете Range с Delta encoding.
S>Рекомендую прочитать RFC 3229, секцию 4.1, до наступления просветления.

Осталось теперь только понять зачем может понадобится подобное в биржевом API. )))

S>Ну, и с чтением документации у вас некоторые проблемы. Метод https://tinkoff.github.io/investAPI/marketdata/#getcandlesrequest возвращает совсем не подмножество данных https://tinkoff.github.io/investAPI/marketdata/#getlastpricesrequest, а вообще другие данные.


Ты похоже меня каким-то теоретиком считаешь))) В то время как у меня там уже давно функционирует очень прибыльная система. Которая кстати недавно переписывалась (т.е. считай уже второе поколение) с Python на Rust и с REST на gRPC (это ортогонально друг другу, просто так совпало по времени), правда с сохранением всех нейросетевых алгоритмов.

S>Что я ожидаю от delta-encoding применительно к https://tinkoff.github.io/investAPI/marketdata/#getlastpricesrequest?

S>Пустого массива, если с момента моего последнего запроса не изменилось ничего. Массива из одного элемента, если с момента моего прошлого запроса прыгнул курс доллара (а остальные инструменты остались неизменными), и так далее. Как видим, в теории RPC позволяет такое сделать — но это потребует сразу заложить всё в сигнатуре методов. Я не могу написать сервер, который реализует только часть задокументированного протокола.

И будет этот метод всю свою жизнь использоваться только с передачей даты предыдущего запроса (от которого вычисляется дельта) в виде null. Потому что эта функция используется только для разового получения актуального среза данных. Для истории есть свои методы. А для оперативных данных свои (поток данных инициируемый сервером и там можешь считать что реально изменения присылаются).

Или быть может ты хочешь тут высказать идею о том, что непрерывный опрос в цикле — это лучше, чем ожидание сообщения об изменение с сервера? )))

_>>И теперь вот вопросик, а как тоже самое канонично описать в REST архитектуре? Просто идеологически тут явно должно быть GET, но при этом передавать массив строк в url как-то крайне печально... )))

S>Да ничего печального тут нет. Можно и список запихать в URL — в данном конкретном случае сколько там у нас реально инструментов торгуется на бирже? Тысяча? Полторы? Нет никаких проблем запихать хоть "все инструменты, кроме одного" напрямую в URL. В том числе и в компактном виде — сначала упаковав список в какой-нибудь околобинарный енкодинг, а потом в base64.
S>Потери производительности на "принудительную текстовость" будут пренебрежимо малы по сравнению с сетевыми задержками.
S>Можно реализовать это вторичными способами — например, сделав метод subscribe, который превращает список интересных нам инструментов в один идентификатор подписки, вслед за которым будут выполняться GET /subscriptions/####.

Вот, ты кажется уже начинаешь понимать как оно должно быть (в тинькоф api как раз подписка реализована, но подписка на поток от сервера!). Теперь ещё возможно дойдёшь до того, что непрерывный опрос в цикле — это очевидное зло и нагрузка впустую, и тогда сумеешь описать нормальную систему (выкинув REST), как раз как у тинькова.

_>>Ааа, ну т.е. "в рамках CRUD можно представить всё, что угодно", если это сложные задачи, а вот простые задачи с помощью CRUD плохо представляются... Понятно, понятно...

S>Да прекрасно они представляются при помощи CRUD. Трудности возникают тогда, когда у нас требования response time начинают доминировать над требованиями consistency.
S>Сложная задача — это когда у нас есть развесистая структура предметной области и развесистая логика на серверной стороне.
S>А мы говорим про задачу, ER-схема которой уместится на одном листочке школьной тетрадки.

Я чувствую такими темпами мы дойдём до того, что REST полезен только в узкой области скучных энтерпрайзных игр в базы данных (и то не факт, с учётом распространения всех этих брокеров сообщений, спарков и т.п.), а в остальных областях бесполезен.

_>>А особенно забавно это всё звучит с учётом того факта, что REST по сути является строгим подмножеством RPC.

S>Нет, не является. В REST введены концепции, которых в RPC просто нет, как класса. Нет понятия safety, нет понятия idempotence.

Вот ты смешной

Показываю на пальцах. Берём gRPC. Создаём там функции в полном соответствие с HTTP командами (GET, POST и т.д.). Явно передаём в качестве аргументов (опциональных конечно же) нужные HTTP заголовки. И договариваемся использовать эти функции по правилам REST. Что мы получим в итоге? Правильно, полноценный REST, реализованный поверх gRPC.

А теперь попробуй реализовать обратное. Т.е. создать произвольный gRPC API с помощью REST.

Теперь понятно кто тут является чьим подмножеством? )

_>>Что-то ты сам себе противоречишь. В предыдущем сообщение же сам признал, что для данной задачи REST не особо подходит.

S>REST не особо подходит для задачи, где нужно передавать простые данные с минимальной задержкой, при этом потерями при передаче можно пренебречь.

Не подходит для этой задачи, и ещё для многих других. )))

S>При этом нужно быть очень аккуратным при проверке этих ограничений. К примеру, рассуждения о минимизации задержки бессмысленны, когда у нас клиент расположен в 200мс от сервера. Там накладные расходы на передачу парсинг HTTP-заголовков запроса в REST-подходе составляют единицы миллисекунд. А вот если мы ставим сервер в соседнюю стойку, то разница между 0мс для gRPC stream и 1ms REST request становится существенной.

S>Осторожность здесь важна для того, чтобы не принимать решение для 200мс ping times на основании рассуждений, которые справедливы для 0мс ping time.

У тебя какое-то представление о современных сетях из прошлого века. У меня даже из дома пинг до тинькова 2 мс (и то это округление скорее всего).

_>>Вообще, когда человек отвечает подобным образом на подобную задачу, то это может означать только одно из двух:

_>>1. Он абсолютно не компетентен как инженер (не понимает слов ТЗ и т.п.)
_>>2. Он вполне компетентен и всё понимает, но честный ответ на задачу демонстрирует его неправоту, поэтому он начинает вилять и менять ТЗ.
S>
S>Считать ТЗ божьим словом, высеченным на скрижалях, могут себе позволить только джуны. Даже миддл начинает задаваться вопросом "а зачем мы это делаем?" и подвергать навязанные решения сомнению.

"зачем" решает бизнес! )

_>>Забавно, у нас в приложение по сути являющемся RPC клиентом (причём не gRPC, а вообще самодельном на базе WebSocket) в браузере, кнопка back отлично работает. Может всё дело в кривизне рук? )))

S>Может быть. В принципе, можно и из SOAP изобразить более-менее приличное решение. Правда, там придётся переизобрести с нуля REST, и получить велосипедную его реализацию, не совместимую ни с чем.

Какое ещё "переизобрести REST"? Просто в браузере есть API для полноценного управления историей (т.е. поведением кнопки back) и всё. И кстати к взаимодействию с сервером это вообще ортогонально на самом деле.

S>Но лучше сразу проектировать приложение с учётом особенностей физической реальности — в частности, ненадёжности коммуникаций и ограниченности полосы пропускания.


У gRPC со всем этим получше будет. )))

_>>Да я уже понял, что ты выставишь требование изменения железа по причине того, что оно плохо сочетается с любимой тобой программной архитектурой. Интересно, как тебя на работу принимали с такими подходами? ) Или ты там при приёме скрывал подобные замашки? )))

S>Меня обычно принимают на работу как раз для того, чтобы я предложил архитектурные решения, дающие нужный результат.
S>А не для того, чтобы "выставить в интернет протокол удалённого управления вертелкой камеры".

Задача звучит так: есть готовая железка и ты должен запрограммировать для неё удалённый доступ. Ты уже продемонстрировал, что не смог справиться с этой задачей.

S>Потому, что далеко не всем очевидно, что надо задумываться не только о единственном позитивном сценарии, типа "один пользователь за бесконечно надёжным каналом с бесконечно большой полосой пропускания отправляет редкие команды", но и над всеми остальными сценариями, которые неизбежно возникнут в практической эксплуатации. Например — что делать, когда один пользователь жмёт "вправо", а другой — "влево".


Такие системы (управления) всегда монопользовательские!

S>Мои знания о том, как проектировать вот такие решения, неожиданно неплохо оплачиваются. Чего и вам желаю


Ты отлично продемонстрировал, что не имеешь ни малейшего представления о об обсуждаемых выше системах.
Re[33]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 07.03.22 07:57
Оценка: +2
Здравствуйте, alex_public, Вы писали:

_>Что-то ты бредишь или не знаю чем читал нашу беседу.


Думаешь, чем больше ты хамишь, тем более убедительным выглядишь?

_> Задача была сформулирована мною предельно просто


Задача твоя была призвана сменить тему. А когда тут никто на это не повелся — ты начал хамить.
Я тебе напомню с чего все началось:

Нюанс в том, что в данный момент основным подходом снова становится RPC.

А теперь поясни, как отличия между RPC и REST вылились в обязательную необходимость какого то аппаратного блока.
Это я уж не говорю о том, что сравнивать REST (идеологию) и gRPC(конкретный фреймворк) — не самое разумное занятие. Сравнивать можно либо HTTP+JSON с gRPC, либо REST с RPC.

_>: есть некая конкретная железка с конкретными "кнопками" и надо приделать (любым программным способом, без каких-либо ограничений на протокол) к ней удалённое управление (чтобы грубо говоря нажимать эти кнопки дистанционно).


Без промежуточного сервера на стороне железки? И этот момент ты, конечно, "забыл" уточнить в начале?

Еще раз, если ты с первого раза не понял:
1) Либо на стороне железки нет возможности выбирать протокол, и тогда пример нерелевантен топику от слова "совсем"
2) Либо протокол таки выбирать мы можем, и тогда твои рассказы про необходимость замены аппаратного блока и особенности разработки железок — грубая попытка подмены темы
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[36]: Язык Go - слабые стороны
От: alex_public  
Дата: 10.03.22 12:33
Оценка: :))
Здравствуйте, Ночной Смотрящий, Вы писали:

_>>Почему невозможно то? Просто делаешь одну функцию Move (по методу POST) с одним булевым параметром (типа право/лево) и всё. Не вижу никаких проблем на самом деле.

НС>Тебе уже вопросы конкретные задали, но ты их поскипал. Что произойдет при обрыве соединения в момент посылки Move? Что произойдет если соединение оборвется в момент возврата отклика от сервера. Что будет если соединение с фиговой латентностью?
НС>А то что ты никаких проблем не видишь мы уже поняли.

Ты уже совсем заболтался что ли? ) У пользователя перед глазами видеопоток с камеры! И он отлично видит, встала она уже в нужную ему позицию или ещё нет. )))
Re[41]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.03.22 17:11
Оценка: +2
Здравствуйте, alex_public, Вы писали:

S>>Нет конечно, это чушь. Именно что понимается хранение состояния сервером.

_>Какая милота. Кстати, не напомнишь, как там звучит 2-ой пункт из требований REST? )))
Вы явно чего-то фундаментального не понимаете про REST. Из того, что RESTful протокол занимается передачей состояния, вовсе не означает, что "всё состояние передаётся в запросе".
Например, когда я пытаюсь выполнить регистрацию на рейс, состояние всех регистраций хранится на сервере.

_>По правильному тут надо читать не "можно обойтись без REST", а "лучше обходиться без REST". )))

Прежде чем давать советы, как и что правильно читать, неплохо было бы разобраться с основами REST.
Ну, возьмём например такой сервис, у которого вообще нет никакого состояния.
Ему на вход подаётся, допустим, небольшая картинка. Скажем, 200*80px. Сервер ставит на неё свой водяной знак.
Можно это трактовать как RPC: "Вот тебе картинка, нарисуй на ней".
А можно — как REST: "Отдай мне картинку с такими параметрами".
Второй подход выигрывает тем, что можно снизить нагрузку от повторных обращений, просто выставив хидер Expiration: Never.

Можно реализовать сервис, который отдаёт десятичные знаки числа Pi. Он тоже полностью stateless.
REST-подход означает, что мы легко привинчиваем к нему Range хидер: сервис просто пропускает сколько-то первых цифр, которые уже есть у клиента, и экономит ему трафик.

_>Как забавно. ) Так что же тебе помешало тогда в предыдущей задачке (которая очевидно является подмножеством этой) применить тот же подход? ) Ну типа очередь заданий виде "поворот налево" и "поворот направо"? )))

А там примерно так и будет; потому что поворот камеры осуществляется не мгновенно. Поэтому когда делается PUT или PATCH, придётся отвечать 202.

_>Т.е. я правильно понимаю, что скажем эта https://www.postgresql.org/docs/current/protocol.html штука является классикой REST? )

Нет. Сам по себе DML является практически классикой REST, потому что как раз и описывает CRUD операции.

_>Так ты интерфейс то опиши... Вот у нас у клиента есть произвольная SQL (+DML+DDL, ну как обычно) строка. Куда её сунуть и как получить результат исполнения в REST стиле...

Вот вы опять подменяете задачу конкретным решением.
Задача у вас в чём? Управлять состоянием БД.
Ну вот был у нас такой доисторический stateful протокол. Разработанный для текстовых терминалов, перед которыми будет сидеть живой пользователь, и набирать все вот эти вот begin transaction.
Если мы поставим такую же задачу перед современным архитектором, то получится протокол ODATA

_>Ну и да, такое будет работать. Но это, как я и говорил изначально, будет дополнительный аппаратный блок и дополнительная прошивка. А с изначальной задачей на заданном железе ты справиться не смог.

Прошивка чего? Там всей доп. стоимости на десять центов.
А вы попробуйте справиться с задачей "написать бота, который склеивает панораму из снимков каждый час, и потом монтирует из этого фильм в mp4".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[43]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.03.22 02:04
Оценка: +2
Здравствуйте, alex_public, Вы писали:

_>Так ты не ответил, какой там 2-ой пункт из требований REST? И как это пересекается с твоим пониманием REST "Именно что понимается хранение состояния сервером"? )))

Я подозреваю, что вы про state.
Ну так нормально и пересекается — я же написал вам пример про рейс.

_>Прикинул вероятность побитового совпадения двух произвольных цветных картинок размером 200*80px и в очередной раз оценил твоё умение проектировать системы. )

А вы каким способом эту вероятность оцениваете? Просто возводите 2 в степень -(16000)?
Тогда да — вам стоит поучиться проектировать системы. Потому что входные данные ни в какой задаче не бывают равновероятными.
Например, если результат запроса стоит в подписи у участника активного форума, то одна и та же картинка может быть запрошена несколько тысяч раз.

_>Да, люди очень хорошо научились раздавать статические файлы.

Почему же статические? Число Pi бесконечно — ни в какой файл его не запишешь.

_>О, т.е. теперь уже оказывается, что можно решить задачку на REST и без дополнительного железа? Или что? )))

Нет, оказывается, что вы по-прежнему не понимаете, как делаются нормальные продуктовые решения.
Датчик нулевого положения привинчивается к камере для того, чтобы на сервере была возможность получать текущее состояние.
Ну, то, которое вы полагали невозможным без дорогостоящего енкодера.
Дальше, поскольку мы понимаем, что камера поворачивается не мгновенно, у нас нет возможности моментально выполнить любой запрос типа "повернись на северо-запад".
Нужен какой-то способ этим управлять — поэтому в протоколе у нас будет два положения: текущее истинное и целевое. Первое меняет сервер, второе — клиент.

В вашем RPC-подходе клиент может успеть запихать в канал 1000 сообщений "направо", особенно если сеть локально взглюкнуло и возникла задержка передачи.
Отменить эти сообщения клиент не может — он будет вынужден ждать, пока камера всё это прокрутит и успокоится, чтобы начать снова управлять положением.
А в REST подходе, даже если я попросил направить на северо-восток, но потом передумал и решил направить на восток, сервер не будет совершать лишних движений.

_>Не слышал про такой протокол, как DML...

https://en.wikipedia.org/wiki/Data_manipulation_language

_>Я правильно понял, что теперь у нас и SQL плохой и устаревший? )))

Для распределённых систем — да. Никто в здравом уме SQL через океан не гоняет, и наружу недоверенным клиентам не выставляет. Вы же не могли проспать переход от client-server к трёхзвенке?

_>Я правильно понял, что этот мертворождённый уродец, является твоим идеалом? )

Нет, там можно ещё улучшить. Но ODATA уже очень даже неплох. Как минимум, лучше большинства RPC поделок.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Язык Go - слабые стороны
От: vaa  
Дата: 06.06.22 06:17
Оценка: -2
Здравствуйте, DarkEld3r, Вы писали:

DE>Здравствуйте, vaa, Вы писали:


vaa>>это "" пустая строка, довольно странное решение.


DE>А что должно быть?


null
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[10]: Язык Go - слабые стороны
От: CreatorCray  
Дата: 16.02.22 20:19
Оценка: 3 (1)
Здравствуйте, Sheridan, Вы писали:

I>>Бывает трудозатратно и на одну версию перейти. Что выберешь — либа кидает OutOfMemory на DrawLine, если координаты слишком близко, или загрузка ядер на 5% при параллельной загрузке?

S>Написать баг авторам либы и не переходить пока он не будет починен.
Вот примерно так мы от буста отказались в своё время. Оказалось что быстрее самим написать то, что нам оттуда надо было чем дождаться когда они починят не сломав что нить другое. Своя имплементация ещё и заметно быстрее получилась.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[13]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.02.22 15:21
Оценка: 2 (1)
Здравствуйте, Reset, Вы писали:

Pzz>>Нет, уменьшилась. Если представить себе проект в виде графа зависемостей, сложность определяется не столько количеством вершин этого графа, сколько количеством связей между ними.


R>Что тебе мешает в монолите поддерживать минимум связей? Более того, разделение на модули придумали еще когда термин микросервисы не существовал (да и сетей почти не было).


R>Микросервисы решают 2 задачи: делают возможным реализацию приложения, которому не хватает ресурсов одной машины (гугл/фейскнига) и делают возможным разработку приложения, которым занимаются разные команды с разными дедлайнами, задачам и приоритетами (тут достаточно договориться о протоколе обмена данными и времени реализации изменений, а также поддержки легаси — остальное в каждой команде решают независимо, а вот запихать это в один монолит — возникнет неразруливаемый срач с выяснением у кого длиннее).

Самое главное, что решают микросервисы — позволяют писать код на чём угодно. В теории, конечно, можно и в монолите всё распилить на отдельные компоненты, изолированные через C-style ABI (ну или там, скажем, построить всё на основе COM, и писать часть кода на VC++, а часть — на Delphi), но на практике вызвать какую-нибудь питоновую либу из Java приложения — недостижимая фантастика.
Не менее весёлой становится задача, скажем, перевести монолит с одной версии платформы на другую. Вот у нас пара миллионов строк кода, которую нам нужно перевести с Java 1.3 на 1.8.
Там в принципе несложно — тут имя пакета подправить, там класс заменить. И таких мест — несколько тысяч. После этого оно начинает хотя бы собираться, но не факт, что работать. Надо тестировать: часть косяков вылезет в продакшн — например потому, что где-то там что-то подгружается динамически, и в новой java оно работает не так.
А переехать мы хотим потому, что есть какой-то новый компонент, и в нём очень бы кстати пришлась новая либа, которая не работает с жавой ниже 1.8.
И вот либо мы тратим N+1 месяцев на тщательное портирование всего монолита на новую версию (причём скорее всего замораживая весь feature development до его окончания), либо пилим новый компонент за 3x времени из-за отсутствия нужной либы.
А всё потому, что запустить в рамках одного процесса две версии джавы мы не в силах.
То же самое — с версиями питона. То же самое — с версиями дотнета.
Более того, у нас там может стрельнуть какая-нибудь наркомания вроде того, что у нас ядро на С++, хочет вызывать плагины через COM, и вот у нас два плагина, один на дотнете 3.5, второй — на 4.5. Каждый думает "ачотакова, ща я загружу CLR inproc, и мы поедем".

Микросервисы позволяют перетаскивать монолит на новую версию по частям.
Ну, а в совсем больших и запущенных случаях мы можем совмещать код на совершенно разных языках. В итоге, нам не нужно искать "специалиста по датамайнингу на дотнете" или "специалиста по видеокодекам на java".
Достаточно искать специалистов по датамайнингу и видеокодекам, а технологический стек пусть тащат какой хотят. Питон — пусть будет питон. Плюсы — пусть будут плюсы. Вам на гошечке комфортнее писать? Ну, давайте на гошечке напишем.

Вот так выглядит современная вавилонская башня, а вовсе не как дружная семья CLR-совместимых языков, которые все компилируются в .Net (как это себе представляла Редмондская молодёжь 22 года тому).
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 11:20
Оценка: +1
Здравствуйте, vsb, Вы писали:

vsb>Лично для меня у Go самая фатальная проблема это система обработки ошибок. Я считаю, что исключения в сто раз лучше, чем то, что сделали в Go.


Подход, принятый в Go, превращает обработку ошибок из сложной вещи в трудную вещь. На мой взгляд, это — достоинство.
Re[5]: Язык Go - слабые стороны
От: vsb Казахстан  
Дата: 15.02.22 11:53
Оценка: :)
Здравствуйте, kaa.python, Вы писали:

vsb>>Подход с явной обработкой выходит боком практически всегда. Ошибку либо тупо прокидывают вверх, теряя стектрейс, либо игнорируют, либо пытаются обрабатывать на месте (очень часто с багами, т.к. этот сценарий никогда не тестируют).


KP>В случае с Го ошибка будет обработана на месте, т.к. линтеры. Любой нормальный Го проект невероятно густо ими обвешен. В худшем случае это будет запись в логе в духе "не шмогла я", но это даст возможность легко проанализировать ситуацию и понять как поправить. Да и то такой худший случай как-то еще должен пройти ревью и попасть в мастер, что не так что бы и просто. Я бы сказал что подход Go в подавляющем большинстве случаев приводит к рабочей обработке ошибок.


Ты говоришь про какие-то мифические линтеры, мастеры, ревью. Я верю, что у тебя так. Я говорю про х*кс-х*кс и в продакшн, который я вижу вокруг. С ревью можно и на С писать, наверное. Поэтому у меня точка зрения на это специфическая.

KP>Я обычно пишу на C++ и Go. Ошибки в C++ из за отсутствия обработки исключений обычно более болезненные чем излишне примитивная обработка ошибки в Го. Просто наблюдения


С++ специфический язык. В нём вечно заморачиваются всякими exception-safe кодами. На Java про такое 99% и не слышала. Просто пишешь и пишешь. Shared state особо нет. Поэтому никаких проблем от отсутствия обработки исключения тут нет. В любом фреймворке сверху крутится try-catch, который отдаст 500 ошибку и в лог нагадит, что в общем-то вполне адекватно для обработки по умолчанию.
Re[5]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 16.02.22 07:47
Оценка: :)
Здравствуйте, Anton Batenev, Вы писали:

S>> AB>А зачем? Для ниши go монобинарь удобнее (в деплое и поддержке).

S>> Насрать вообщето деплою и поддержке.
AB>Для ниши go — нет. Но мне сложно будет тебе объяснить почему, т.к. у тебя отсутствует релевантный опыт.
У меня всё отсутствует, да. Даже компустера нет, с калькулятора пишу, ага.
Писал я на этом вашем го. Деплою то что на го написано. Один из моих экспортеров prometheus community себе забрало. На go.
Но у меня опыта нет, иначе быть не может.


S>> Более того, предпочту нормальные бинари, не приносящие всё-внутри-себя-с-собой и страдающие от этого ожирением.

AB>Для обсуждаемого языка и типичных условий работы go-приложений в подавляющем большинстве случаев монобинари — это и есть "нормальные".
Ну, такое редко бывает чтобы среда както накладывала ограничения на язык на котором написаны приложения. В современном мире даже для ардуин местами на питоне пишут. Но это не значит что так делать правильно и нужно.
Монобинари это такое себе, от безысходности. Когда не хватает опыта/знаний/желания уметь в зависимости. Когда в команде раздрай и разные участки проекта требуют разных версий одной и той же библиотеки. Отсюда и докеры с кубами выросли и гошечка.
Matrix has you...
Re[4]: Язык Go - слабые стороны
От: smeeld  
Дата: 16.02.22 08:06
Оценка: +1
Здравствуйте, vsb, Вы писали:

vsb>Ошибку либо тупо прокидывают вверх, теряя стектрейс


Никакой стектрейс никуда не теряется он хранится в ошибке. С стектрейсами в гошке как раз всё ok
Re[7]: Язык Go - слабые стороны
От: night beast СССР  
Дата: 16.02.22 08:22
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

CC>Ещё раз, при деплое куда лучше всё что надо иметь в себе, и ни от кого не зависеть.


или как альтернатива разворачивать свой докер образ
Re[11]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 10:41
Оценка: -1
Здравствуйте, Sheridan, Вы писали:

S>Странно бвло бы слышать о программиста что он не понимает что для строки нужен кусочек памяти где она хранится. Более того, человек, который хотя бы немного интересуется чуть больше, не понимал хотя бы на начальном уровне как по идее должна храниться строка. Это простая задача на декомпозицию.


Ну при всем при том, большинство программистов вряд ли понимают, как устроен внутри float. Чем строка-то хуже?

Строка — это очень фундаментальный тип данных, значение которой очень удобно считать тем словом (возможно неприличным), которое туда записано, а не указателем на какой-то кусок памяти, в которую можно и сбоку подлезть, и прямо перед носом изменить значение некоторых байт.

Возможность относиться к строкам, как к указателю на память, очень, конечно, помогает немного локально оптимизировать кодогенерацию, но очень при том усложняет понимание кода в целом. Который, если уж он работает со строками, и, например, синтаксически их разбирает, скорее всего и без того сложный.
Re[14]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 11:10
Оценка: :)
Здравствуйте, Pzz, Вы писали:

Pzz>В результате, они сломали мой любимий плагин hg-git, который превращает mercurial в git, но с пользовательским интерфейсом mercurial'а, гораздо более гуманным, чем у git'а, и сломали проприетериальный (я правильно сказал?) драйвер от принтеров kyocera, который теперь не печатает, а о чем-то вечно думает, на 100% загружая доставшееся ему ядро процессора).


Как и следовало ожидать:
1. Довольно странная тулза, которой пользуются два с половиной человека и ты.
2. Проприетарный драйвер, у которого нет исходников и на обновление которого забили программисты этого драйвера.
Matrix has you...
Re[21]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 14:36
Оценка: :)
Здравствуйте, Sheridan, Вы писали:

Pzz>>Поменяли системную инсталляцию Питона, и старые скрипты на Питоне загнулись.

S>Очевидно что не все.

Ну внешний, киосеровский, скрипт загнулся. hg-git, который приходит, как стандартный федоровский пакет, тоже загнулся. Так что, скорее все, чем не все.
Re[12]: Язык Go - слабые стороны
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.02.22 15:24
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

I>> Алё — на этапе разработки ты и представить не можешь, что куда кому взбредет в голову задеплоить. Как ты собираешься проанализировать тысячу-другую возможных комбинаций?

S>Достаточно нескольких (2-5) популярных дистрибутивов поддерживать. Всё остальное — "мы не поддерживаем данный дистрибутив но готовы помочь за допплату"

Ты сам то понял что сказал? Вот именно по этому all-in-one предпочтительнее. Кроме того, ты забыл, что вместе с твои софтом будей и другой, у которого могут быть совсем другие предпочтения по версиям.

I>>1. кто куда чего может задеплоить

S>В рекомендованные вами дистрибутивы. Почемуто считается нормальным указываать версию мака и виндов для которых приложение работает. Но с линупсом надо обязательно вообще всё!!11.

Неинтересно. Чет заказчик на такое не жаждет соглашаться. Что предложишь, оскорбить его, обмануть, кинуть?

I>>2. какие новые неизвестные баги могут быть привнесеные в какую из десятков или сотен зависимостей?

S>Вот это и есть — "закостеневание". Это когда "нетнет, обновляться нинада, уже и так хорошо, а вдруг там монстры??7"

А ты похоже не понял, что такое новый неизвестный баг. Для тебя это может быть известная проблема, типа "чтото не работает", а вот конкретные причины далеко не факт, что сможешь сам выяснить. И соответсвенно баг у тебя булькает, но в багтрекер он не попадёт.

I>>Бинго! И автор либы через месяц сообщает, что он пофиксит, но возможно после того, как выкатит две версии.

S>Автор общается, отвечает — ждём. А пока работаем со старой версией.

Похоже, ты уже начал кое что понимать.

I>>А потом заходишь ты в гитхаб либы, и видишь, что эта проблема булькает уже три последних года.

S>Два варианта:
S>1. Сменить библиотеку.

При смене библиотеки тебе гарантирован длиный-длинный хвост из багов, и сама эта активность мягко говоря не быстрая. И далеко не факт, что есть другая библиотека, которая подходит под твои цели.

S>2. Форкнуть и пофиксить.


Смешно. У тебя похоже экономическая составляющая вообще в рассуждениях не присутствует. С чего ты взял, что влегкую фиксанешь произвольную либу?

S>Почему так? Потому что де-факто эта либа уже не поддерживается никем.


Наоборот.

I>>Похоже, что ты не различаешь "новые известные" и "новые неизвестные". Первые — в баклоге. А вот остальные булькают то тут то там и возможно не скоро попадут в баклог.

S>Я про новые неизвестные и пишу. Нашол такой — в багтрекер его.

У тебя багтрекер это синоним "магия". Ну есть баг в том трекере, только например описан он совсем не так, как тебя проявляется. Что дальше?

I>>Это какие то общие слова вида "хорошее лучше плохого".

S>В противовес твоему "старое лучше свежего" звучат более логично, не находишь ли?

У тебя в основном "разрабы некомпетентны" и "хорошее лучше плохого". "старое лучше свежего" — это ты забрало поднять забыл. Смотри мой пример про OutOfMemory.

I>>Что бы баг попал в багтрекер, его ктото должен обнаружить, идентифицировать, подготовить описание, стабильную последовательность. До того этот баг будет просто булькать тут и там и подламывать разработку.

S>Ты и твоя команда это будут делать. Ты и твоя команда. В рабочем порядке во время запланированного обновления используемых либ на этапе тестирования свежего перед принятием решения "обновляться можно уже сейчас или ещо подождать?".

Выглядит как юношеский максимализм. Я и моя команда и без тебя все это делаем. Зато факт в том, что большинство долгоиграющих проектов такой роскоши позволить себе не могут. Причины самые разные. И только ты один обвиняешь разрабов в некометентности. Тут похоже весь мир живет не по твоим правилам
Отредактировано 16.02.2022 15:30 Pauel . Предыдущая версия . Еще …
Отредактировано 16.02.2022 15:27 Pauel . Предыдущая версия .
Re[11]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 17.02.22 12:37
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

CC>>>А не дороговато ли выйдет?

НС>>Нет. Для того контейнеры и придумали, чтобы не было дороговато.
S>А ты считал стоимость сопровождения?

Кого, контейнеров? И что подразумевается под их сопровождением?

S> Стоимость специалиста по кубам, нопример?


При чем тут куб? Куб решает намного больше задач, чем контейнеры.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 17.02.22 13:12
Оценка: +1
Здравствуйте, vsb, Вы писали:

vsb>Никогда у меня не было проблем с исключениями.


Это потому что у тебя не С++, где исключения настолько опасная штука, что в некоторых проектах их тупо запрещают. Ну а потом эти проблемы С++ плюсовики переносят на исключения, не язык же виноват, право.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[13]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 17.02.22 14:37
Оценка: :)
Здравствуйте, Ночной Смотрящий, Вы писали:

S>> Да куча экспортеров статистики под prometheus/influxdb на ём, да и вообще почти весь этот стек мониторинга на ём.


НС>Т.е. "aws тотже".

Не распарсил что ты имеешь в виду.
Matrix has you...
Re[10]: Опять дваццатьпять
От: smeeld  
Дата: 17.02.22 15:10
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>Да ну откуда? Контейнеры же из слоёв; как я понял — слои повторно используются.

S>Поэтому если у тебя на железке 30 контейнеров с аппликухами построены на одном и том же дистрибутиве, и в 20 используется питон, а в 10 — go, то физически на диске будет лежать 1 питон и 1 го.
S>Если кому-то потребовался питон 2.7, а не 3.1, то появится 1 экземпляр питона 2.7, при этом он никак не помешает тем 20 аппликухам, которым нужен питон 3.1.

Ты сам это тестил, проверял, что так оно и есть? Учитывая, что докер-это жуткое глюкалово, не удивлюсь, если это только заявлено, но так это не работает должным образом. Вот у меня на локалхосте это не работает: собираемые локально, подтягиваемые извне контейнеры, все из которых создаются на основе одного и того же базового образа из центрального registry, в течении недели-двух отжирают несколько десятков GB. Регулярно приходится делать rm -fr /var/lib/docker
Re[10]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 17.02.22 17:20
Оценка: :)
Здравствуйте, Vetal_ca, Вы писали:

S>>Если бизнес скажет тебе вставить затычку в пятую точку — так и сделаешь?

S>>Бизнес нанимает профессионала чтобы решать задачи бизнеса но потом не слушает профессионала и требует вырастить руки на жопе. Это так работает?
V_>Это значит, что неопытный рекрутер нанял бесконечно отсталого, бывшего профессионала (?), который даже не понимает, что от него хотят.
А опытный рекрутер наймёт сразу того у кого руки из жопы и кто готов мужеложествовать если БИЗНЕСУ НАДО?
Matrix has you...
Re[17]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 17.02.22 23:10
Оценка: :)
Здравствуйте, Cyberax, Вы писали:


V_>>>Я за этим не слежу, у всех разные требования к либам. Чтобы все оптимизировать до одного слайса, у нас есть много других, более актуальных дел. Префекционизм любой ценой — зло

S>>Да никто перфекционизма то и не просит. Просто планируйте обновления либ и работайте по плану. Это сложно? Ну серьёзно то. Сложно? Невыполнимо?
C>Учитывая, что дистрибутивы Линукса пишут жопорукие, то да.
Кто бы сомневался что виноватыми останутся дистрибутивы линупс, Шеридан, тайное правительство, но только не сам.


C>Ни одному из них доверять вообще нельзя без того, чтобы 10 раз протестировать на staging с постепенным сдвигом трафика на production.

А где не так? Ну?
Например, твой код. Он вообще без стейжа и тестов работает?


C>Вот из-за этой реальности и приходится использовать Docker/k8s. Если бы дистрибутивы не писали полные идиоты, то может быть такое и возможно было бы.

Да-да. Идиоты пишут дистрибутивы. Я это уже понял. Ой, постой, они же и Docker/k8s написали. И в идиотские дистрибутивы включили! 0_0
Или это не те идиоты? А какие тогда — те?
Я правильно понимаю что идиоты у тебя все вокруг кроме тебя и авторов софта который тебе нравится?
Matrix has you...
Re[13]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 17.02.22 23:14
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

S>>>Контейнеры, их необходимость и популярность-это деградация именно культуры разработки ПО.

S>>Именно про это я и пишу. Против этого я тут и выступаю.
CC>Ты ещё наксколько я помню и против monobinary выступал, которые не имеют никакого отношения к контейнерам.
Монолит всё носит в себе. Что с одной стороны конечно удобно (можно тяп-ляп и отдать готовое)
А с другой стороны забодаешься потом эту помойку обновлять. Вместо обновления одной либы с уязвимостью на новую версию (и таким образом зачинив весь использующий её софт) придётся надеяться что автор монолита обновит таки свой монолит и можно будет его безбоязненно запускать.
Ну и конечно же для подобных авторов монолитов совершенно наплевать на диски заказчиков/потребителей. Ну типа не лох чай, ещо один диск купит.

CC>И да, кусок говна, который из себя распаковывает кучу хлама в tmp и оттуда втихаря юзает — не monobinary

Абсолютно верно.
Matrix has you...
Re[18]: Опять дваццатьпять
От: Cyberax Марс  
Дата: 18.02.22 03:29
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

S>>>Да никто перфекционизма то и не просит. Просто планируйте обновления либ и работайте по плану. Это сложно? Ну серьёзно то. Сложно? Невыполнимо?

C>>Учитывая, что дистрибутивы Линукса пишут жопорукие, то да.
S>Кто бы сомневался что виноватыми останутся дистрибутивы линупс, Шеридан, тайное правительство, но только не сам.
Именно так. Виноваты те, кто не заботиться о надёжности.

C>>Ни одному из них доверять вообще нельзя без того, чтобы 10 раз протестировать на staging с постепенным сдвигом трафика на production.

S>А где не так? Ну?
S>Например, твой код. Он вообще без стейжа и тестов работает?
Он написан так, что не ломает соседний код. А вот дистропейсатели такого не осилили. В результате обновление какого-нибудь TeX может сломать Java (реальная история, кстати).

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

CI/CD? Неее... не слышали. Херак, херак и заливаем пакеты на зеркала!

C>>Вот из-за этой реальности и приходится использовать Docker/k8s. Если бы дистрибутивы не писали полные идиоты, то может быть такое и возможно было бы.

S>Да-да. Идиоты пишут дистрибутивы. Я это уже понял. Ой, постой, они же и Docker/k8s написали. И в идиотские дистрибутивы включили! 0_0
Нет, Докер написали реалисты, которые вынуждены были жить с ...творением... дистропейсателей. А k8s написал Гугл по результатам борьбы с сотнями тысяч серверов.

S>Или это не те идиоты? А какие тогда — те?

Не идиоты.

S>Я правильно понимаю что идиоты у тебя все вокруг кроме тебя и авторов софта который тебе нравится?

Кроме тех, кто заботится о надёжности софта. А не работе "на авось". Если в моей инфраструктуре что-то работает, то оно будет работать всегда и надёжно.

Я могу взять коммит трёхлетней давности, достать его из репозитория, и собрать изображения, которые будут до бита идентичны тем, что были 3 года назад. И потом повторить любые вычисления для сравнения результатов между новым и старым кодом, например. Мы таким образом находили ошибки в оптимизациях gcc.
Sapienti sat!
Re[9]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 06:41
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

НС>>Ему это все уже объясняли. На что был получен ответ, что бизнес должен идти в жопу со своими потребностями пока программисты обновляют все либы в проекте. Так что не про то ты рассказываешь.

S>Если бизнес скажет тебе вставить затычку в пятую точку — так и сделаешь?

Занялся демагогией?

S>Бизнес нанимает профессионала чтобы решать задачи бизнеса но потом не слушает профессионала


С чего ты взял что ты профессионал? Сам так решил? То что ты тут пишешь — уровень любителя.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[11]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 07:21
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

S>>>Бизнес нанимает профессионала чтобы решать задачи бизнеса но потом не слушает профессионала

НС>>С чего ты взял что ты профессионал? Сам так решил? То что ты тут пишешь — уровень любителя.
S>Я тут при чом?

При том что рекомендации плевать на задачи бизнеса и постоянно обновлять либы идут исключительно от тебя. Профессионал такого бизнесу навязывать не будет.
Я тебе больше скажу, бизнес часто такое и не навязывает. Бизнес просто просит реализовать набор фич. А решение по тому когда мы либы обновляем, а когда занимаемся другими задачами принимают разработчики. И инициатива тормознуть обновление почти всегда исходит от них. Бизнес скорее наоборот, прибежит с найденной уязвимостью и попросит что то обновить.
Ты же в очередной раз занялся какими то своими безумными фантазиями, не имеющими отношения к реальности, и активно сражаешься с ветряными мельницами.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[16]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 18.02.22 08:30
Оценка: +1
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Вот есть у нас модуль обучения, написан на Питоне (модуль это не dll, это набор скриптов, общающихся с внешним миром через консоль и файлы и запускающий при этом десяток разных приложений), и команда, умеющая в машинное обучение и Питон. Рядом другая команда, умеющая в CV и C++, и модуль CV на C++. И третья команда, умеющая в облачный бэк и их Платформа, написанная на дотнете или жабе. И еще пяток сторонних сервисов, написанных на Go, С++, Питоне, жаве.

НС>Теперь это все нам нужно собрать в работающий продукт, причем в разумные сроки. Твои действия?
У вас выбора нет, у вас уже есть куча мала и её хоть както надо запустить.
Я же про ситуации когда выбор (ещё) есть.
Matrix has you...
Re[13]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 18.02.22 08:49
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

S>>>Цитирую: "В Go есть ООП, причём достаточно крутой за счёт структурной типизации."

C>>Есть. Нет "наследования классов" и мастурбирования на "контроль доступа".
S>Ну, такой себе ООП. Самую мякотку и выкинули.
Наследование классов — оказалось противопоказано и в классических ООП, так как создаёт слишком сильную связность. А детальный контроль доступа просто не нужен, достаточно разделения между публичным интерфейсом и приватным для пакета.
Sapienti sat!
Re[17]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 08:59
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

НС>>Теперь это все нам нужно собрать в работающий продукт, причем в разумные сроки. Твои действия?

S>У вас выбора нет, у вас уже есть куча мала и её хоть както надо запустить.

Это не только у нас, это чуть более чем во всех крупных проектах так.

S>Я же про ситуации когда выбор (ещё) есть.


Не увидел этого в твоем заявлении:

Ну как бы, на секундочку, это минус. Негоже в рамках одного проекта держать зоопарк подпроектов на разных языках.

... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[11]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 11:00
Оценка: :)
Здравствуйте, Sheridan, Вы писали:

НС>>Могу

S>Первый же пункт, про наследование которое не имеет отражений в реальном мире. Серьёзно?

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

S>Что с эволюцией делать будем?


Ты часто автоматизируешь что то, связанное с эволюцией живых организмов? Мне вот ни разу не джоводилось.

S>OO is Xenophobic — вообще фантастический аргумент


И что с ним не так? Здравый аргумент, и это именно то что мы наблюдаем на практике. Чуть менее чем все кроссплатформенные интерфейсы — не ОО, начиная от dll и заканчивая новомодными REST и gRPC. А все попытки сделать ОО (СОМ, SOAP, CORBA) — в итоге померли или в процессе.

S>В общем, автор очень хочет очернить ООП, явно видно.


Не, скорее ты принял ООП за аксиому и не способен сползти с этих рельс.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[11]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 11:05
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

S>Цитирую: "В Go есть ООП, причём достаточно крутой за счёт структурной типизации."


Верно. Тебе просто надо понять, что ООП вовсе не ограничивается классической реализацией в языках типа С++ или Дельфи. В JS, к примеру, тоже ОО есть.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[19]: Опять дваццатьпять
От: Vetal_ca Канада http://vetal.ca
Дата: 18.02.22 12:37
Оценка: :)
Здравствуйте, Sheridan, Вы писали:

S>Расскажу только, что у него astra linux smolensk.


Ну вот ты и у своего пересыхающего озерца, закрытой экологической ниши. Главное, чтобы второй такой отставший от развития не пришел и не начался смертный бой за последний ресурс.
Re[8]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 13:50
Оценка: +1
Здравствуйте, Константин Б., Вы писали:

КБ>Такой же "факт" как и "теряется стектрейс" или "пытаются обрабатывать ошибки на месте (с багами)". Собственно ты даже не скрываешь что говоришь о каких-то других языках и проецируешь проблемы этих языков на го.


Приведи кошерный пример кодов возврата на го с парой-тройкой уровней вложенности, обсудим.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[15]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 18.02.22 18:36
Оценка: :)
Здравствуйте, Sheridan, Вы писали:

C>>Наследование классов — оказалось противопоказано и в классических ООП, так как создаёт слишком сильную связность. А детальный контроль доступа просто не нужен, достаточно разделения между публичным интерфейсом и приватным для пакета.

S>Чем protected то не угодил?
Тем, что оно работает только для наследования классов (реализаций). А это уже однозначное зло.
Sapienti sat!
Re[5]: Язык Go - слабые стороны
От: bitboi Голландия  
Дата: 21.02.22 06:56
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>Почему же? Оно "набирает" номер другой стороны.


ну типа мы набираем номер другой стороны и ждем когда нас соединят, получается что dial это только первая часть процесса
плюс у меня еще ассоциации с signalling в VoIP появляются

C>Это практически единственный пример, где оно не работает. Но если очень хочется — берём и вызываем clock_gettime напрямую.


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

C>Ну они могли бы ввести тип "type Path string", но смысл? Массив байт неудобен из-за того, что нельзя гарантировать иммутабельность.


жить с этим конечно можно, но опять же, вот есть у меня ф-я, которая преобразует путь в каноничный (в Go такой ф-ии почему-то нет, но представим что есть)
так вот, ф-я получает на вход путь в виде строки? при этом она не делает то что можно подумать (преобразует строку используя только входные данные), она лезет в ФС и делает что-то сложное, использует системный вызов, который может делать какой-то ввод-вывод и тд, но ф-я выглядит так, словно она просто преобразует строку

в общем, мое мнение — strong types это хорошо, в плюсах к этому уже давно пришли, там уже принято вводить именованные типы вместо фундаментальных, там где это имеет смысл
Re[18]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 21.02.22 09:57
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

_>>Нюанс в том, что в данный момент основным подходом снова становится RPC. Правда теперь это уже RPC поверх HTTP/2 (gRPC), но это не суть (тут https играет роль не сильно большую, чем tcp, ip, ethernet). )))

S>Интересно, с чем это связано. Что именно компенсирует недостатки RPC по сравнению с REST?
Конкретно с gRPC — полноценная двусторонняя коммуникация.

Ну и в целом, REST весьма неудобен как подход, в целом. Слишком много гибкости.
Sapienti sat!
Re[13]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.02.22 13:05
Оценка: :)
Здравствуйте, Sheridan, Вы писали:

S>man онтогенез

No manual entry for онтогенез

Надо доставить какой-то пакет?
Re[22]: Язык Go - слабые стороны
От: alex_public  
Дата: 21.02.22 16:32
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

_>>Ну для начала не стоит забывать про то, что в REST у тебя для части данных жёстко определён способ сериализации, причём максимально убогий — urlencoded .

S>А что у нас в gRPC? Там же внизу тот же HTTP, то есть адресация по прежнему через URL.

Tак там будет один URL (скорее всего просто в виде домена) даже для всех функций, не говоря уже о всех ресурсах. )))

_>>А далее, даже если мы возьмём MessagePack и HTTP/2 для REST, то это всё равно не позволит нам получить сравнимую эффективность из-за наличия в gRPC такого "типа данных" как stream. Который позволяет отправить множество сообщений в рамках одного запроса (а не проводить весь комплекс установки ip, tcp, http, ssl соединений для каждой маленькой пачки данных).

S>Не очень понятно, что нам помешает отправить в REST пачку данных в рамках одного запроса или реквеста.

То, что на момент отправки первого сообщения, данных для следующих сообщений пока ещё нет.

S>Большинство REST-данных именно так и устроены. Более того — в RPC вы не сможете получить сравнимую с REST эффективность из-за отсутствия conditional get и delta encoding.


))) Обычно на эту тему рисуют такие картинки (кстати, там кажется тестировали даже на вашем родном .net'е) с разницей раз в 10:
  Диаграммка тестов


_>>Эээ что? )

S>Сказать серверу "данные вплоть до 18.02 у меня уже есть. Если есть что-то новее — то пришлите разницу. Если нет — то достаточно просто 304".

И что мешает сделать тоже самое с gRPC? )

_>>Могу привести тебе пример такой задачи. Более того, решаемой прямой сейчас в работающих системах именно таким способом. Например это получение клиентом данных о биржевой торговле (стакан и т.п.) в реальном времени.

S>Ну, про биржевую торговлю я не специалист. Те клиенты, которыми я пользовался, работают поверх REST. Никакого gRPC. Но я понимаю, что там всё для людей — роботам нужно что-то другое; для чего вебхуки категорически не подойдут.

Ну вот https://tinkoff.github.io/investAPI/ тебе реальный пример. )

S>>>То есть если нас устраивает ненадёжность — то без проблем, можно делать двусторонние каналы. А если нужна надёжность — то рисковать полагаться на клиента, который может лечь...

_>>Типа если клиент с REST ляжет, то это как-то поможет не забыть отреагировать в нужный момент на текущие данные? )))
S>Типа если REST-клиент ляжет, это никак не повлияет на поведение сервера. А ставить поведение всей системы в зависимость от того, смог ли клиент получить данные немедленно или нет — это путь к катастрофе.

Ну так а если это условие задачи (в биржевой торговле так и есть), то что тогда? )))

_>>Ну вот тебе простейшая (и опять же из вполне реальной практики) задачка. Есть шаговый манипулятор со свободным вращением (но без энкодера). И соответственно у управляющей им схемы есть две команды: move_left() и move_right(). Доступ к этому через RPC очевидно выглядит полностью естественно — прямо как и реальные команды. А вот как по твоему будет выглядеть логичный REST вариант интерфейса? )))

S>Погодите, у вас где-то за океаном стоит шаговый манипулятор, и вы хотите управлять им через RPC, я правильно понял?

Ну да)

S>И вас никак-никак не беспокоит то, что вы не имеете представления о его текущем положении?


Я же писал, что экондера нет. Да и не нужен он, т.к. на устройстве камера, поток от которой параллельно тоже идёт к пользователю (и тот глазами по картинке легко определяет нужное ему положение). Кстати, тут подумалось, что в рамках gRPC можно и поток данных от камеры сделать не параллельным где-то рядом, а прямо в рамках того же API (как stream кадров от сервера).

S>По-моему, эта схема архитектурно обречена. Чтобы спроектировать нормальное решение, надо начать плясать от задачи, а не от "у нас есть шаговый манипулятор, бутылка виски и два билета на бейсбол. Какой API нам выставить для всего этого?".


Я правильно понимаю, что данный поток слов надо воспринимать как слив по данному примеру? )))

_>>Ну возможно это мои личные субъективные ощущения (а индустрия возвращается к RPC по каким-то другим причинам), а возможно ты слепой (не видишь аргументов, а они есть). Не знаю.

S>Мне вот кажется, что индустрия просто так и не перешла на REST. Ну, то есть кто-то продолжал пилить RPC over HTTP, называя его REST — вот эти люди, понятное дело, с большим облегчением переезжают на всякие gRPC и MessagePack.

С учётом наличия такой https://github.com/grpc-ecosystem/grpc-gateway штуки, мне кажется что выбор о базовой реализации должен быть однозначным. ))) Хотя конечно же по настоящему модные возможности (типа двунаправленных потоков) там отсутствуют — ну это цена за желание поддержки легаси (REST).
Re[23]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.02.22 02:17
Оценка: +1
Здравствуйте, alex_public, Вы писали:

_>То, что на момент отправки первого сообщения, данных для следующих сообщений пока ещё нет.

И?

_>))) Обычно на эту тему рисуют такие картинки (кстати, там кажется тестировали даже на вашем родном .net'е) с разницей раз в 10:

_>
  Диаграммка тестов
_>Image: 3526a19782d163fb2d4b39b0ed2fcd3b.png

Ну, правильной подгонкой микробенчмарков можно получить произвольный результат.

_>И что мешает сделать тоже самое с gRPC? )

То, что в него не встроены такие вещи. Вам придётся вносить всё это в сигнатуру метода, ломая обратную совместимость с клиентами, которые не знают про delta encoding.
А в REST это встроено из коробки. Поэтому можно допиливать сервер, не переживая за то, что часть клиентов не умеют такие вещи.
С учётом разнообразных хидеров аналогом одного REST-ендпоинта будут несколько десятков сигнатур RPC-методов. Чего, естественно, никто не делает.
Вот вам, к примеру, delta encoding даже в голову не пришёл — значит, если дать вам спроектировать сервис на основе gRPC, вы ничего подобного в него не заложите.

_>Ну вот https://tinkoff.github.io/investAPI/ тебе реальный пример. )

Ну я и говорю — для роботов REST может и не подойти.
_>Ну так а если это условие задачи (в биржевой торговле так и есть), то что тогда? )))
Тогда биржа просто забивает на то, что клиент может лечь. Это — его проблемы. Так ведь? Нет задачи "гарантированно известить обо всех событиях".

_>Я же писал, что экондера нет. Да и не нужен он, т.к. на устройстве камера, поток от которой параллельно тоже идёт к пользователю (и тот глазами по картинке легко определяет нужное ему положение).

Угу. С задержкой в 500мс, да?
Простите, эта схема — неработоспособна.
_>Кстати, тут подумалось, что в рамках gRPC можно и поток данных от камеры сделать не параллельным где-то рядом, а прямо в рамках того же API (как stream кадров от сервера).
А то. Можно. Но это — патологически неустойчивый вариант. Пользоваться им будет крайне неудобно. В разы неудобнее, чем через REST.
В то время, как REST архитектура (не протокол, а архитектура) позволит им пользоваться даже без человека на приёмном конце.
_>Я правильно понимаю, что данный поток слов надо воспринимать как слив по данному примеру? )))
Можно и так воспринимать. Но правильнее будет, если вы примете как слив саму формулировку архитектурного решения, т.к. оно вряд ли решит задачу конечного потребителя.

_>С учётом наличия такой https://github.com/grpc-ecosystem/grpc-gateway штуки, мне кажется что выбор о базовой реализации должен быть однозначным. ))) Хотя конечно же по настоящему модные возможности (типа двунаправленных потоков) там отсутствуют — ну это цена за желание поддержки легаси (REST).

Пока что выглядит как попытка совместить недостатки обоих подходов.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[24]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 22.02.22 08:26
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>А в REST это встроено из коробки.

Ничерта в REST не встроено. Он просто даёт по морде HTTP запросом — и вперёд с песней реализовывать. В результате, 99 из 100 REST-серверов не будут нормально поддерживать чуть менее, чем весь HTTP.

S>С учётом разнообразных хидеров аналогом одного REST-ендпоинта будут несколько десятков сигнатур RPC-методов.

Не будут. Делаем нужные параметры запроса явным параметром и всё. Для примера, если что-то типа DownloadFile, то в запрос добавляем опциональные поля типа Range и прочих. В качестве бонуса, не нужно заниматься разбором формата Range.

В результате, на практике GRPC уделывает REST по скорости и надёжности разработки.
Sapienti sat!
Re[25]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.02.22 10:08
Оценка: +1
Здравствуйте, Cyberax, Вы писали:
C>Ничерта в REST не встроено. Он просто даёт по морде HTTP запросом — и вперёд с песней реализовывать. В результате, 99 из 100 REST-серверов не будут нормально поддерживать чуть менее, чем весь HTTP.
Вы так говорите, как будто это плохо.
А на практике это позволяет делать graceful degradation. Например, мы можем поставить прокси в любом месте соединения между клиентом и сервером (хоть прямой прокси на стороне клиента, хоть реверс прокси на стороне сервера), и получить оптимизацию conditional get, не написав ни строчки кода ни там ни там.
Более того — именно так и делается в 99 из 100 промышленных API, которые отдаются через CDN.

S>>С учётом разнообразных хидеров аналогом одного REST-ендпоинта будут несколько десятков сигнатур RPC-методов.

C>Не будут. Делаем нужные параметры запроса явным параметром и всё. Для примера, если что-то типа DownloadFile, то в запрос добавляем опциональные поля типа Range и прочих. В качестве бонуса, не нужно заниматься разбором формата Range.
Покажите мне реальный (g)RPC API в котором есть опциональные параметры типа Range и прочих.
C>В результате, на практике GRPC уделывает REST по скорости и надёжности разработки.
Ну... Может быть. У меня нет практики работы с gRPC, поэтому я (пока) поверю вам на слово.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[26]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 23.02.22 01:09
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

C>>Ничерта в REST не встроено. Он просто даёт по морде HTTP запросом — и вперёд с песней реализовывать. В результате, 99 из 100 REST-серверов не будут нормально поддерживать чуть менее, чем весь HTTP.

S>Вы так говорите, как будто это плохо.
Да, это плохо. Все ограничения и способности API должны быть описаны в его схеме. По факту в REST это совсем не так.

Например, имеем вот это API: https://docs.docker.com/engine/api/v1.41/#operation/ContainerArchiveInfo — "взять архив файловой системы".

Внимание, вопрос! Как это API будет взаимодействовать с Range?

S>А на практике это позволяет делать graceful degradation. Например, мы можем поставить прокси в любом месте соединения между клиентом и сервером (хоть прямой прокси на стороне клиента, хоть реверс прокси на стороне сервера), и получить оптимизацию conditional get, не написав ни строчки кода ни там ни там.

S>Более того — именно так и делается в 99 из 100 промышленных API, которые отдаются через CDN.
Не видел пока вообще ни одного API, где был бы conditional get. Более того, я даже не видел клиентов, которые его бы поддерживали.

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

C>>Не будут. Делаем нужные параметры запроса явным параметром и всё. Для примера, если что-то типа DownloadFile, то в запрос добавляем опциональные поля типа Range и прочих. В качестве бонуса, не нужно заниматься разбором формата Range.

S> Покажите мне реальный (g)RPC API в котором есть опциональные параметры типа Range и прочих.
То есть? Это будет просто параметр в API.

Типа:
service FileService {
  rpc DownloadData(in DownloadDataRequest) returns (stream DataChunk);
}

message DownloadDataRequest {
   message ChunkRange {
      uint64 offset = 1;
      uint64 size = 2;
   }
   string file_id = 1;
   repeated ChunkRange chunks = 2;
}

message DataChunk {
   uint64 chunk_index = 1;
   uint64 offset = 2;
   uint64 size = 3;
   bytes data = 4;
}


По API сразу понятно что и как использовать. Не надо гадать: "А поддерживает ли API-сервер Range?"
Sapienti sat!
Re[26]: Язык Go - слабые стороны
От: blacktea  
Дата: 23.02.22 10:52
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

S>А что вас удивляет? Сейчас так делают более-менее все. Вот, пару недель назад жена участвовала в конференции удалённо. Аудиовидеостриминг в реальном времени.

S>Благодаря тому, что это было сделано через REST, мы смогли записать полное видео — причём на второй день, записали и первый и второй дни.
S>Потому что вот так вот устроен стриминг — это не fire-and-forget протокол вроде UDP или RTP, а честный HTTP, причём именно в стиле REST. То есть там лежит некоторый ресурс, который мы можем "читать", а кто-то одновременно дописывает новые данные в хвост этого ресурса.

Господи, да что же ты такое несешь *facepalm*.
Re[27]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.02.22 08:12
Оценка: +1
Здравствуйте, alex_public, Вы писали:
_>Ой, ну к чему эти глупые фантазии))) Двухсторонний канал банально невозможен в REST.
Формально — да, у нас любой запрос в REST является "атомарным". Делаем GET, рассчитываем на хидер Content-Length, вычитываем указанное количество байт, и только потом начинаем разбор.
Однако мы можем несколько отступить от строгих требований, и в ответ на GET получить поток структурированных фрагментов, которые мы будем разбирать, не дожидаясь окончания передачи.
То есть сервер отдаёт столько данных, сколько у него есть, но не закрывает соединение, а продолжает отправлять "сообщения" по мере поступления. Вот вам и "двусторонний" канал.
Более того — в случае внезапного обрыва соединения у клиента есть штатный способ запросить данные не с нуля, а с того байта, на котором произошёл обрыв.
Технологии COMET больше лет, чем AJAX. Кстати, не расскажете, как gRPC обрабатывает ситуацию обрыва соединения? Как клиенту получить остаток потока с того места, до которого он дочитал в прошлый раз?

_>Ну т.е. чтобы это заработало, это надо написать руками. Так и в gRPC тоже самое. В чём отличие то по твоему? )))

Конечно же в обратной совместимости, negotiation и graceful degradation.

_>Ну для начала здесь у нас как раз каноничный срез коллекции. Просто видимо ты запутался и не заметил, что тут у нас коллекцией является не массив с монотонным индексом (типа времени), а словарь (по всем инструментам). И соответственно срез описывается не интервалом "от и до", а полным перечислением ключей.


_>Если же ты хотел именно банальный срез монотонного массива, то там прямо рядом лежит функция https://tinkoff.github.io/investAPI/marketdata/#getcandlesrequest с классическими параметрами среза from и to, возвращающая классический кусок массива.

Нет, я не хотел ни весь массив, ни монотонный срез.
Я хотел получить список элементов, изменённых с определённого момента времени. А вы путаете Range с Delta encoding.
Рекомендую прочитать RFC 3229, секцию 4.1, до наступления просветления.

Ну, и с чтением документации у вас некоторые проблемы. Метод https://tinkoff.github.io/investAPI/marketdata/#getcandlesrequest возвращает совсем не подмножество данных https://tinkoff.github.io/investAPI/marketdata/#getlastpricesrequest, а вообще другие данные.
Что я ожидаю от delta-encoding применительно к https://tinkoff.github.io/investAPI/marketdata/#getlastpricesrequest?
Пустого массива, если с момента моего последнего запроса не изменилось ничего. Массива из одного элемента, если с момента моего прошлого запроса прыгнул курс доллара (а остальные инструменты остались неизменными), и так далее. Как видим, в теории RPC позволяет такое сделать — но это потребует сразу заложить всё в сигнатуре методов. Я не могу написать сервер, который реализует только часть задокументированного протокола.
Я не могу написать клиента, который договаривается с сервером в стиле "если умеешь — то отдай дельту; если не умеешь — отдай весь список".
Точнее, могу, но мне нужно обладать дьявольской предусмотрительностью. Нужно заранее спроектировать такую возможность и заложить её в сигнатуры. Нужно заранее спроектировать метод договорённостей, когда клиент запрашивает у сервера список тех методов, которые поддерживаются сервером, а сервер отвечает, типа "умею conditinal get, но не умею в ranges" и так далее.
_>И теперь вот вопросик, а как тоже самое канонично описать в REST архитектуре? Просто идеологически тут явно должно быть GET, но при этом передавать массив строк в url как-то крайне печально... )))
Да ничего печального тут нет. Можно и список запихать в URL — в данном конкретном случае сколько там у нас реально инструментов торгуется на бирже? Тысяча? Полторы? Нет никаких проблем запихать хоть "все инструменты, кроме одного" напрямую в URL. В том числе и в компактном виде — сначала упаковав список в какой-нибудь околобинарный енкодинг, а потом в base64.
Потери производительности на "принудительную текстовость" будут пренебрежимо малы по сравнению с сетевыми задержками.
Можно реализовать это вторичными способами — например, сделав метод subscribe, который превращает список интересных нам инструментов в один идентификатор подписки, вслед за которым будут выполняться GET /subscriptions/####.

_>Ааа, ну т.е. "в рамках CRUD можно представить всё, что угодно", если это сложные задачи, а вот простые задачи с помощью CRUD плохо представляются... Понятно, понятно...

Да прекрасно они представляются при помощи CRUD. Трудности возникают тогда, когда у нас требования response time начинают доминировать над требованиями consistency.
Сложная задача — это когда у нас есть развесистая структура предметной области и развесистая логика на серверной стороне.
А мы говорим про задачу, ER-схема которой уместится на одном листочке школьной тетрадки.

_>Так надёжность или сложность? ) Я уже что-то запутался... )))

И надёжность, и сложность.

_>А особенно забавно это всё звучит с учётом того факта, что REST по сути является строгим подмножеством RPC.

Нет, не является. В REST введены концепции, которых в RPC просто нет, как класса. Нет понятия safety, нет понятия idempotence.

_>Тогда это был единственный интерфейс. А сейчас это официально старая версия, оставленная для совместимости и работающая через тот самый прокси.



_>Что-то ты сам себе противоречишь. В предыдущем сообщение же сам признал, что для данной задачи REST не особо подходит.

REST не особо подходит для задачи, где нужно передавать простые данные с минимальной задержкой, при этом потерями при передаче можно пренебречь.
При этом нужно быть очень аккуратным при проверке этих ограничений. К примеру, рассуждения о минимизации задержки бессмысленны, когда у нас клиент расположен в 200мс от сервера. Там накладные расходы на передачу парсинг HTTP-заголовков запроса в REST-подходе составляют единицы миллисекунд. А вот если мы ставим сервер в соседнюю стойку, то разница между 0мс для gRPC stream и 1ms REST request становится существенной.
Осторожность здесь важна для того, чтобы не принимать решение для 200мс ping times на основании рассуждений, которые справедливы для 0мс ping time.

_>Не обязательно в том же дата-центре. Но точно в каком-то дата-центре (а не на домашнем компьютере).

А вы думаете, что датацентр в Новосибирске будет сильно ближе к серверам NYSE по сравнению с домашним компьютером в Новосибирске?
Я вас разочарую: физику не обманешь. Тысяча километров — это тысяча километров, и тридцать хопов — это тридцать хопов.

_>У меня тут один старый сайтик есть, сохраняемый из ностальгических соображений. Он полностью статический. И теперь я кажется начинаю понимать, что он на самом деле сделан по архитектуре REST! Ну у него там есть разные URL'ы, к ним можно послать GET запросы и получить данные...

Отлично. Я вижу, у вас наступает просветление. Ещё немного, и вы узнаете, что Филдинг изобрёл REST как раз при проектировании HTTP.
То есть всё именно так — весь HTTP построен по идеологии REST, а вовсе не наоборот.
Просто сервер, который раздаёт по HTTP файловый контент, реализует REST "из коробки". Благодаря чему прекрасно работают такие решения, как CDN, forward & reverse proxy, а также зеркала сайтов.
А когда мы через HTTP выставляем не файлы, а приложения, то нужно немножечко постараться, чтобы не испортить прекрасную REST архитектуру своими корявыми руками (как это сделали, к примеру, авторы https://tinkoff.github.io/invest-openapi

_>Вообще, когда человек отвечает подобным образом на подобную задачу, то это может означать только одно из двух:

_>1. Он абсолютно не компетентен как инженер (не понимает слов ТЗ и т.п.)
_>2. Он вполне компетентен и всё понимает, но честный ответ на задачу демонстрирует его неправоту, поэтому он начинает вилять и менять ТЗ.

Считать ТЗ божьим словом, высеченным на скрижалях, могут себе позволить только джуны. Даже миддл начинает задаваться вопросом "а зачем мы это делаем?" и подвергать навязанные решения сомнению.

_>Забавно, у нас в приложение по сути являющемся RPC клиентом (причём не gRPC, а вообще самодельном на базе WebSocket) в браузере, кнопка back отлично работает. Может всё дело в кривизне рук? )))

Может быть. В принципе, можно и из SOAP изобразить более-менее приличное решение. Правда, там придётся переизобрести с нуля REST, и получить велосипедную его реализацию, не совместимую ни с чем.
Но лучше сразу проектировать приложение с учётом особенностей физической реальности — в частности, ненадёжности коммуникаций и ограниченности полосы пропускания.

_>Да я уже понял, что ты выставишь требование изменения железа по причине того, что оно плохо сочетается с любимой тобой программной архитектурой. Интересно, как тебя на работу принимали с такими подходами? ) Или ты там при приёме скрывал подобные замашки? )))

Меня обычно принимают на работу как раз для того, чтобы я предложил архитектурные решения, дающие нужный результат.
А не для того, чтобы "выставить в интернет протокол удалённого управления вертелкой камеры".
Потому, что далеко не всем очевидно, что надо задумываться не только о единственном позитивном сценарии, типа "один пользователь за бесконечно надёжным каналом с бесконечно большой полосой пропускания отправляет редкие команды", но и над всеми остальными сценариями, которые неизбежно возникнут в практической эксплуатации. Например — что делать, когда один пользователь жмёт "вправо", а другой — "влево".

Мои знания о том, как проектировать вот такие решения, неожиданно неплохо оплачиваются. Чего и вам желаю
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[29]: Язык Go - слабые стороны
От: night beast СССР  
Дата: 24.02.22 11:14
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

NB>>то есть будешь колхозить, о чем и речь.

C>Так что там колхозить-то? gRPC можно балансировать классически: https://towardsdev.com/grpc-request-routing-header-based-aws-alb-9934c1b4c67e — в этом примере балансирование на основе заголовка, но можно и по префиксу имени метода.

C>Но я бы явно разделил два endpoint'а.


вопрос не в том, можно или не можно это сделать.
вопрос в том что каждый будет это делать по-своему (или вообще не делать а потом, когда понадобится, судорожно все менять)
в отличие от РЕСТ, где это уже описано.
Re[31]: Язык Go - слабые стороны
От: night beast СССР  
Дата: 24.02.22 11:49
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>Так и в REST оно тоже не "само" делается. Кто-то должен настроить маршрутизацию в зависимости от пути, причём правильно, чтобы это было прозрачно для клиентов.


не в зависимости от пути а в зависимости от метода запроса, семантика которых (методов) четко прописана.
Отредактировано 24.02.2022 11:50 night beast . Предыдущая версия .
Re[32]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 24.02.22 20:57
Оценка: +1
Здравствуйте, night beast, Вы писали:

C>>Так и в REST оно тоже не "само" делается. Кто-то должен настроить маршрутизацию в зависимости от пути, причём правильно, чтобы это было прозрачно для клиентов.

NB>не в зависимости от пути а в зависимости от метода запроса, семантика которых (методов) четко прописана.
Да, в REST это более чётко прописано.

Но тем не менее, в REST нет способа указать гарантии целостности, например. Так что какой-то код может не работать, если GET после PUT будет перенаправляться на кластер, который не обеспечивает read-after-write. Всё равно нужно по обстоятельствам действовать, ровно как и в gRPC.
Sapienti sat!
Re[30]: Язык Go - слабые стороны
От: alex_public  
Дата: 04.03.22 02:18
Оценка: :)
Здравствуйте, Ночной Смотрящий, Вы писали:

_>>Вот зачем писать такой длинный текст, чтобы продемонстрировать подобную глупость? То, что ты описал — это даже не близко двухсторонний канал. Двухсторонний, это когда в рамках одного соединения и клиент и сервер могут в любой момент (в том числе даже и совпадающие) инициировать отсылку сообщения на противоположную сторону.

НС>https://en.wikipedia.org/wiki/WebSocket

Да, WebSocket — это пример полноценного двухстороннего протокола. И кстати все наши браузерные приложения пользуются исключительно им. Причём как раз в стиле gRPC, разве что формат сообщений задан не на языке Proto, а на языке Rust.

НС>Формально это другой протокол, но по факту очень близок к HTTP и совместим с ним.


Абсолютно не близок и не совместим (не считая возможности использования инфраструктуры http для себя). Ну и главное непонятно каким боком ты хочешь подсунуть WebSocket к REST?

_>>Показываю на пальцах. Берём gRPC. Создаём там функции в полном соответствие с HTTP командами (GET, POST и т.д.). Явно передаём в качестве аргументов (опциональных конечно же) нужные HTTP заголовки. И договариваемся использовать эти функции по правилам REST. Что мы получим в итоге? Правильно, полноценный REST, реализованный поверх gRPC.

НС>Да. И именно так взрослые дядьки и делают. Но тут есть одна проблема. gRPC намного жестче контролирует схему. С одной стороны, это плюс, так как страхует нас от части ошибок. Но с другой стороны — минус — так как вопрос обратной совместимости, очень больной даже в REST, в gRPC становится просто адом. Поэтому, кстати, ведущие собаководы советуют использовать gRPC только для внутрикластерных коммуникаций.

О ужас! Интересно и какой же тогда магией такие ОС как Windows (в которых с формализацией API всё не менее жёстко) могут спокойно развиваться, сохраняя при этом обратную совместимости десятилетиями? ) Видимо где-то в индустрии есть некие скрытые сакральные знания, которые утеряны разработчиками всяких говносервисов... )))

НС>Но даже и в этом случае есть засады. Например, gRPC херит все бенефиты от микросервисной архитектуры, так как бенефиты эти завязаны на крайне слабую связность сервисов между собой через REST протоколы. Как только уровень связности повышается за счет жесткости и специфичности протоколов — в полный рост встают ровно те проблемы, от которых микросервисы должны позволить уйти.


Как раз наоборот, это решает проблемы связи микросервисов, поскольку переводит их на полностью автоматизированный уровень. После того, как авторы сервиса представляют его внешний API, все клиенты автоматически получают готовый и абсолютно корректный (т.к. сгенерированный, а не написанный руками человека) код.

_>>Теперь понятно кто тут является чьим подмножеством? )

НС>Почему для тебя это так важно?

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

_>>Задача звучит так: есть готовая железка и ты должен запрограммировать для неё удалённый доступ. Ты уже продемонстрировал, что не смог справиться с этой задачей.

НС>Больше выглядит что не справился ты. Посылать удаленному устройству вот прям команды, которые шлют ему по UDB или чем он там подрублен — это смелое решение. Что будет, к примеру, происходить при сбое прохождения пакетов ты явно не задумывался.

Очевидно ничего не будет. На сервере просто ничего (сообщение то не дойдёт). А у клиента будет код ошибки, о котором при желание можно сообщить пользователю.
Re[29]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 04.03.22 10:14
Оценка: +1
Здравствуйте, alex_public, Вы писали:

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


Поскольку речь идет не о разработке железок, а о веб сервисах — с такими заявлениями сразу в лес.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[33]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.03.22 06:14
Оценка: +1
Здравствуйте, alex_public, Вы писали:
_>И мой оппонент откровенно слился при решений этой простейшей задачки. Причём слился он очевидно потому, что у него REST головного мозга, а данная задача не очень канонично ложится на эту архитектуру. Но естественно он не мог этого признать и начал тупо вилять, рассказывая о том что надо просто взять другую железку и вот для неё то он уж напишет как надо...
Если хотите — да, я признаю, что в рамках задачи, где применить REST невозможно, невозможно применять REST и придётся жрать, что дают.

Но в рамках пользовательской задачи (а не ограничений, введённых безголовыми проектировщиками железки) REST как минимум не хуже RPC, а в ряде сценариев — лучше.

Если хотите, я приведу вам жизненные примеры.
Вот у меня много лет была сигнализация редкой модели томагавка — 9100. Её рукожопые авторы решили сделать управление в стиле RPC. У 9010 оно в стиле REST: запуск — одна кнопка, стоп — другая. Обе кнопки идемпотентны.
А у 9100 долгое нажатие на кнопку означает "запуск, если заглушен, или стоп, если запущен".
Вот я проклинал её тысячи раз. Сломал два брелка в приступе благодарности к авторам.
Потому, что при плохой связи (а она плохая более-менее всегда; обещанные 400м работают только в чистом поле без ЭМ-источников) эта штука упорно глючила. Плюс дребезг контактов, из-за которого выдержать нужные 3 секунды адски тяжело. В итоге простая вроде вещь занимала по несколько минут — то она потеряет сигнал "туда", и машина не заводится, то потеряет апдейт "обратно" — и я глушу заведённую машину.

Вот это — прекрасный пример вашего подхода. "Нам железячники дали такую железку, кто мы такие, чтобы тут что-то решать". Ну, вот и нарешали.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[34]: Язык Go - слабые стороны
От: alex_public  
Дата: 10.03.22 00:41
Оценка: :)
Здравствуйте, Sinclair, Вы писали:

_>>И мой оппонент откровенно слился при решений этой простейшей задачки. Причём слился он очевидно потому, что у него REST головного мозга, а данная задача не очень канонично ложится на эту архитектуру. Но естественно он не мог этого признать и начал тупо вилять, рассказывая о том что надо просто взять другую железку и вот для неё то он уж напишет как надо...

S>Если хотите — да, я признаю, что в рамках задачи, где применить REST невозможно, невозможно применять REST и придётся жрать, что дают.

Почему невозможно то? Просто делаешь одну функцию Move (по методу POST) с одним булевым параметром (типа право/лево) и всё. Не вижу никаких проблем на самом деле.

S>Но в рамках пользовательской задачи (а не ограничений, введённых безголовыми проектировщиками железки) REST как минимум не хуже RPC, а в ряде сценариев — лучше.


Ещё раз повторюсь, настоящий инженер должен уметь решать задачу в рамках данному ему ТЗ, а не вставать в позу, если ему не нравится доступное железо.

P.S. И кстати с учётом текущей геополитической обстановки, этот навык становится особо востребованным...
Re[35]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.03.22 00:53
Оценка: +1
Здравствуйте, alex_public, Вы писали:

_>Почему невозможно то? Просто делаешь одну функцию Move (по методу POST) с одним булевым параметром (типа право/лево) и всё. Не вижу никаких проблем на самом деле.

Это не REST, а RPC.
_>P.S. И кстати с учётом текущей геополитической обстановки, этот навык становится особо востребованным...
То есть вы думаете, что оптопары в РФ будут недоступны? Пессимистичненьно...
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[38]: Язык Go - слабые стороны
От: alex_public  
Дата: 10.03.22 12:27
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

_>>Я знал (поэтому собственно и привёл этот пример изначально), что тебе это покажется не каноничным. ))) Но кстати интересно, какое из формальных требований REST ты видишь тут нарушенным (и чтобы при этом оно переставало быть нарушенном при наличие экодера)?

S>Representational State Transfer. Для REST главное — передача состояния, а не команд.

Да, это главное. Только надо понимать в каком смысле здесь говорится о передаче состояния. А именно, здесь подразумевается отказ от хранения состояния сервером — всё нужное приходит в запросе.

А если у нас такая задача, что в ней просто нет состояния в принципе?

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

О, тут ещё подумалось... А ведь взаимодействие со всеми базами данных тоже же укладывается в этот сценарий (просто там в роли скрипта SQL и т.п. будут). Как насчёт показать преимущества REST в такой классической задаче? ))) В том смысле что реализовать не доступ к конкретной табличке (собственно это и есть функциональность 90% современных говносервисов в сети), а реализовать в стиле REST универсальный интерфейс доступа к БД, позволяющий выполнить произвольный SQL (для примера) запрос.

А то ты же говорил, что "Во всех случаях, АФАИР, RPC проиграл." и "В рамках CRUD можно представить всё, что угодно."...

_>>Да, и кстати оптопара не даст тебе возможность определения абсолютного положения. Только относительного (что глупо и не нужно, т.к. у тебя и так шаговый двигатель).

S>Она даст возможность инициализировать положение железки после включения локального контроллера (ну, или пропадания связи между железкой и контроллером, что с точки зрения архитектуры одно и то же)

И это будет абсолютно бесполезная и неудобная для пользователя функция. Потому что если ты будешь показывать ему это значение (а иначе зачем оно тогда?), то он привыкнет что грубо говоря 0 — это направление на север, а 180 — это на юг. А после следующего выключения энергии эти значения станут уже другими.

Т.е. и при использование подсчёта шагов и при оптопаре (что по сути тоже самое, только аппаратное), это абсолютно вредная для пользователя функция. А какая-то польза могла бы быть только от полноценного энкодера с абсолютным позиционированием. Ну или есть ещё варианты, но это опять же будет дополнительное железо и новая прошивка.

В общем похоже что гениальным архитекторам пока что ещё рано думать о железе...
Re[36]: Язык Go - слабые стороны
От: alex_public  
Дата: 10.03.22 12:45
Оценка: -1
Здравствуйте, Ночной Смотрящий, Вы писали:

_>>Нет, задачка была ответом на тезис собеседника о том, что CRUD (читай REST) подход идеален для абсолютно всех видов задач.

НС>Это где он такое написал?

Нет конечно. Прямо на этом сайте уже поднимались примеры "сложных задач", где применение RPC "очевидно" эффективнее. Во всех случаях, АФАИР, RPC проиграл.
В рамках CRUD можно представить всё, что угодно. Более того — как раз такое представление и является единственно возможным способом строить распределённые приложения.


Я же говорю, ты как обычно влезаешь, даже не поняв куда.

НС>>>Это я уж не говорю о том, что сравнивать REST (идеологию) и gRPC(конкретный фреймворк) — не самое разумное занятие. Сравнивать можно либо HTTP+JSON с gRPC, либо REST с RPC.

_>>gRPC — это конкретный фреймворк, который набирает в данное время большую популярность.
НС>Ага, и при этом, как правильно заметил Cyberax, взрослые дядьки все равно проектируют для него API в REST стиле.

Т.к. REST — это по сути подмножество RPC, то очевидно что вполне естественная возможность. Правда в тех gRPC интерфейсах, что видел я, чаще всего применялся тип stream, что очевидно является уже выходом из REST подмножества.

_>>Протокол выбирать можно. А необходимость замены железа заявил как раз мой собеседник.

НС>Где он такое написал?

_>Архитектуру можешь плодить какую хочешь. Но ты уже показал, что в рамках REST подхода ты можешь только слиться с невнятными оправданиями.
Почему же? я прикручу к этой железке датчик нуля, сделаю процедуру инициализации, и выставлю REST-протокол по управлению положением.


_>>Похоже ты тут демонстрируешь просто эталонный уровень "я не в теме". )))

НС>Ага, и Антон тоже не в теме. В теме только ты. О чем, собственно, я и написал в предыдущем сообщении.

Не, он то как раз полностью адекватно общается и всё понимает. А вот ты очевидно влез не читая.
Re[33]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.03.22 17:47
Оценка: +1
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, Sinclair, Вы писали:


_>>>Подвох в том, что ни в каких текущих реализациях REST это невозможно.

S>>Хм. Я вроде описал способ, которым это делается.

_>Ну что за детских сад? Вот давай ты попробуешь реализовать в стиле REST например тот же самый потоковый протокол Тинькова информации с биржи. Т.е. вот мы подключаемся; подписываемся на информацию о 5 акциях; нам идёт в ответ непрерывный поток этой информации; далее в какой-то момент мы хотим ещё и о какой-то 6-ой акции получать информацию и изменяем свою подписку; и после этого получаем уже поток с информацией о 6 акциях. И всё это конечно в рамках одного соединения. Ну и как ты это сделаешь?

Сделаю POST, в тело которого запишу список 5 акций. Для простоты — в line-delimited JSON. В ответ нам начинает ехать поток обновлений в какой-то кодировке.
Для простоты — line-delimited JSON.
Поток никогда не закрывается. Ни туда, ни обратно. Всё.
Тут, конечно, нарушены некоторые принципы REST, но в целом всё работает
Более того — я ж не обязан делать именно так. Я вполне могу отправить и фиксированный список акций, просто получив в ответ бесконечный поток.

_>>>Восстанавливаешь соединение и снова подписываешься на нужные данные.

S>>Падажжите. Ну так в моей подписке был провал неизвестной длительности.

_>И? Эти данные уже давно стухли.

Ну как это "стухли"?
Вот у меня есть 500 инструментов. Обновляются по разному. Кто-то раз в час, кто-то раз в секунду. Связь на 10 секунд пропала. Мне теперь надо перевычитать цены для всех 500? Изменилось-то за это время может быть 40 позиций. Опять же — как мне убедиться, что между моментами "я прочитал все цены" и "я начал ловить поток изменений" не было потерянных изменений?

_>Так я вроде приводил графики (причём даже не свои, а какие-то дотнетные), но ты сказал что нарисовать всё что угодно можно...

Это потому, что непонятно, какая задача решалась. Я вот показываю примеры, в которых при неустойчивой связи RPC будет гораздо хуже по трафику, чем REST.

_>Так он же стухла уже. ))) Как весь предыдущий стрим собственно — важно только текущее значение и всё.

А что такое "текущее значение"? Вот у меня была последняя цена инструмента 99.40. Он обновляется редко. Я заново подписался на поток, десять минут жду — нету изменений. Какую цену мне предполагать? 99.40? А может там как раз изменение пролетало, пока я моргнул?

_>И снова детский сад? Вот как будто бы ты не знаешь как решается данный вопрос. Что есть две стандартные стратегии: или текущее соединение блокирует все новые или же любое новое соединение выкидывает предыдущее. И в разных задачах используется или один или второй подход.

Здорово. То есть теперь мы не можем посмотреть одну и ту же камеру с двух компьютеров.
Смотрите, как быстро вы закапываете свой продукт Меня всегда изумляли ситуации, когда люди намеренно делают продукт хуже, вместо того, чтобы немножко подумать.
Ну, как сони, у которой половина продуктов не могут одновременно заряжаться и работать
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[35]: Язык Go - слабые стороны
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 11.03.22 13:24
Оценка: +1
Здравствуйте, alex_public, Вы писали:

_>>>И снова детский сад? Вот как будто бы ты не знаешь как решается данный вопрос. Что есть две стандартные стратегии: или текущее соединение блокирует все новые или же любое новое соединение выкидывает предыдущее. И в разных задачах используется или один или второй подход.

S>>Здорово. То есть теперь мы не можем посмотреть одну и ту же камеру с двух компьютеров.

_>Не смотреть камеру, а иметь доступ к интерфейсу управления. Ты вот видел когда-нибудь, чтобы например к одному дрону можно было подключиться с двух контроллеров? Может это тоже недостаток продукта? )))


Запросто — один управляет дроном, другой управляет вспомогательными камерами дрона и другими его устройствами, что на него навешаны.
Re[31]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 15.03.22 14:35
Оценка: :)
Здравствуйте, alex_public, Вы писали:
_>О, я тут заметил что как-то пропустил твоё старое сообщение (я вообще через уведомления в почте читаю этот форум).
Ну, это типичные издержки RPC-style коммуникации на основе "пересылки оповещений о событиях".
Гораздо надёжнее — REST-подход: https://rsdn.org/Users/Private/MyRsdn.aspx?go=answers
Заходите по этой ссылке, видите список всех ответов на ваши сообщения.
Заботливый браузер (даже если это Links) подсвечивает чёрненьким те из них, которые вы ещё не читали
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[23]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 19.05.22 15:34
Оценка: +1
Здравствуйте, alex_public, Вы писали:

_>Ну вот https://tinkoff.github.io/investAPI/ тебе реальный пример. )


А вот и фидбек про реальный пример подъехал: https://rsdn.org/forum/life/8279445.1
Автор: Real 3L0
Дата: 19.05.22


Как я и предполагал — там просто балом заправляют криворукие. Весь этот прекрасный gRCP API периодически ложится на полдня.
С этой точки зрения, какие-то мифические микросекунды выигрыша от переезда — фикция.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Язык Go - слабые стороны
От: Shmj Ниоткуда  
Дата: 14.02.22 21:44
Оценка:
Вот, кстати, что на счет Go?

Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?
Re[2]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 09:47
Оценка:
Здравствуйте, Hobbes, Вы писали:

H>Моё резюме: берите го, если вам позарез нужны горутины. В остальных случаях не рекомендую. Да и в том же C++ тоже есть корутины, только с более мудрёным синтаксисом, явной передачей контекста и т. д., короче в го корутины реально удобнее.


Ну, на самом деле, Go как раз позиционируется именно как язык, в котором нет и никогда не будет всех этих крутых и совершенно непостижимых фич, которыми столь славен C++.
Re[2]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 09:49
Оценка:
Здравствуйте, ononim, Вы писали:

S>>Вот, кстати, что на счет Go?

S>>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?
O>Хреновая поддержка динамических библиотек. Ее фактически нет.

Ее нет в том смысле, что невозможно написать динамическую библиотеку на Go. Но динамические библиотеки, написанные на других языках, с сишными соглашениями о вызовах, из Go без проблем можно использовать.
Re[3]: Язык Go - слабые стороны
От: ononim  
Дата: 15.02.22 10:10
Оценка:
S>>>Вот, кстати, что на счет Go?
S>>>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?
O>>Хреновая поддержка динамических библиотек. Ее фактически нет.
Pzz>Ее нет в том смысле, что невозможно написать динамическую библиотеку на Go. Но динамические библиотеки, написанные на других языках, с сишными соглашениями о вызовах, из Go без проблем можно использовать.
Да даже написать вроде можно, но толку с нее мало — она не может взаимодействовать с другими библиотеками как го-шная библиотеке.
В плюсах нет никаких проблем дергать другие библиотеки написанные на плюсах за классы. Надо только проявлять некоторую осторожность, но для плюсовика — осторожность — норма жизни Неосторожные плюсовики, как неосторожные саперы — рано выбывают из профессии.
Как много веселых ребят, и все делают велосипед...
Отредактировано 15.02.2022 10:12 ononim . Предыдущая версия .
Re[2]: Язык Go - слабые стороны
От: smeeld  
Дата: 15.02.22 10:29
Оценка:
Здравствуйте, Pzz, Вы писали:


Pzz>Ну, фраза "я программист на C++" заставляет девок покраснеть и дышать чаще, а то же самое про Go заставляет их лишь пожать плечами.


Учитывая текущую востребованность гошников в РФ, большие чем у плюсовиков зрплт (смотрим на вакансии), и меньший средний возраст гошников (все хипстеры из маилрушки и яндекса), то скорее всё совсем наоборот.
Re[3]: Язык Go - слабые стороны
От: ononim  
Дата: 15.02.22 10:55
Оценка:
o>> Хреновая поддержка динамических библиотек. Ее фактически нет.
AB>А зачем? Для ниши go монобинарь удобнее (в деплое и поддержке).
см изначальный вопрос
Как много веселых ребят, и все делают велосипед...
Re[4]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 11:02
Оценка:
Здравствуйте, ononim, Вы писали:

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

O>Да даже написать вроде можно, но толку с нее мало — она не может взаимодействовать с другими библиотеками как го-шная библиотеке.
O>В плюсах нет никаких проблем дергать другие библиотеки написанные на плюсах за классы. Надо только проявлять некоторую осторожность, но для плюсовика — осторожность — норма жизни Неосторожные плюсовики, как неосторожные саперы — рано выбывают из профессии.

Хуже, что в Go два рантайма не могут ужиться в одном процессе. Технически-то динамическую библиотеку сделать можно. А потом начинается: загрузили ее из программы на C/C++, все хорошо. Загрузили две таких разных библиотеки, поперли странные глюки, причем разные на разных системах. Загрузили из программы на Go библиотеку на Go, опять беда.

Выселить рантайм в отдельную динамическую библиотеку тоже не получится, потому, что все модули, написанные на Go, должны быть скомпилированы одной и той же версией компилятора, и рантайм должен быть от него. Иначе никто ничего не гарантирует.

Ну и что до осторожности, местами видно, что Go делали не какие-то питонисты в пиджаке галстуке, а кондовые хакеры-чернокнижники с длинными немытыми волосами и в вонючем свитере (Пайк на вид не такой, но он притворяется). И если делать на Go сложные вещи, а иногда и простые, то можно нарваться.
Re[3]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 11:09
Оценка:
Здравствуйте, smeeld, Вы писали:

Pzz>>Ну, фраза "я программист на C++" заставляет девок покраснеть и дышать чаще, а то же самое про Go заставляет их лишь пожать плечами.


S>Учитывая текущую востребованность гошников в РФ, большие чем у плюсовиков зрплт (смотрим на вакансии), и меньший средний возраст гошников (все хипстеры из маилрушки и яндекса), то скорее всё совсем наоборот.


Пайк задумывал Go как C 2.0. Как язык для настоящих мужчин, но без недостатков C, и с достоинствами Алефа и Лимбо и с современным синтаксическим стилем, без всех этих ненужных скобочек после if'а. Но все мы знаем, что программировать на Go побежали в основном не небритые сишники, а молодые и прыщавые программисты на Питоне, не способные освоить даже JavaScript.
Re[5]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 11:43
Оценка:
Здравствуйте, ononim, Вы писали:

Pzz>>Да есть ли разница? Или ты программировать с ними собрался?

O>Девка QAщица, узнав что ты С++сник — может внезапно достать изза пазухи десятидюймовый pentesting tool.

Это так теперь называется vagina dentata?
Re[4]: Язык Go - слабые стороны
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 15.02.22 11:49
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Подход с явной обработкой выходит боком практически всегда. Ошибку либо тупо прокидывают вверх, теряя стектрейс, либо игнорируют, либо пытаются обрабатывать на месте (очень часто с багами, т.к. этот сценарий никогда не тестируют).


В случае с Го ошибка будет обработана на месте, т.к. линтеры. Любой нормальный Го проект невероятно густо ими обвешен. В худшем случае это будет запись в логе в духе "не шмогла я", но это даст возможность легко проанализировать ситуацию и понять как поправить. Да и то такой худший случай как-то еще должен пройти ревью и попасть в мастер, что не так что бы и просто. Я бы сказал что подход Go в подавляющем большинстве случаев приводит к рабочей обработке ошибок.

vsb>Никогда у меня не было проблем с исключениями. Если про исключение забыл, значит сценарий не отрабатывает, в логах появляются страшные сообщения, идёшь и фиксишь код, никаких последствий. А чаще всего всё просто работает как ожидается — исключение вылетает наверх, где-нибудь там сверху ловится и всё.


Я обычно пишу на C++ и Go. Ошибки в C++ из за отсутствия обработки исключений обычно более болезненные чем излишне примитивная обработка ошибки в Го. Просто наблюдения
Re[4]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 12:08
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Подход с явной обработкой выходит боком практически всегда. Ошибку либо тупо прокидывают вверх, теряя стектрейс, либо игнорируют, либо пытаются обрабатывать на месте (очень часто с багами, т.к. этот сценарий никогда не тестируют).


Если требовать с разработчиков 100% покрытия кода тестами (и писать письменную объяснительную за каждую непокрытую строку, почему ее нельзя покрыть), то все сценарии будут оттестированы. Правда, это все равно не гарантирует, что будут оттестированы все сочетания.

vsb>Никогда у меня не было проблем с исключениями. Если про исключение забыл, значит сценарий не отрабатывает, в логах появляются страшные сообщения, идёшь и фиксишь код, никаких последствий. А чаще всего всё просто работает как ожидается — исключение вылетает наверх, где-нибудь там сверху ловится и всё.


Угу. И при попытке сохранить свою работу за последние два дня в файл программа сообщает, что у нее ошибка номер E13813231 в xdgjqw.dll, вместо внятного объяснения, что стряслось и как исправить.
Re[6]: Язык Go - слабые стороны
От: ononim  
Дата: 15.02.22 12:14
Оценка:
Pzz>>>Да есть ли разница? Или ты программировать с ними собрался?
O>>Девка QAщица, узнав что ты С++сник — может внезапно достать изза пазухи десятидюймовый pentesting tool.
Pzz>Это так теперь называется vagina dentata?
https://youtu.be/1aj87DO_0lM?t=116
Как много веселых ребят, и все делают велосипед...
Re[6]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 12:16
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Ты говоришь про какие-то мифические линтеры, мастеры, ревью. Я верю, что у тебя так. Я говорю про х*кс-х*кс и в продакшн, который я вижу вокруг. С ревью можно и на С писать, наверное. Поэтому у меня точка зрения на это специфическая.


Если в конторе принято гонять хоть один тест, то прогонка теста предполагает автоматическую проверку встроенного в компилятор статического анализатора кода. А он, хоть и простенький, находит многое такое, чего не всякий навороченный анализатор C++ найдет.
Re[6]: Язык Go - слабые стороны
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 15.02.22 12:20
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Ты говоришь про какие-то мифические линтеры, мастеры, ревью. Я верю, что у тебя так. Я говорю про х*кс-х*кс и в продакшн, который я вижу вокруг. С ревью можно и на С писать, наверное. Поэтому у меня точка зрения на это специфическая.


Да это не мистическое, это всего один вызов, серьезно!

vsb>С++ специфический язык. В нём вечно заморачиваются всякими exception-safe кодами. На Java про такое 99% и не слышала. Просто пишешь и пишешь. Shared state особо нет. Поэтому никаких проблем от отсутствия обработки исключения тут нет. В любом фреймворке сверху крутится try-catch, который отдаст 500 ошибку и в лог нагадит, что в общем-то вполне адекватно для обработки по умолчанию.


Ну, я на Java писал меньше, но и там по моим ощущениям явная обработка ошибок пошла бы на пользу. Причем в Java-мире она как бы есть, т.к. куча функций густо обмазаны try/catch
Re[7]: Язык Go - слабые стороны
От: vsb Казахстан  
Дата: 15.02.22 12:31
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Ну, я на Java писал меньше, но и там по моим ощущениям явная обработка ошибок пошла бы на пользу. Причем в Java-мире она как бы есть, т.к. куча функций густо обмазаны try/catch


Да ничего там не обмазано. Есть legacy в виде проверяемых исключений и максимум обмазки в нормальном коде это


catch (IOException e) {
    throw new UncheckedIOException(e);
}
Re[7]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 13:07
Оценка:
Здравствуйте, ononim, Вы писали:

Pzz>>>>Да есть ли разница? Или ты программировать с ними собрался?

O>>>Девка QAщица, узнав что ты С++сник — может внезапно достать изза пазухи десятидюймовый pentesting tool.
Pzz>>Это так теперь называется vagina dentata?
O>https://youtu.be/1aj87DO_0lM?t=116

Ужас какой. Хорошо, что в Go этого нет...
Re[8]: Язык Go - слабые стороны
От: ononim  
Дата: 15.02.22 14:13
Оценка:
Pzz>>>Это так теперь называется vagina dentata?
O>>https://youtu.be/1aj87DO_0lM?t=116
Pzz>Ужас какой. Хорошо, что в Go этого нет...
Да, го — эта вон та обезъянка
Как много веселых ребят, и все делают велосипед...
Re[9]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 14:14
Оценка:
Здравствуйте, ononim, Вы писали:

Pzz>>>>Это так теперь называется vagina dentata?

O>>>https://youtu.be/1aj87DO_0lM?t=116
Pzz>>Ужас какой. Хорошо, что в Go этого нет...
O>Да, го — эта вон та обезъянка

Ну нет. Go — это суслик такой. Не обезьянка.
Re[4]: Язык Go - слабые стороны
От: mrTwister Россия  
Дата: 15.02.22 16:20
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Пайк задумывал Go как C 2.0. Как язык для настоящих мужчин, но без недостатков C, и с достоинствами Алефа и Лимбо и с современным синтаксическим стилем, без всех этих ненужных скобочек после if'а. Но все мы знаем, что программировать на Go побежали в основном не небритые сишники, а молодые и прыщавые программисты на Питоне, не способные освоить даже JavaScript.


И те и другие побежали. Посмотри на список крутых OSS проектов на го, это же как раз небритые сишники
лэт ми спик фром май харт
Re[5]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 18:42
Оценка:
Здравствуйте, rudzuk, Вы писали:

Pzz>> Пайк задумывал Go как C 2.0. Как язык для настоящих мужчин, но без недостатков C, и с достоинствами Алефа и Лимбо и с современным синтаксическим стилем, без всех этих ненужных скобочек после if'а. Но все мы знаем, что программировать на Go побежали в основном не небритые сишники, а молодые и прыщавые программисты на Питоне, не способные освоить даже JavaScript.


R>А я слышал, что его делали для неосиливающих нормальные языки:


Пайк — тот еще жук. Разным людям он рассказывает разное.

R>

давайте послушаем слова самого Роба Пайка:

R> Фишка в том, что наши программисты гуглеры, а не ученые. Это обычно молодые, только выпустившиеся пацаны, которые возможно выучили Java, возможно даже C/C++ и может быть Python. Они не в состоянии понимать пробздетый язык, но мы все равно хотим, чтобы они делали хороший софт. Таким образом, мы даем им легкопонимаемый язык, к которому они быстро привыкнут.


R>Короче, нужно было хоть как-то этих обезьян утилизировать... GO!


Вот тут он врет. Перед кем, хоть, выступает-то?

В Go если от слайса сделать субслайс, получишь "указатель" на ту же память, где был оригинальный слайс. И если модифицировать субслайс, оригинальный слайс тоже изменится, и наоборот. А вот если потом к оригинальному слайсу сделать append, то может он переедет в другую память, а может и нет, как повезет. И тогда модификация одного может будет изменять другой, а может и нет.

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

Или, например, если мы от мегабайтного слайса отсубслайсим 5 байт, а про остальное "забудем", в памяти все равно будет занят мегабайт, потому что отсубслайсенные 5 байт все равно указывают на мегабайтный буфер, и GC его не приберет. Наивная идея организовать очередь, дописывая в конец слайса и откусывая от начала породит конструкцию, которая в конце концов сожрет всю память. Ну и т.д.

Слайсы при этом — очень базовый тип в Go, постоянно используемый. Не какая-нибудь там экзотика редкая.

В общем, не для только выпустившихся пацанов этот язык, а для гораздо более зрелых мужей.
Re[7]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.02.22 19:02
Оценка:
Здравствуйте, night beast, Вы писали:

Pzz>>Ну, даже Пайк где-то жаловался, что они рассчитывали привлечь сишников/плюсовиков, а прибежали питонщики.


NB>привлекать сишников языком с GC -- как себе идея


Ну, в свое время эти люди привлекли ассемблерников идеей писать операционную систему, включая ядро, на языке высокого уровня...
Re[8]: Язык Go - слабые стороны
От: night beast СССР  
Дата: 15.02.22 19:06
Оценка:
Здравствуйте, Pzz, Вы писали:

NB>>привлекать сишников языком с GC -- как себе идея


Pzz>Ну, в свое время эти люди привлекли ассемблерников идеей писать операционную систему, включая ядро, на языке высокого уровня...


думаешь вещи одного уровня?
ну да каждому свое.
Re[6]: Язык Go - слабые стороны
От: ononim  
Дата: 15.02.22 19:53
Оценка:
Pzz>В Go если от слайса сделать субслайс, получишь "указатель" на ту же память, где был оригинальный слайс. И если модифицировать субслайс, оригинальный слайс тоже изменится, и наоборот. А вот если потом к оригинальному слайсу сделать append, то может он переедет в другую память, а может и нет, как повезет. И тогда модификация одного может будет изменять другой, а может и нет.
Pzz>Или, например, если мы от мегабайтного слайса отсубслайсим 5 байт, а про остальное "забудем", в памяти все равно будет занят мегабайт, потому что отсубслайсенные 5 байт все равно указывают на мегабайтный буфер, и GC его не приберет. Наивная идея организовать очередь, дописывая в конец слайса и откусывая от начала породит конструкцию, которая в конце концов сожрет всю память. Ну и т.д.

Ты так рассказываешь, как будто это чтото хорошее.
Как много веселых ребят, и все делают велосипед...
Re[4]: Язык Go - слабые стороны
От: Anton Batenev Россия https://github.com/abbat
Дата: 16.02.22 06:51
Оценка:
Здравствуйте, Sheridan, Вы писали:

S> AB>А зачем? Для ниши go монобинарь удобнее (в деплое и поддержке).

S> Насрать вообщето деплою и поддержке.

Для ниши go — нет. Но мне сложно будет тебе объяснить почему, т.к. у тебя отсутствует релевантный опыт.

S> Более того, предпочту нормальные бинари, не приносящие всё-внутри-себя-с-собой и страдающие от этого ожирением.


Для обсуждаемого языка и типичных условий работы go-приложений в подавляющем большинстве случаев монобинари — это и есть "нормальные".
Re[7]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 07:10
Оценка:
Здравствуйте, ononim, Вы писали:

Pzz>>Или, например, если мы от мегабайтного слайса отсубслайсим 5 байт, а про остальное "забудем", в памяти все равно будет занят мегабайт, потому что отсубслайсенные 5 байт все равно указывают на мегабайтный буфер, и GC его не приберет. Наивная идея организовать очередь, дописывая в конец слайса и откусывая от начала породит конструкцию, которая в конце концов сожрет всю память. Ну и т.д.


O>Ты так рассказываешь, как будто это чтото хорошее.


Я так рассказываю, как будто это то, что есть. А хорошее оно или плохое, пусть каждый решает в меру своих потребностей.
Re[6]: Опять дваццатьпять
От: CreatorCray  
Дата: 16.02.22 07:57
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Монобинари это такое себе, от безысходности. Когда не хватает опыта/знаний/желания уметь в зависимости.

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

S> Когда в команде раздрай и разные участки проекта требуют разных версий одной и той же библиотеки.

Ну а кроме твоего проекта на машине у кастомера вообще больше ничего не присутствует, да? Никаких других проектов, или твоего же только предыдущей версии.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[8]: Язык Go - слабые стороны
От: vsb Казахстан  
Дата: 16.02.22 07:58
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>>>Или, например, если мы от мегабайтного слайса отсубслайсим 5 байт, а про остальное "забудем", в памяти все равно будет занят мегабайт, потому что отсубслайсенные 5 байт все равно указывают на мегабайтный буфер, и GC его не приберет. Наивная идея организовать очередь, дописывая в конец слайса и откусывая от начала породит конструкцию, которая в конце концов сожрет всю память. Ну и т.д.


O>>Ты так рассказываешь, как будто это чтото хорошее.


Pzz>Я так рассказываю, как будто это то, что есть. А хорошее оно или плохое, пусть каждый решает в меру своих потребностей.


Забавный факт. В жаве кажется до 8 версии substring работал именно так: был один общий массив символов и offset/length. Т.е. маленькая строка могла внутри держать массив на мегабайт, к примеру. Но потом поменяли на копирование.

Но в целом я думаю, что поведение go лучше. Программист сам должен понимать, когда данные надо копировать, а по умолчанию оно должно работать максимально быстро. Скажем сейчас в Java невозможно повторить то поведение (без написания своего класса String).
Re: Язык Go - слабые стороны
От: vaa  
Дата: 16.02.22 08:23
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вот, кстати, что на счет Go?


S>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?


Пора бы тебе уже своё КУНФУ придумать
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[7]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 16.02.22 08:56
Оценка:
Здравствуйте, CreatorCray, Вы писали:

S>>Монобинари это такое себе, от безысходности. Когда не хватает опыта/знаний/желания уметь в зависимости.

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

S>> Когда в команде раздрай и разные участки проекта требуют разных версий одной и той же библиотеки.

CC>Ну а кроме твоего проекта на машине у кастомера вообще больше ничего не присутствует, да? Никаких других проектов, или твоего же только предыдущей версии.
Нууу вообщето чаще всего да. А то и один проект целый кластер машин занимает со всяким окружением типа БД/мониторинга.
И даже в этом случае надо планировать и выполнять апгрейд используемых либ под выбранные версии продакшн-дистрибутивов.
Matrix has you...
Re[9]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 09:28
Оценка:
Здравствуйте, vsb, Вы писали:

Pzz>>Я так рассказываю, как будто это то, что есть. А хорошее оно или плохое, пусть каждый решает в меру своих потребностей.


vsb>Забавный факт. В жаве кажется до 8 версии substring работал именно так: был один общий массив символов и offset/length. Т.е. маленькая строка могла внутри держать массив на мегабайт, к примеру. Но потом поменяли на копирование.


Это очень такое Сишное поведение. Т.е., человек, для которого привычен Си, другого бы и не ждал. Но Си вырабатывает привычку следить за памятью, если для человека это непривычно, и для него строка — это строка, т.е., последовательность символов, а не место в памяти, ему очень трудно это понять.
Re[11]: Язык Go - слабые стороны
От: night beast СССР  
Дата: 16.02.22 09:59
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>>>Это тоже способ уйти от необходимости обновлять у себя используемое.

NB>>макс, давай ты не будешь фантазировать о том, почему ушли от монолитов.
S>Ну расскажи ты.

Pzz уже изложил
Re[10]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 10:02
Оценка:
Здравствуйте, Pzz, Вы писали:
S>>Сначала были монолиты. Чтобы решить проблему используемых при разработке либ (не всем дано вовремя обновляться, да и лень) — придумали микросервисы.
Pzz>Микросервисы придумали, чтобы разбить большую систему на небольшие части, связанные интерфейсами, но не доступом ко внутренностям. Собственно, это — та же идея, что и ООП, но на новый лад.
Такое себе оправдание. Тот же private в плюсах замечательно ограничивает.

Pzz>Разбиение большой системы на малые части в очень значительной степени снижает сложность системы, и делает ее подвластной человеческому разуму.

Шило на мыло. Сложность проекта в целом от этого только возросла.

S>>Спустя какоето время поняли что микросервисы решили только проблему разработки и переместили проблему зависимостей на deploy-time. Поэтому придумали изоляцию (докер)

Pzz>Докер, скорее, решает проблему "быстро свинтить для программы привычное ей окружение из общедоступных запчастей".
Не опровергает моё высказывание а скорее подтверждает.

S>>А теперь и докер перестал устраивать. Поэтому с одной стороны появляются языки, где секут плетями за "не такой" код и либы вкомпиливаются в бинарник (сабж). А с другой стороны пилят кубернетес чтобы хоть както управлять контейнерами и их версиями.

Pzz>В Go развелось статических анализаторов не потому, что мир Go — это царство фашизма, а потому, что могут. Go настолько простой язык, что его легко статически анализировать. Плюс, полноценный синтаксический анализатор Go является частью системной библиотеки, причем это не какой-то там анализатор для пользователей, а ровно тот же самый, который использует компилятор. Поэтому и анализируют. C++ тоже бы анализировали, но это в разы сложнее, и анализаторы плохо работают.
Опять же, не опровергает то что я написал.

S>>А казалось бы — обновляйтесь вовремя и никаких проблем.

Pzz>Народ не обновляется не потому, что лень, а потому, что неизвестно, какие проблемы принесет новое обновление. Увы, интерфейс остается синтаксически тем же, а поведение под капотом меняется. И иногда эти изменения неожиданным образом просачиваются на поверхность. Причем это всегда происходит не вовремя.
Я гдето писал "обновляйте сразу прод!"?
К тому же:
1. Дистрибутивы без тестов не выпускаются.
2. Проект тоже без тестов релизиться не должен. В том числе и без тестов на обновлённом дистрибутиве.
В итоге у кастомера всё должно работать сразу. Но из-за того что на второй пункт разработчики считают приемлемым забить — и возникают проблемы.
Matrix has you...
Re[8]: Опять дваццатьпять
От: CreatorCray  
Дата: 16.02.22 10:10
Оценка:
Здравствуйте, Sheridan, Вы писали:

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

S>Нет.
Да, Шеридан, да.

S>Нет упоминания гитлера, геноцида и человекоедения. Ну чтобы нагнетать так нагнетать.

Ты сам справился

S>Нууу вообщето чаще всего да.

У тебя на машине только одна единственная прога стоит?
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[11]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 10:11
Оценка:
Здравствуйте, Sheridan, Вы писали:

Pzz>>Микросервисы придумали, чтобы разбить большую систему на небольшие части, связанные интерфейсами, но не доступом ко внутренностям. Собственно, это — та же идея, что и ООП, но на новый лад.

S>Такое себе оправдание. Тот же private в плюсах замечательно ограничивает.

В C++ к тебе придет мененджер и скажет, "твой private мешает выпустить завтра релиз, который мы должны были выпустить месяц назад", и ты поморщишься, и заменишь его на public. А поди попробуй сделай такое в микросервисе.

Pzz>>Разбиение большой системы на малые части в очень значительной степени снижает сложность системы, и делает ее подвластной человеческому разуму.

S>Шило на мыло. Сложность проекта в целом от этого только возросла.

Нет, уменьшилась. Если представить себе проект в виде графа зависемостей, сложность определяется не столько количеством вершин этого графа, сколько количеством связей между ними.

S>>>Спустя какоето время поняли что микросервисы решили только проблему разработки и переместили проблему зависимостей на deploy-time. Поэтому придумали изоляцию (докер)

Pzz>>Докер, скорее, решает проблему "быстро свинтить для программы привычное ей окружение из общедоступных запчастей".
S>Не опровергает моё высказывание а скорее подтверждает.

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

S>1. Дистрибутивы без тестов не выпускаются.

S>2. Проект тоже без тестов релизиться не должен. В том числе и без тестов на обновлённом дистрибутиве.
S>В итоге у кастомера всё должно работать сразу. Но из-за того что на второй пункт разработчики считают приемлемым забить — и возникают проблемы.

Сколько раз я видел, как во вполне оттестированном дистрибутиве линуха обновление какой-нибудь библиотеки ломало чего-нибудь в какой-нибудь программе.
Re[9]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 16.02.22 10:14
Оценка:
Здравствуйте, CreatorCray, Вы писали:

S>>Нууу вообщето чаще всего да.

CC>У тебя на машине только одна единственная прога стоит?
Все которые стоят — все работают. Некоторые на гошечке, некоторые на плюсах, нектороые на питоне ну и на других языках тоже куча. И с либами и вкомпиленое. Думаю, все варианты есть.
ЧСХ, всё работает. Наверное потому что код пишут и сопровождают те, кто видит пользу в отслеживании того, что они используют в своём коде.
Matrix has you...
Re[12]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 10:23
Оценка:
Здравствуйте, Pzz, Вы писали:


Pzz>>>Микросервисы придумали, чтобы разбить большую систему на небольшие части, связанные интерфейсами, но не доступом ко внутренностям. Собственно, это — та же идея, что и ООП, но на новый лад.

S>>Такое себе оправдание. Тот же private в плюсах замечательно ограничивает.

Pzz>В C++ к тебе придет мененджер и скажет, "твой private мешает выпустить завтра релиз, который мы должны были выпустить месяц назад", и ты поморщишься, и заменишь его на public. А поди попробуй сделай такое в микросервисе.

И что мне помешает сделать интерфейс? Законы физики? Ровно также вытащу наружу, раз пришол руководитель и просит меня сделать свою работу. Узнаю конечно причины и если они существенны/справедливы — вытащу.

Pzz>>>Разбиение большой системы на малые части в очень значительной степени снижает сложность системы, и делает ее подвластной человеческому разуму.

S>>Шило на мыло. Сложность проекта в целом от этого только возросла.
Pzz>Нет, уменьшилась. Если представить себе проект в виде графа зависемостей, сложность определяется не столько количеством вершин этого графа, сколько количеством связей между ними.
Связи не изменились. Изменяется принцип установки связей. Этот новый принцип требует бОльших телодвижений. Например при переходе от вызова метода объекта к вызову метода об http api сервиса нужно встроить вдобавок обработку ошибок (та-же 404), поддержать версионность API. Как минимум!


S>>>>Спустя какоето время поняли что микросервисы решили только проблему разработки и переместили проблему зависимостей на deploy-time. Поэтому придумали изоляцию (докер)

Pzz>>>Докер, скорее, решает проблему "быстро свинтить для программы привычное ей окружение из общедоступных запчастей".
S>>Не опровергает моё высказывание а скорее подтверждает.
Pzz>Из того, что яйцами можно закидывать плохих артистов и политиков не следует, что изначальное предназначение яиц какое-либо другое, чем делать яичницу и омлет.
Ты прав, докер решает много "проблем". Но родился он именно для необходимости изоляции процессов. А изоляция понадобилась потому что каждый пляшет как хочет. Потому что два соседних отдела могут в каждый в своём микросервисе пользовать разные версии одной и той же либы. И чем больше контора тем больше именно эта причина выходит на первое место.


S>>1. Дистрибутивы без тестов не выпускаются.

S>>2. Проект тоже без тестов релизиться не должен. В том числе и без тестов на обновлённом дистрибутиве.
S>>В итоге у кастомера всё должно работать сразу. Но из-за того что на второй пункт разработчики считают приемлемым забить — и возникают проблемы.
Pzz>Сколько раз я видел, как во вполне оттестированном дистрибутиве линуха обновление какой-нибудь библиотеки ломало чего-нибудь в какой-нибудь программе.
Вспомни хотя бы два раза и озвучь период воспоминаний.
Matrix has you...
Re[10]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 10:27
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Это очень такое Сишное поведение. Т.е., человек, для которого привычен Си, другого бы и не ждал. Но Си вырабатывает привычку следить за памятью, если для человека это непривычно, и для него строка — это строка, т.е., последовательность символов, а не место в памяти, ему очень трудно это понять.

Странно бвло бы слышать о программиста что он не понимает что для строки нужен кусочек памяти где она хранится. Более того, человек, который хотя бы немного интересуется чуть больше, не понимал хотя бы на начальном уровне как по идее должна храниться строка. Это простая задача на декомпозицию.
Matrix has you...
Re[13]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 10:33
Оценка:
Здравствуйте, Sheridan, Вы писали:

Pzz>>В C++ к тебе придет мененджер и скажет, "твой private мешает выпустить завтра релиз, который мы должны были выпустить месяц назад", и ты поморщишься, и заменишь его на public. А поди попробуй сделай такое в микросервисе.

S>И что мне помешает сделать интерфейс? Законы физики? Ровно также вытащу наружу, раз пришол руководитель и просит меня сделать свою работу. Узнаю конечно причины и если они существенны/справедливы — вытащу.

Ну, когда тебя попросят сделать интерфейс, ты скажешь, что это сложно, хлопотно и надо тестировать, и займет это неделю. И у тебя есть некоторая надежда, что менеджер тебе поверит и пойдет искать другого крайнего. А вот убедить менеджера, что на замену слова private на слово public у тебя уйдет неделя, ты вряд ли сможешь.

Pzz>>Нет, уменьшилась. Если представить себе проект в виде графа зависемостей, сложность определяется не столько количеством вершин этого графа, сколько количеством связей между ними.

S>Связи не изменились. Изменяется принцип установки связей. Этот новый принцип требует бОльших телодвижений. Например при переходе от вызова метода объекта к вызову метода об http api сервиса нужно встроить вдобавок обработку ошибок (та-же 404), поддержать версионность API. Как минимум!

Программисты очень любят делать лишние связи и очень не любят думать головой. Если есть выбор, сделать 3 лишние связи или полчаса подумать головой, как без этих лишних связей обойтись, в программе появятся 3 лишние связи.

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

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

S>Ты прав, докер решает много "проблем". Но родился он именно для необходимости изоляции процессов. А изоляция понадобилась потому что каждый пляшет как хочет. Потому что два соседних отдела могут в каждый в своём микросервисе пользовать разные версии одной и той же либы. И чем больше контора тем больше именно эта причина выходит на первое место.


С изоляцией процессов прекрасно справлялся chroot, придуманный еще в библейские времена. Докер решает проблему, как заполнить то место, куда chroot, тем, что процессу надо для жизни, и при этом не умереть от натуги.

Pzz>>Сколько раз я видел, как во вполне оттестированном дистрибутиве линуха обновление какой-нибудь библиотеки ломало чего-нибудь в какой-нибудь программе.

S>Вспомни хотя бы два раза и озвучь период воспоминаний.

Слушай, я в полном соответствии с теорией Фрейда эти травмирующие воспоминание немедленно вытесняю после того, как они перестают быть актуальными.
Re[13]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 10:47
Оценка:
Здравствуйте, Sheridan, Вы писали:

Pzz>>Сколько раз я видел, как во вполне оттестированном дистрибутиве линуха обновление какой-нибудь библиотеки ломало чего-нибудь в какой-нибудь программе.

S>Вспомни хотя бы два раза и озвучь период воспоминаний.

О, вспомнил! Ты, таки, заставил меня пережить эту травму еще один раз.

Федора, как известно, выдристала из дистрибутива Питон 2.x. Вернее, не то, чтобы совсем выдристала, но он теперь deprecated, и поддерживается так, чтобы никому не захотелось им пользоваться.

В результате, они сломали мой любимий плагин hg-git, который превращает mercurial в git, но с пользовательским интерфейсом mercurial'а, гораздо более гуманным, чем у git'а, и сломали проприетериальный (я правильно сказал?) драйвер от принтеров kyocera, который теперь не печатает, а о чем-то вечно думает, на 100% загружая доставшееся ему ядро процессора).

Как раз два случая, как ты просил.
Re[14]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 11:05
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, Sheridan, Вы писали:


Pzz>>>В C++ к тебе придет мененджер и скажет, "твой private мешает выпустить завтра релиз, который мы должны были выпустить месяц назад", и ты поморщишься, и заменишь его на public. А поди попробуй сделай такое в микросервисе.

S>>И что мне помешает сделать интерфейс? Законы физики? Ровно также вытащу наружу, раз пришол руководитель и просит меня сделать свою работу. Узнаю конечно причины и если они существенны/справедливы — вытащу.
Pzz>Ну, когда тебя попросят сделать интерфейс, ты скажешь, что это сложно, хлопотно и надо тестировать, и займет это неделю. И у тебя есть некоторая надежда, что менеджер тебе поверит и пойдет искать другого крайнего. А вот убедить менеджера, что на замену слова private на слово public у тебя уйдет неделя, ты вряд ли сможешь.
Твои слова подтверждают твою мысль что и там и там сменить доступ к интерфейсу можно, если есть доступ к исходникам. А делать ли это прямо сейчас зависит от подвешенности языка а не от ограничений языка/мотодологии.


Pzz>>>Нет, уменьшилась. Если представить себе проект в виде графа зависемостей, сложность определяется не столько количеством вершин этого графа, сколько количеством связей между ними.

S>>Связи не изменились. Изменяется принцип установки связей. Этот новый принцип требует бОльших телодвижений. Например при переходе от вызова метода объекта к вызову метода об http api сервиса нужно встроить вдобавок обработку ошибок (та-же 404), поддержать версионность API. Как минимум!
Pzz>Программисты очень любят делать лишние связи и очень не любят думать головой. Если есть выбор, сделать 3 лишние связи или полчаса подумать головой, как без этих лишних связей обойтись, в программе появятся 3 лишние связи.
Это справедливо и при работе с библиотекой и при работе с http api. Зачем это тут? Меня заболтать?


Pzz>В то же время, программисты ленивы, как коты, страдающие ожирением.

Я так и сказал сразу. Ты опять подтвердил мои слова.


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

Это тоже не спасёт от дурака. Правильно делать так: не пускать туда дурака.


S>>Ты прав, докер решает много "проблем". Но родился он именно для необходимости изоляции процессов. А изоляция понадобилась потому что каждый пляшет как хочет. Потому что два соседних отдела могут в каждый в своём микросервисе пользовать разные версии одной и той же либы. И чем больше контора тем больше именно эта причина выходит на первое место.

Pzz>С изоляцией процессов прекрасно справлялся chroot, придуманный еще в библейские времена. Докер решает проблему, как заполнить то место, куда chroot, тем, что процессу надо для жизни, и при этом не умереть от натуги.
Это както противоречит тому что докер появился после микросервисов и туда начали запихивать микросервисы для изоляции?


Pzz>>>Сколько раз я видел, как во вполне оттестированном дистрибутиве линуха обновление какой-нибудь библиотеки ломало чего-нибудь в какой-нибудь программе.

S>>Вспомни хотя бы два раза и озвучь период воспоминаний.
Pzz>Слушай, я в полном соответствии с теорией Фрейда эти травмирующие воспоминание немедленно вытесняю после того, как они перестают быть актуальными.
Скажу тогда тебе я: подобное случается достаточно редко при правильном управлении жизнью ОС. Настолько редко что считается форсмажором.
Matrix has you...
Re[12]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 11:06
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Ну при всем при том, большинство программистов вряд ли понимают, как устроен внутри float.

Я про некомпетентность и лень как раз тут и пишу.
Matrix has you...
Re: Язык Go - слабые стороны
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 16.02.22 11:13
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вот, кстати, что на счет Go?


S>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?

Почему бы тебе просто не попробовать его как и раст? Напиши пару простых вещей и всё. Зачем плодить одни и те же темы?
Sic luceat lux!
Re[15]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 11:20
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Как и следовало ожидать:

S>1. Довольно странная тулза, которой пользуются два с половиной человека и ты.
S>2. Проприетарный драйвер, у которого нет исходников и на обновление которого забили программисты этого драйвера.

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

Надо сказать, что опенсорсный CUPS пытается опознать мой принтер и на нем печатать. Только у него это не очень-то получается. Вернее, получается печатать белые листы. Что, конечно, очень полезно в плане экологии, экономии бумаги и повышения секретности в делопроизводстве, но не совсем совпадает с целями, с которыми я этот принтер купил.

Помогает руками сочетать опенсорсный CUPS с неопенсорсным PDL-файлом, который можно, при некоторой сноровке, выдернуть из инсталлятора неопенсорсного драйвера. Что само по себе удивительно, потому, что мой принтер прекрасно поддерживает совершенно стандартные IPP, PDF и PostScript, и, казалось бы, CUPS'у больше ничего не должно быть нужно.
Re[13]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 11:22
Оценка:
Здравствуйте, Sheridan, Вы писали:

Pzz>>Ну при всем при том, большинство программистов вряд ли понимают, как устроен внутри float.

S>Я про некомпетентность и лень как раз тут и пишу.

Это не некомпетентность. Просто float — это очень хорошо инкапсулированный тип. Никому особо и не надо знать, как он внутри устроен, он прекрасно реализует заявленный интерфейс, независимо от своего внутреннего устройства.
Re[16]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 11:26
Оценка:
Здравствуйте, Pzz, Вы писали:

S>>Как и следовало ожидать:

S>>1. Довольно странная тулза, которой пользуются два с половиной человека и ты.
S>>2. Проприетарный драйвер, у которого нет исходников и на обновление которого забили программисты этого драйвера.

Pzz>Не, ну в изначальном условии не было требования выбирать из числа программ, которые ты лично одобрил.

Я его и не выдвигал, ты прав.

Pzz>Надо сказать, что опенсорсный CUPS пытается опознать мой принтер и на нем печатать. Только у него это не очень-то получается. Вернее, получается печатать белые листы. Что, конечно, очень полезно в плане экологии, экономии бумаги и повышения секретности в делопроизводстве, но не совсем совпадает с целями, с которыми я этот принтер купил.

Pzz>Помогает руками сочетать опенсорсный CUPS с неопенсорсным PDL-файлом, который можно, при некоторой сноровке, выдернуть из инсталлятора неопенсорсного драйвера. Что само по себе удивительно, потому, что мой принтер прекрасно поддерживает совершенно стандартные IPP, PDF и PostScript, и, казалось бы, CUPS'у больше ничего не должно быть нужно.
И что тебе помешало сразу печатать об "IPP, PDF и PostScript,"?
Ну и я не знаю что именно реализовывалось киоцерой в следующей цепочке

И да, там тоже есть свои компиляторы, исходники для которых могут быть закрыты.
Matrix has you...
Re[14]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 11:28
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>>>Ну при всем при том, большинство программистов вряд ли понимают, как устроен внутри float.

S>>Я про некомпетентность и лень как раз тут и пишу.

Pzz>Это не некомпетентность. Просто float — это очень хорошо инкапсулированный тип. Никому особо и не надо знать, как он внутри устроен, он прекрасно реализует заявленный интерфейс, независимо от своего внутреннего устройства.

Ты прав в контексте сабжа. Незнание устройства float скорее всего не помешает выпустить релиз. А вот неумение управлять зависимостями и отсутствие знаний для чего это нужно — скорее всего помешает выпуску релиза.
Matrix has you...
Re[15]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 11:31
Оценка:
Здравствуйте, Sheridan, Вы писали:

Pzz>>Ну, когда тебя попросят сделать интерфейс, ты скажешь, что это сложно, хлопотно и надо тестировать, и займет это неделю. И у тебя есть некоторая надежда, что менеджер тебе поверит и пойдет искать другого крайнего. А вот убедить менеджера, что на замену слова private на слово public у тебя уйдет неделя, ты вряд ли сможешь.

S>Твои слова подтверждают твою мысль что и там и там сменить доступ к интерфейсу можно, если есть доступ к исходникам. А делать ли это прямо сейчас зависит от подвешенности языка а не от ограничений языка/мотодологии.

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

Pzz>>Программисты очень любят делать лишние связи и очень не любят думать головой. Если есть выбор, сделать 3 лишние связи или полчаса подумать головой, как без этих лишних связей обойтись, в программе появятся 3 лишние связи.

S>Это справедливо и при работе с библиотекой и при работе с http api. Зачем это тут? Меня заболтать?

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

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

S>Это тоже не спасёт от дурака. Правильно делать так: не пускать туда дурака.

Я все больше и больше убеждаюсь, что дурак — роль социальная. Т.е., если набрать в проект одних умных, они все равно расслоятся не небольшое количество граждан, которые ведут себя и поступают, как умные, а остальные будут дураками. Если дураков потом поувольнять, оставшиеся умные опять расслоятся. И так до тех пор, пока вообще никого не останется.

Иными словами, дураки неистребимы.

S>Это както противоречит тому что докер появился после микросервисов и туда начали запихивать микросервисы для изоляции?


Я не историк, мне трудно сказать, кто появился раньше.

Но в принципе, "микросервисы" — это модное слово для давно известной идеи. Полагаю, микросервисы как идея, а не модное слово, появились примерно тогда, когда появились компьютеры, способные одновременно исполнять несколько программ.

Pzz>>Слушай, я в полном соответствии с теорией Фрейда эти травмирующие воспоминание немедленно вытесняю после того, как они перестают быть актуальными.

S>Скажу тогда тебе я: подобное случается достаточно редко при правильном управлении жизнью ОС. Настолько редко что считается форсмажором.

Но тем не менее, случается.
Re[16]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 11:41
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>>>Ну, когда тебя попросят сделать интерфейс, ты скажешь, что это сложно, хлопотно и надо тестировать, и займет это неделю. И у тебя есть некоторая надежда, что менеджер тебе поверит и пойдет искать другого крайнего. А вот убедить менеджера, что на замену слова private на слово public у тебя уйдет неделя, ты вряд ли сможешь.

S>>Твои слова подтверждают твою мысль что и там и там сменить доступ к интерфейсу можно, если есть доступ к исходникам. А делать ли это прямо сейчас зависит от подвешенности языка а не от ограничений языка/мотодологии.
Pzz>Ну вообще-то говоря, этого совсем не следовало бы делать. Просто в таких местах происходит конфликт интересов между хорошим программированием и хорошим ведением бизнеса. И бизнес обычно побеждает.
Да, ты прав. Этого не следует делать. Но если бизнес победит программирование то и ты и я это сделаем в обоих случаях


Pzz>>>Программисты очень любят делать лишние связи и очень не любят думать головой. Если есть выбор, сделать 3 лишние связи или полчаса подумать головой, как без этих лишних связей обойтись, в программе появятся 3 лишние связи.

S>>Это справедливо и при работе с библиотекой и при работе с http api. Зачем это тут? Меня заболтать?
Pzz>Потому, что вытащить внутренность в интерфейс заметно сложнее, чем открыть прямой доступ к памяти.
и там и там это можно сделать. Скорость реализации зависит от компетентности программиста и там и там. И, опять же, и там и там это будет сделано если бизнес скажет "надо!".
Более того, во втором случае это вдобавок ещё будет сделать сложнее.


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

S>>Это тоже не спасёт от дурака. Правильно делать так: не пускать туда дурака.
Pzz>Я все больше и больше убеждаюсь, что дурак — роль социальная. Т.е., если набрать в проект одних умных, они все равно расслоятся не небольшое количество граждан, которые ведут себя и поступают, как умные, а остальные будут дураками. Если дураков потом поувольнять, оставшиеся умные опять расслоятся. И так до тех пор, пока вообще никого не останется.
Ну, это уже про психологию а не про программирование и деплой.


S>>Скажу тогда тебе я: подобное случается достаточно редко при правильном управлении жизнью ОС. Настолько редко что считается форсмажором.

Pzz>Но тем не менее, случается.
Вероятность вообще чего угодно никогда не равна нулю. Но это не означает что не нужно стремится вероятность негативных последствий стремить к нулю.
Matrix has you...
Отредактировано 16.02.2022 11:42 Sheridan . Предыдущая версия .
Re[17]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 11:42
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>И что тебе помешало сразу печатать об "IPP, PDF и PostScript,"?


То, что изначально их драйвер работал. А потом федора подвергла 2-й питон геноциду, и он перестал/

S>Ну и я не знаю что именно реализовывалось киоцерой в следующей цепочке


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

Судя по тому, что достаточно просто подсунуть PPD, этот фильтр не больно-то и нужен. Я полагаю, что и PPD не больно-то и нужен, но CUPS все равно какой-то опенсорсный подсовывает, скорее вредный, чем полезный.

S>Image: cups-postscript-chain.png

S>И да, там тоже есть свои компиляторы, исходники для которых могут быть закрыты.

Я всегда думал, что PPD подсовываются ghostscript'у вместе с документом, который надлежит распечатать, и являются программой для ghostscript'а (или иного интерпретатора постскрипта).

Android и iPhone печатают на этом принтере без всяких драйверов и PPD. У них с ним делается бездрайверное IPP Everywhere, иначе называемое AirPrint.
Re[18]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 11:45
Оценка:
Здравствуйте, Pzz, Вы писали:


Pzz>Я не такой уж знаток внутренностех CUPS'а,

Я тоже не ахти какой знаток, да.
Речь тут вообще о том, что поломался проприетарный драйвер (фильтр? ppd? чтотоещо?), жизнь которого обособлена внутри киосеры и не может управляться снаружи темже редхатом. То есть это некий чёрный ящик, новую версию которого киосеровцы не потрудились соорудить.
Matrix has you...
Re[10]: Язык Go - слабые стороны
От: ononim  
Дата: 16.02.22 12:09
Оценка:
vsb>>Забавный факт. В жаве кажется до 8 версии substring работал именно так: был один общий массив символов и offset/length. Т.е. маленькая строка могла внутри держать массив на мегабайт, к примеру. Но потом поменяли на копирование.
Pzz>Это очень такое Сишное поведение. Т.е., человек, для которого привычен Си, другого бы и не ждал.
Проблема в том что это поведение неочевидно из синтаксиса, как я уже писал гдето тут, если бы append принимал указатель на слайс, подвергающийся модификации — все было бы очевиднее. А он принимает слайс и возвращает слайс, причем тот слайс который он принимает остается в непредсказуемом для программиста состоянии. По сути — классическое сишное UB, просто без SIGSEGV.
Как много веселых ребят, и все делают велосипед...
Отредактировано 16.02.2022 12:11 ononim . Предыдущая версия .
Re[2]: Язык Go - слабые стороны
От: Шубин Евгений Россия http://erladvisor.blogspot.de/
Дата: 16.02.22 13:02
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Лично для меня у Go самая фатальная проблема это система обработки ошибок. Я считаю, что исключения в сто раз лучше, чем то, что сделали в Go.


Я тут пописываю на Эликсире, где есть обработка ошибок через исключения и даже весьма приятная как на уровне библиотек, так и в популярных фреймворках. Заметил, что коллеги предпочитают коды возврата исключениям, все кроме меня.
Re[8]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 13:03
Оценка:
Здравствуйте, Vetal_ca, Вы писали:

V_>Это не лечится. Уже были эти споры. Все уже тысячу раз доказано а у Шеридана все "Нужно сечь разработчиков плетями". Он остановился, закостенел.

В эту игру можно играть вдвоём. Это местные агитаторы "не надо обновляться" и "память не ресурс" закостенели в своих убеждениях. И постоянно вытаскивают козыри "бизнес" и "бабло".
И если я не обновляю чтототам, не разбираюсь с избыточным жором ресурсов то значит я уже пытался это сделать и знаю почему не получится в данный момент. Так же это означает что у меня запланировано в будущем ещо одна попытка.
Matrix has you...
Re[9]: Язык Go - слабые стороны
От: Vetal_ca Канада http://vetal.ca
Дата: 16.02.22 13:27
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Здравствуйте, Vetal_ca, Вы писали:


S>В эту игру можно играть вдвоём. Это местные агитаторы "не надо обновляться" и "память не ресурс" закостенели в своих убеждениях. И постоянно вытаскивают козыри "бизнес" и "бабло".

S>И если я не обновляю чтототам, не разбираюсь с избыточным жором ресурсов то значит я уже пытался это сделать и знаю почему не получится в данный момент. Так же это означает что у меня запланировано в будущем ещо одна попытка.

Почему ты считаешь, что кому-то интересно в это играть?

Есть реальная жизнь с реальными требованиями и ограничениями. Иногда это работает, иногда нет.

В стартапе это не работает, пока будут вылизывать, конкуренты перехватят инициативу.
В банке, работает. И не из-за ограничений жора а из-за attack surface и PCI compliance. Там обсосут и проверят каждую версию до мельчайших деталей

Естественно, твой религиозный подход ни там ни там не пройдет.
Re[11]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 13:31
Оценка:
Здравствуйте, Ikemefula, Вы писали:

S>>Нет. Это должно происходить когда все остальные шаги (такие как обновления библиотек в своём проекте) предприняты и не помогла.

I> Алё — на этапе разработки ты и представить не можешь, что куда кому взбредет в голову задеплоить. Как ты собираешься проанализировать тысячу-другую возможных комбинаций?
Достаточно нескольких (2-5) популярных дистрибутивов поддерживать. Всё остальное — "мы не поддерживаем данный дистрибутив но готовы помочь за допплату"


I>>>Вероятно, это ты так видишь свою работу. Только при чем здесь другие программисты, если дело в тебе?

S>>Нет, это я так вижу работу отвечающих мне тут программистов, которые кричат о том что можно делать говно так как юзер просто купит памяти/стораджа и поэтому можно тяпляп.
I>Как я вижу, у нас есть Шеридан, который не в курсе что на этапе разработки нет сведений из будущего
I>1. кто куда чего может задеплоить
В рекомендованные вами дистрибутивы. Почемуто считается нормальным указываать версию мака и виндов для которых приложение работает. Но с линупсом надо обязательно вообще всё!!11.
Не работает так.

I>2. какие новые неизвестные баги могут быть привнесеные в какую из десятков или сотен зависимостей?

Вот это и есть — "закостеневание". Это когда "нетнет, обновляться нинада, уже и так хорошо, а вдруг там монстры??7"


I>>>Бывает трудозатратно и на одну версию перейти. Что выберешь — либа кидает OutOfMemory на DrawLine, если координаты слишком близко, или загрузка ядер на 5% при параллельной загрузке?

S>>Написать баг авторам либы и не переходить пока он не будет починен.
I>Бинго! И автор либы через месяц сообщает, что он пофиксит, но возможно после того, как выкатит две версии.
Автор общается, отвечает — ждём. А пока работаем со старой версией.

I>А потом заходишь ты в гитхаб либы, и видишь, что эта проблема булькает уже три последних года.

Два варианта:
1. Сменить библиотеку.
2. Форкнуть и пофиксить.
Почему так? Потому что де-факто эта либа уже не поддерживается никем. И обязательно устареет. Не сегодня так через пару лет. И всёравно придётся вот эти вот два пункта.
Я за то, чтобы запланировать один из этих пунктов и в рабочем порядке решить.
Ты за то чтобы оставить всё как есть и ждать петуха с вооот таким клювом...


I>>>К твоему сведению, в ченджлогах пишут зафикшеные баги, а не новые неизвестные.

S>>Для них есть багтрекер. Выше только что написал.
I>Похоже, что ты не различаешь "новые известные" и "новые неизвестные". Первые — в баклоге. А вот остальные булькают то тут то там и возможно не скоро попадут в баклог.
Я про новые неизвестные и пишу. Нашол такой — в багтрекер его.


I>>>Это голословно.

S>>Нет, так делают люди, у которых процесс поставлен нормально а не "и так сойдёт".
I>Шериданы что ли?
Если тебе так нравится, то да.


I>>>Наоборот. Я знаю ситуацию с обоих сторон — и как потребитель фремворка, и как разработчик.

S>>ВНЕЗАПНО, я тоже. И я знаю, что если обновления планировать и выполнять в запланированное время (хотя бы раз в квартал), то затраты сильно ниже, чем обновляться только тогда когда приходит петух со своим клювом.
I>Это какие то общие слова вида "хорошее лучше плохого".
В противовес твоему "старое лучше свежего" звучат более логично, не находишь ли?


I>>>Голословно. Любая версия либы может сломать обратную совместимость. Нет способа гарантировать отсутствие багов.

S>>Я понял, ты теперь прицепился к возможным багам и не отцепишся. Багтрекер, друже, бааагтрееекер.
I>Что бы баг попал в багтрекер, его ктото должен обнаружить, идентифицировать, подготовить описание, стабильную последовательность. До того этот баг будет просто булькать тут и там и подламывать разработку.
Ты и твоя команда это будут делать. Ты и твоя команда. В рабочем порядке во время запланированного обновления используемых либ на этапе тестирования свежего перед принятием решения "обновляться можно уже сейчас или ещо подождать?".
Matrix has you...
Re[10]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 13:36
Оценка:
Здравствуйте, Vetal_ca, Вы писали:

S>>В эту игру можно играть вдвоём. Это местные агитаторы "не надо обновляться" и "память не ресурс" закостенели в своих убеждениях. И постоянно вытаскивают козыри "бизнес" и "бабло".

S>>И если я не обновляю чтототам, не разбираюсь с избыточным жором ресурсов то значит я уже пытался это сделать и знаю почему не получится в данный момент. Так же это означает что у меня запланировано в будущем ещо одна попытка.
V_>Почему ты считаешь, что кому-то интересно в это играть?
Это не должно быть интересно или неинтересно. Это работа, которую надо выполнить. Только и всего. Мне вот неинтересно например подготавливать (обновлять в том числе) репозитории стороннего софта при релизе нашего продукта. Тупо скучно. Но делать надо. Поэтому вот прямо щас сижу и слежу за строчками на экране от работающего скрипта.


V_>В стартапе это не работает, пока будут вылизывать, конкуренты перехватят инициативу.

Потом стартап становится на ноги, эти проблемы всётаки всплывают и встают стеной и их приходится решать. Один раз, второй... А потом планировать обновления начинают когда два раза штаны уже сгорели.
Matrix has you...
Re[19]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 14:17
Оценка:
Здравствуйте, Sheridan, Вы писали:

Pzz>>Я не такой уж знаток внутренностех CUPS'а,

S>Я тоже не ахти какой знаток, да.

Что-то ты стареешь, брат. Раньше ты вообще все знал, и никогда ни с чем не соглашался.

S>Речь тут вообще о том, что поломался проприетарный драйвер (фильтр? ppd? чтотоещо?), жизнь которого обособлена внутри киосеры и не может управляться снаружи темже редхатом. То есть это некий чёрный ящик, новую версию которого киосеровцы не потрудились соорудить.


Поменяли системную инсталляцию Питона, и старые скрипты на Питоне загнулись.
Re[12]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 14:26
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Достаточно нескольких (2-5) популярных дистрибутивов поддерживать. Всё остальное — "мы не поддерживаем данный дистрибутив но готовы помочь за допплату"


Несколько популярных — это Debian, Ubuntu, Fedora, пару-тройку последних версий на x86 и ARM. И еще возножно на MIPS, если ты любишь китайцев. Достаточно много сочетаний.

Просто JFYI.
Re[11]: Язык Go - слабые стороны
От: Vetal_ca Канада http://vetal.ca
Дата: 16.02.22 14:28
Оценка:
Здравствуйте, Sheridan, Вы писали:

V_>>Почему ты считаешь, что кому-то интересно в это играть?

S>Это не должно быть интересно или неинтересно. Это работа, которую надо выполнить. Только и всего. Мне вот неинтересно например подготавливать (обновлять в том числе) репозитории стороннего софта при релизе нашего продукта. Тупо скучно. Но делать надо. Поэтому вот прямо щас сижу и слежу за строчками на экране от работающего скрипта.

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

Все надо обосновать. А если есть экономически или технические необоснованные ритуалы, то тут большая вероятность ОКР

V_>>В стартапе это не работает, пока будут вылизывать, конкуренты перехватят инициативу.

S>Потом стартап становится на ноги, эти проблемы всётаки всплывают и встают стеной и их приходится решать. Один раз, второй... А потом планировать обновления начинают когда два раза штаны уже сгорели.

Или не приходится.

У тебя есть хоть приблизительный порядок цифр, сколько ты выиграл и сколько затратил своего и чужого времени? Я уверен, что нет, ибо это вразрез с твоими ритуалами.
Re[20]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 14:32
Оценка:
Здравствуйте, Pzz, Вы писали:

S>>Речь тут вообще о том, что поломался проприетарный драйвер (фильтр? ppd? чтотоещо?), жизнь которого обособлена внутри киосеры и не может управляться снаружи темже редхатом. То есть это некий чёрный ящик, новую версию которого киосеровцы не потрудились соорудить.

Pzz>Поменяли системную инсталляцию Питона, и старые скрипты на Питоне загнулись.
Очевидно что не все.
Matrix has you...
Re[12]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 14:37
Оценка:
Здравствуйте, Vetal_ca, Вы писали:

V_>Все надо обосновать. А если есть экономически или технические необоснованные ритуалы, то тут большая вероятность ОКР

Если ты считаешь что оновлять — нецелесообразно то о чом можено вообще разговаривать? Ты ждёшь петуха. Твой выбор. Я предупредил.

V_>>>В стартапе это не работает, пока будут вылизывать, конкуренты перехватят инициативу.

S>>Потом стартап становится на ноги, эти проблемы всётаки всплывают и встают стеной и их приходится решать. Один раз, второй... А потом планировать обновления начинают когда два раза штаны уже сгорели.
V_>Или не приходится.
Тем которые я видел — приходилось.


V_>У тебя есть хоть приблизительный порядок цифр, сколько ты выиграл и сколько затратил своего и чужого времени? Я уверен, что нет, ибо это вразрез с твоими ритуалами.

Трачу гдето пару недель в год. Выиграл, думаю около месяца аврала "срочногоритнадоделатьаааААА!!11". Сложно посчитать время затраченное на исправление ошибок, которые не случились.
Matrix has you...
Re[2]: Язык Go - слабые стороны
От: ononim  
Дата: 16.02.22 14:53
Оценка:
S>>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?
S>Нет ООП. Выбрасывайте.
есть немножечко
Как много веселых ребят, и все делают велосипед...
Re[7]: Язык Go - слабые стороны
От: Reset  
Дата: 16.02.22 17:07
Оценка:
I>Больше всего проблем доставляют шаред и транзитивные зависимости. Например — обновил ты либу, упали тесты А. Фиксанул. Обновил другую — упали тесты Б. Фиксанул — снова упали А. Фиксанул — упали тесты Б. Обычно здесь надо засаживаться за глубокую отладку что не всегда возможно, писать тикеты и ждать фиксов, искать версии, которые хоть как то совместимы, или гуглить до посинения, пока кто нибудь не подскажет тебе комбинацию.
I>Такое, во первых, требует высокой квалификации, во вторых, огромных трудозатрат, и часто абсолютно непредсказуемо по продолжительности.
I>И что получаем — высококвалифицированый специалист за конскую зп 100% времени занимается мелочовочкой.

Я так и не понял, как статическая линковка библиотек спасает от сложностей с обновлениями библиотек по сравнению с динамической линковкой. В обоих случаях: обновляешь библиотеки — получаешь сложности, не обновляешь — все хорошо.

P.S. В случае деплоя микросервисов вообще пофиг статическая или динамическая линковка (кроме exe'шника все равно будут файлы и пофиг сколько их копировать, да и делается это скриптом). Грубо говоря
./configure
make
make install DSTDIR=../dst

отработают одинаково независимо от --static у ./configure
IMHO, в таком случае динамическая линковка не дает никаких преимуществ — поэтому используют статику (а вовсе не потому, что это сильно проще).
Re[12]: Язык Go - слабые стороны
От: Reset  
Дата: 16.02.22 17:26
Оценка:
Pzz>Нет, уменьшилась. Если представить себе проект в виде графа зависемостей, сложность определяется не столько количеством вершин этого графа, сколько количеством связей между ними.

Что тебе мешает в монолите поддерживать минимум связей? Более того, разделение на модули придумали еще когда термин микросервисы не существовал (да и сетей почти не было).

Микросервисы решают 2 задачи: делают возможным реализацию приложения, которому не хватает ресурсов одной машины (гугл/фейскнига) и делают возможным разработку приложения, которым занимаются разные команды с разными дедлайнами, задачам и приоритетами (тут достаточно договориться о протоколе обмена данными и времени реализации изменений, а также поддержки легаси — остальное в каждой команде решают независимо, а вот запихать это в один монолит — возникнет неразруливаемый срач с выяснением у кого длиннее).
Re[13]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 19:33
Оценка:
Здравствуйте, Ikemefula, Вы писали:

S>>Достаточно нескольких (2-5) популярных дистрибутивов поддерживать. Всё остальное — "мы не поддерживаем данный дистрибутив но готовы помочь за допплату"

I> Ты сам то понял что сказал?
Не только понял но и даже знаю что в таких ситуациях делать.

I>Вот именно по этому all-in-one предпочтительнее. Кроме того, ты забыл, что вместе с твои софтом будей и другой, у которого могут быть совсем другие предпочтения по версиям.

Решение подсказать? Нужно свой софт писать так, чтобы использовал те версии либ, которые есть в дистрибутиве. А если нет такой либы вообще, то в свой репозиторий складывать в виде зависимости к пакету с твоим софтом. А заказчику давать линк на свою репу, которую надо подключить ему к дистрибутиву чтобы потом стандартными средствами установить ваш софт.



I>>>1. кто куда чего может задеплоить

S>>В рекомендованные вами дистрибутивы. Почемуто считается нормальным указываать версию мака и виндов для которых приложение работает. Но с линупсом надо обязательно вообще всё!!11.
I>Неинтересно. Чет заказчик на такое не жаждет соглашаться. Что предложишь, оскорбить его, обмануть, кинуть?
Если заказчик платит деньги чтобы ваш софт появился в его дистрибутиве то вам нужно опакетить ваш софт для того дистрибутива.


I>>>2. какие новые неизвестные баги могут быть привнесеные в какую из десятков или сотен зависимостей?

S>>Вот это и есть — "закостеневание". Это когда "нетнет, обновляться нинада, уже и так хорошо, а вдруг там монстры??7"
I>А ты похоже не понял, что такое новый неизвестный баг. Для тебя это может быть известная проблема, типа "чтото не работает", а вот конкретные причины далеко не факт, что сможешь сам выяснить. И соответсвенно баг у тебя булькает, но в багтрекер он не попадёт.
У меня значит получалось выяснить что и почему не работает (и это включало в себя например сборку подправленного постгреса с дополнительным дебаг-логом). А у настоящих тру-программистов-профессионалов лапки.


I>>>Бинго! И автор либы через месяц сообщает, что он пофиксит, но возможно после того, как выкатит две версии.

S>>Автор общается, отвечает — ждём. А пока работаем со старой версией.
I>Похоже, ты уже начал кое что понимать.
Я изначально к этому вёл, но у тебя закостенение "шеридан-долбоклюй-непрофессионал" и это мешает тебе воспринимать то что я пишу.

I>>>А потом заходишь ты в гитхаб либы, и видишь, что эта проблема булькает уже три последних года.

S>>Два варианта:
S>>1. Сменить библиотеку.
I> При смене библиотеки тебе гарантирован длиный-длинный хвост из багов, и сама эта активность мягко говоря не быстрая. И далеко не факт, что есть другая библиотека, которая подходит под твои цели.
S>>2. Форкнуть и пофиксить.
I> Смешно. У тебя похоже экономическая составляющая вообще в рассуждениях не присутствует. С чего ты взял, что влегкую фиксанешь произвольную либу?
А я говорил что это будет легко? Я сказал что если либа не поддерживается больше, то выполнить один из этих двух пунктов тупо придётся. Ты будешь с этим спорить? Ты правда программист?


S>>Почему так? Потому что де-факто эта либа уже не поддерживается никем.

I>Наоборот.
Ну то есть никто на протяжениии нескольких лет не чинит баги означает что либа полностью и адекватно поддерживается автором?
Г — лоГика.

I>>>Похоже, что ты не различаешь "новые известные" и "новые неизвестные". Первые — в баклоге. А вот остальные булькают то тут то там и возможно не скоро попадут в баклог.

S>>Я про новые неизвестные и пишу. Нашол такой — в багтрекер его.
I>У тебя багтрекер это синоним "магия". Ну есть баг в том трекере, только например описан он совсем не так, как тебя проявляется. Что дальше?
Опиши так как у тебя проявляется. Надеюсь ты сам понимаешь, что это поможет автору баг исправить.


I>>>Это какие то общие слова вида "хорошее лучше плохого".

S>>В противовес твоему "старое лучше свежего" звучат более логично, не находишь ли?
I>У тебя в основном "разрабы некомпетентны" и "хорошее лучше плохого". "старое лучше свежего" — это ты забрало поднять забыл. Смотри мой пример про OutOfMemory.
А как ещо назвать разрабов, которые говорят "если на баг никто не отвечает, то ты неправ что либа не поддерживается автором а наоборот."?


I>>>Что бы баг попал в багтрекер, его ктото должен обнаружить, идентифицировать, подготовить описание, стабильную последовательность. До того этот баг будет просто булькать тут и там и подламывать разработку.

S>>Ты и твоя команда это будут делать. Ты и твоя команда. В рабочем порядке во время запланированного обновления используемых либ на этапе тестирования свежего перед принятием решения "обновляться можно уже сейчас или ещо подождать?".
I>Выглядит как юношеский максимализм. Я и моя команда и без тебя все это делаем.
Если вы и так это всё делаете, то какого Иакова вы мне тут мозги полоскаете? Так и напиши "да, мы этим занимаемся, но по мере возможностей". И вопросов не будет. Срач ради срача?


I>Зато факт в том, что большинство долгоиграющих проектов такой роскоши позволить себе не могут. Причины самые разные. И только ты один обвиняешь разрабов в некометентности. Тут похоже весь мир живет не по твоим правилам

Причин две: лень и некомпетентность. Я бы добавил третью: недальновидность. Но программисту бизнес-бабки-платит-я-кодю этого не понять.
Matrix has you...
Отредактировано 16.02.2022 19:36 Sheridan . Предыдущая версия .
Re[9]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 16.02.22 19:42
Оценка:
Здравствуйте, CreatorCray, Вы писали:

S>>Нууу вообщето чаще всего да.

CC>У тебя на машине только одна единственная прога стоит?
А если ты про то где я щас работаю, то у нас стандартная установка продукта — шесть машин. Точнее, одна, три или шесть и больше. Как правило это виртуалки.
Matrix has you...
Re[13]: Язык Go - слабые стороны
От: Alex912  
Дата: 16.02.22 19:47
Оценка:
Здравствуйте, Reset, Вы писали:

R>Микросервисы решают 2 задачи: делают возможным реализацию приложения, которому не хватает ресурсов одной машины (гугл/фейскнига) и делают возможным разработку приложения, которым занимаются разные команды с разными дедлайнами, задачам и приоритетами (тут достаточно договориться о протоколе обмена данными и времени реализации изменений, а также поддержки легаси — остальное в каждой команде решают независимо, а вот запихать это в один монолит — возникнет неразруливаемый срач с выяснением у кого длиннее).


Бывает например одна команда разработчиков пишет код для разных дочек компании. Причем часть компании может быть публичной. Тут микросервисы хорошо ложаться. Монолит конечно попроще начинать.
Re[22]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 19:47
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>>>Поменяли системную инсталляцию Питона, и старые скрипты на Питоне загнулись.

S>>Очевидно что не все.
Pzz>Ну внешний, киосеровский, скрипт загнулся. hg-git, который приходит,
Так он ещё и установлен был мимо федоровских репозиториев что ли? Чего ты тогда ждал в таком случае, на что надеялся?

Pzz>как стандартный федоровский пакет, тоже загнулся. Так что, скорее все, чем не все.

2 != все.
Matrix has you...
Re[4]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 16.02.22 19:58
Оценка:
Здравствуйте, Hobbes, Вы писали:

H>Каких непостижимых фич? Итераторы блин непостижимые? Перегрузка оператора сравнения это непостижимо? Без перегрузки оператора сравнения зачастую нельзя использовать тип для индексирования map.


ЧСХ, я сразу написал что в гошечке нет ООП и потому надо закапывать. Но пытаются из-за этого закопать меня
Matrix has you...
Re[8]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 20:48
Оценка:
Здравствуйте, Reset, Вы писали:

R>Я так и не понял, как статическая линковка библиотек спасает от сложностей с обновлениями библиотек по сравнению с динамической линковкой. В обоих случаях: обновляешь библиотеки — получаешь сложности, не обновляешь — все хорошо.


При динамической линковке у тебя либы (или часть либ) могут вместе с дистрибутивом обновиться. И ты этим не очень-то управляешь.
Re[7]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 17.02.22 06:45
Оценка:
Здравствуйте, CreatorCray, Вы писали:

S>> Когда в команде раздрай и разные участки проекта требуют разных версий одной и той же библиотеки.

CC>Ну а кроме твоего проекта на машине у кастомера вообще больше ничего не присутствует, да?

Да. Про контейнеры слышал?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[8]: Опять дваццатьпять
От: CreatorCray  
Дата: 17.02.22 09:55
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Да. Про контейнеры слышал?

Предлагаешь каждую софтину запихивать в контейнер?
А не дороговато ли выйдет?
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[9]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 17.02.22 10:54
Оценка:
Здравствуйте, CreatorCray, Вы писали:

НС>>Да. Про контейнеры слышал?

CC>Предлагаешь каждую софтину запихивать в контейнер?
CC>А не дороговато ли выйдет?
Ты штооооа!11 Это же новомодный тренд!!11 Всё в контейнеры, в кубы!


Как по мне — контейнеры нужны в паре случаев всего:
1. Для разработки, чтобы не захламлять рабочую машину всевозможными кроликами, постгрями, мускулями итд
2. Когда нужно уметь разворачивать мощности при возрастании нагрузки и сворачивать обратно потом (aws тотже)

В остальных случаях нужно критически подходить к идее контейниризации.
Matrix has you...
Re[9]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 17.02.22 11:35
Оценка:
Здравствуйте, CreatorCray, Вы писали:

НС>>Да. Про контейнеры слышал?

CC>Предлагаешь каждую софтину запихивать в контейнер?

Да. Речь, разумеется, про бек, а не про десктоп.

CC>А не дороговато ли выйдет?


Нет. Для того контейнеры и придумали, чтобы не было дороговато.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[10]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 17.02.22 11:35
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>2. Когда нужно уметь разворачивать мощности при возрастании нагрузки и сворачивать обратно потом (aws тотже)


А где ты еще увидел Go, кроме "aws тотже"?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[16]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 17.02.22 11:44
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Я не историк, мне трудно сказать, кто появился раньше.


О микросервисах всерьез заговорили в 2011, первые оисания реальных архитектур появились в 2012. Первый релиз докера — 2013. Формально, конечно, позже, но интервал слишком мал чтобы именно микросервисы послужили причиной его появления, на что усиленно намекает Шеридан, по обыкновению своему слишком картину примитивизируя.

Pzz>Но в принципе, "микросервисы" — это модное слово для давно известной идеи.


Не совсем. Именно микросервисы как идея — довольно свежая вещь. Другое дело что в реальности обычно идеальных микросервисов нет, и выстраивается вполне классическая SOA архитектура с некоторыми нюансами.
Тут еще надо понимать, что микросервисы сейчас стали популярны не столько из-за исходной идеи, сколько из-за того что вокруг них сформировалась экосистема, т.н. cloud native решения, которые позволяют разумными услилиями строить очень сложные high load решения.
А проблема тут в том, что вокруг микросервисов развелось огромное количество мифов и ритуалов, а по сути многие просто не понимают в чем их суть. Тут рядом эпичный топик
Автор: BlackEric
Дата: 22.11.21
на тему есть.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[13]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 17.02.22 11:50
Оценка:
Здравствуйте, Reset, Вы писали:

R>Микросервисы решают 2 задачи: делают возможным реализацию приложения, которому не хватает ресурсов одной машины (гугл/фейскнига)


И чем мешает это сделать не микросервисам?

R> и делают возможным разработку приложения, которым занимаются разные команды с разными дедлайнами, задачам и приоритетами


А делают возможным это они за счет того, что ...

Разбиение большой системы на малые части в очень значительной степени снижает сложность системы

... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[11]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 17.02.22 12:18
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>2. Когда нужно уметь разворачивать мощности при возрастании нагрузки и сворачивать обратно потом (aws тотже)

НС>А где ты еще увидел Go, кроме "aws тотже"?
Всмысле где применяется гошечка? Да куча экспортеров статистики под prometheus/influxdb на ём, да и вообще почти весь этот стек мониторинга на ём.
Matrix has you...
Re[11]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 17.02.22 12:20
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Есть ещё третий вариант, и именно он обеспечил массовость популярность контейнеров и докера в частности. Это когда сидит макака, ваяет у себя на локалхосте на последней убунту приложение, тащит для этого кучу всякого разношерстного и разноверсионного хлама из самых разных реп, самыми разными пакетными менеджерами, отличными от штатного (pip-ы, npm-ы). Поучается нагроможение и мессиво. Работать будет только у него на локалхосте. А нужно чтоб работало где-то на любом сервере, в закрытом или публичном облаке. Что делать? Завернуть всю эту кучу вместе с загаженным обазом ОС в контейнер, и этот контейнер можно уже запускать где угодно. А то, что вместе с жалкими 10KB творения макаки на каждый сервер тащится ещё 500MB образа ОС, то это макаку не волнует, а провайдеры только за-повышенное потребление ресурсов клиентами для них прибыль.

Да, это и есть хк-хк-продакшн. "Нам пофиг как это работает, пусть хоть как нибудь взлетит а клиент памяти/дисков/серверов докупит"

S>Контейнеры, их необходимость и популярность-это деградация именно культуры разработки ПО.

Именно про это я и пишу. Против этого я тут и выступаю.
Matrix has you...
Re[10]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 17.02.22 12:23
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

CC>>А не дороговато ли выйдет?

НС>Нет. Для того контейнеры и придумали, чтобы не было дороговато.
А ты считал стоимость сопровождения? Стоимость специалиста по кубам, нопример?
Matrix has you...
Re[7]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 17.02.22 12:35
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


Ему это все уже объясняли. На что был получен ответ, что бизнес должен идти в жопу со своими потребностями пока программисты обновляют все либы в проекте. Так что не про то ты рассказываешь. Надо рассказать что в жопу пойдет Шеридан (или вообще вся индустрия разработки, если его мечталки о поведении разработчиков сбудутся), и что большинство из присутствующих занимаются разработкой не ради мудя почесать, а чтобы денег заработать.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[12]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 17.02.22 12:37
Оценка:
Здравствуйте, Sheridan, Вы писали:

НС>>А где ты еще увидел Go, кроме "aws тотже"?

S>Всмысле где применяется гошечка?

Да

S> Да куча экспортеров статистики под prometheus/influxdb на ём, да и вообще почти весь этот стек мониторинга на ём.


Т.е. "aws тотже".
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Язык Go - слабые стороны
От: Mr.Delphist  
Дата: 17.02.22 13:36
Оценка:
Здравствуйте, Pzz, Вы писали:

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


Эка невидаль — даже FoxPro это умел. Вопрос: где сейчас Фокс, и где сишечка?
Re[5]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 17.02.22 14:21
Оценка:
Здравствуйте, Sheridan, Вы писали:

H>>Каких непостижимых фич? Итераторы блин непостижимые? Перегрузка оператора сравнения это непостижимо? Без перегрузки оператора сравнения зачастую нельзя использовать тип для индексирования map.

S>ЧСХ, я сразу написал что в гошечке нет ООП и потому надо закапывать. Но пытаются из-за этого закопать меня
???

В Go есть ООП, причём достаточно крутой за счёт структурной типизации.
Sapienti sat!
Re[6]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 17.02.22 14:36
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Закапывать надо ООП, а не гошечку.

Причины? Серьёзно.
Matrix has you...
Re[12]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 17.02.22 14:38
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

CC>>>>А не дороговато ли выйдет?

НС>>>Нет. Для того контейнеры и придумали, чтобы не было дороговато.
S>>А ты считал стоимость сопровождения?
НС>Кого, контейнеров? И что подразумевается под их сопровождением?
S>> Стоимость специалиста по кубам, нопример?
НС>При чем тут куб? Куб решает намного больше задач, чем контейнеры.

Кто будет инфраструктуру настраивать?
Matrix has you...
Re[6]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 17.02.22 14:39
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>В Go есть ООП, причём достаточно крутой за счёт структурной типизации.

Унаследуйся от класса и переопредели метод сравнения.
Matrix has you...
Re[8]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 17.02.22 14:40
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

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

НС>Ему это все уже объясняли. На что был получен ответ, что бизнес должен идти в жопу со своими потребностями пока программисты обновляют все либы в проекте. Так что не про то ты рассказываешь.
Если бизнес скажет тебе вставить затычку в пятую точку — так и сделаешь?
Бизнес нанимает профессионала чтобы решать задачи бизнеса но потом не слушает профессионала и требует вырастить руки на жопе. Это так работает?
Matrix has you...
Re[11]: Опять дваццатьпять
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.02.22 14:57
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Есть ещё третий вариант, и именно он обеспечил массовость популярность контейнеров и докера в частности. Это когда сидит макака, ваяет у себя на локалхосте на последней убунту приложение, тащит для этого кучу всякого разношерстного и разноверсионного хлама из самых разных реп, самыми разными пакетными менеджерами, отличными от штатного (pip-ы, npm-ы). Поучается нагроможение и мессиво. Работать будет только у него на локалхосте. А нужно чтоб работало где-то на любом сервере, в закрытом или публичном облаке. Что делать? Завернуть всю эту кучу вместе с загаженным обазом ОС в контейнер, и этот контейнер можно уже запускать где угодно. А то, что вместе с жалкими 10KB творения макаки на каждый сервер тащится ещё 500MB образа ОС, то это макаку не волнует, а провайдеры только за-повышенное потребление ресурсов клиентами для них прибыль.

Падажжите. Разве там не будет слой незагаженного образа ОС, поверх которого накачены какие-то жалкие пара сотен мегабайт "кучи разношёрстного и разноверсионного хлама", вместе с 10кб собственно пользовательского кода?
При этом незагаженный образ разделяется между всеми контейнерами на конкретном хосте?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[12]: Опять дваццатьпять
От: Vetal_ca Канада http://vetal.ca
Дата: 17.02.22 15:05
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Падажжите. Разве там не будет слой незагаженного образа ОС, поверх которого накачены какие-то жалкие пара сотен мегабайт "кучи разношёрстного и разноверсионного хлама", вместе с 10кб собственно пользовательского кода?

S>При этом незагаженный образ разделяется между всеми контейнерами на конкретном хосте?


Вот на экономию этих мегабайт Шеридан их хочет оправдать свой подход, идущий в разрез с реальностью бытия.
Да, на этот выхлоп нужно еще розги покупать и лояльность программистов, согласных терпеть эту Салтычиху

И, понятное дело, экономия на один Image/VM, а не инстанс каждого контейнера. Тут только на одну розгу и хватит
Re[13]: Опять дваццатьпять
От: Vetal_ca Канада http://vetal.ca
Дата: 17.02.22 15:06
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Кто будет инфраструктуру настраивать?


Амазон, Гугл, Azure, ...

На крайняк подгонят собрата Шеридана, один раз на Ansible кластер onprem накатить.
Re[13]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 17.02.22 15:11
Оценка:
Здравствуйте, Vetal_ca, Вы писали:

V_>Вот на экономию этих мегабайт Шеридан их хочет оправдать свой подход, идущий в разрез с реальностью бытия.

Нет. Никакой экономии не будет. Потому как у вас программисты все пишут вразнобой и в проекте может быть несколько версий одной и той же либы. А тут недалеко уже и от нескольких версий дистрибутива.
Но если у вас не так, и всё чётко: либы идентичные, дистрибутив тот же (у вас же ровно один слайс плюс несколько сервисов, верно?), то и контейнеры тут не нужны.
Matrix has you...
Re[14]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 17.02.22 15:14
Оценка:
Здравствуйте, Vetal_ca, Вы писали:

S>>Кто будет инфраструктуру настраивать?

V_>Амазон, Гугл, Azure, ...
У ваших заказчиков всегда есть доступ к интернетам с достаточно широкой полосой? Открою тебе тайну: далеко не у всех так.

V_>На крайняк подгонят собрата Шеридана, один раз на Ansible кластер onprem накатить.

Это было бы правдой, если бы после релиза вся команда заседа бы на другой проект и к этому никогда бы больше не возвращалась.
Практика же показывает что деплой нужно развивать вместе с проектом исходя из изменяющихся требований.
Лично я, например, одному заказчику переделывал хранилище с aws на seaweedfs для вполне успешного проекта, который в проде был к тому времени уже несколько лет.
Matrix has you...
Re[9]: Язык Go - слабые стороны
От: Vetal_ca Канада http://vetal.ca
Дата: 17.02.22 15:32
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Если бизнес скажет тебе вставить затычку в пятую точку — так и сделаешь?

S>Бизнес нанимает профессионала чтобы решать задачи бизнеса но потом не слушает профессионала и требует вырастить руки на жопе. Это так работает?

Это значит, что неопытный рекрутер нанял бесконечно отсталого, бывшего профессионала (?), который даже не понимает, что от него хотят.

Что-то бормочет про руки на жопе, загоняет сам себе затычку в зад и показывает фиги.

Это опыт для рекрутера. Учится отсеивать, чтобы не тратить на таких самоназванных "селюков-профессионалов" времени.
Re[15]: Опять дваццатьпять
От: Vetal_ca Канада http://vetal.ca
Дата: 17.02.22 15:35
Оценка:
Здравствуйте, Sheridan, Вы писали:


S>У ваших заказчиков всегда есть доступ к интернетам с достаточно широкой полосой? Открою тебе тайну: далеко не у всех так.


Ну нет, так on-prem. Обычная работенка для админа средней руки

V_>>На крайняк подгонят собрата Шеридана, один раз на Ansible кластер onprem накатить.

S>Это было бы правдой, если бы после релиза вся команда заседа бы на другой проект и к этому никогда бы больше не возвращалась.
S>Практика же показывает что деплой нужно развивать вместе с проектом исходя из изменяющихся требований.
S>Лично я, например, одному заказчику переделывал хранилище с aws на seaweedfs для вполне успешного проекта, который в проде был к тому времени уже несколько лет.

Тоже работа. Если самоокупается, то имеет право на жизнь
Re[11]: Опять дваццатьпять
От: Vetal_ca Канада http://vetal.ca
Дата: 17.02.22 15:39
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Здравствуйте, Sinclair, Вы писали:


S>>Да ну откуда? Контейнеры же из слоёв; как я понял — слои повторно используются.

S>>Поэтому если у тебя на железке 30 контейнеров с аппликухами построены на одном и том же дистрибутиве, и в 20 используется питон, а в 10 — go, то физически на диске будет лежать 1 питон и 1 го.
S>>Если кому-то потребовался питон 2.7, а не 3.1, то появится 1 экземпляр питона 2.7, при этом он никак не помешает тем 20 аппликухам, которым нужен питон 3.1.

S>Ты сам это тестил, проверял, что так оно и есть? Учитывая, что докер-это жуткое глюкалово, не удивлюсь, если это только заявлено, но так это не работает должным образом. Вот у меня на локалхосте это не работает: собираемые локально, подтягиваемые извне контейнеры, все из которых создаются на основе одного и того же базового образа из центрального registry, в течении недели-двух отжирают несколько десятков GB. Регулярно приходится делать rm -fr /var/lib/docker



Ни разу такого не видел. Хотя опыт уже значительный

Может у тебя unnamed orphaned volumes ?

docker system prune --all


Или админы у тебя там каким-то боком по докеру касперского выпускают. Тогда, да, на такой цирк никто никаких гарантий давать не будет
Re[14]: Опять дваццатьпять
От: Vetal_ca Канада http://vetal.ca
Дата: 17.02.22 15:42
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Нет. Никакой экономии не будет. Потому как у вас программисты все пишут вразнобой и в проекте может быть несколько версий одной и той же либы. А тут недалеко уже и от нескольких версий дистрибутива.

S>Но если у вас не так, и всё чётко: либы идентичные, дистрибутив тот же (у вас же ровно один слайс плюс несколько сервисов, верно?), то и контейнеры тут не нужны.

Я за этим не слежу, у всех разные требования к либам. Чтобы все оптимизировать до одного слайса, у нас есть много других, более актуальных дел. Префекционизм любой ценой — зло
Re[13]: Опять дваццатьпять
От: Vetal_ca Канада http://vetal.ca
Дата: 17.02.22 15:56
Оценка:
Здравствуйте, smeeld, Вы писали:


S>Макака одно приложение сваяет на образе одно версии убунту, второе на образе другой версии, третье на образе какой-нибудь sles11 (ибо нужные компоненты только под неё есть). И пропали твои слои


Что, у вас нет человека, который Docker image не может написать, сохранив путь макаки на требуемом образе?

Переделать под общий корпоративный стиль, какой нибудь Alpine, scratch или distroless ?

Это не та проблема, о которой-то и упоминают, вообще. Делают, и работает.
Тем более, что, собралось раз и, порядок.
Re[15]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 17.02.22 17:22
Оценка:
Здравствуйте, Vetal_ca, Вы писали:

S>>Нет. Никакой экономии не будет. Потому как у вас программисты все пишут вразнобой и в проекте может быть несколько версий одной и той же либы. А тут недалеко уже и от нескольких версий дистрибутива.

S>>Но если у вас не так, и всё чётко: либы идентичные, дистрибутив тот же (у вас же ровно один слайс плюс несколько сервисов, верно?), то и контейнеры тут не нужны.
V_>Я за этим не слежу, у всех разные требования к либам. Чтобы все оптимизировать до одного слайса, у нас есть много других, более актуальных дел. Префекционизм любой ценой — зло
Да никто перфекционизма то и не просит. Просто планируйте обновления либ и работайте по плану. Это сложно? Ну серьёзно то. Сложно? Невыполнимо?
Matrix has you...
Re[9]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 17.02.22 17:38
Оценка:
Здравствуйте, Pzz, Вы писали:

R>>Я так и не понял, как статическая линковка библиотек спасает от сложностей с обновлениями библиотек по сравнению с динамической линковкой. В обоих случаях: обновляешь библиотеки — получаешь сложности, не обновляешь — все хорошо.

Pzz>При динамической линковке у тебя либы (или часть либ) могут вместе с дистрибутивом обновиться. И ты этим не очень-то управляешь.
Ну так наверное надо отслеживать версии используемых либ и обновлять у себя?
Да ну, не может быть!
Matrix has you...
Re[16]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 17.02.22 17:52
Оценка:
Здравствуйте, Vetal_ca, Вы писали:

S>>У ваших заказчиков всегда есть доступ к интернетам с достаточно широкой полосой? Открою тебе тайну: далеко не у всех так.

V_>Ну нет, так on-prem. Обычная работенка для админа средней руки
Ты наверное не поверишь, но далеко не везде есть даже средней руки. Чтото чуть сложнее чем "скопировать вот этот каталог в home, написать в текстовом конфиг-файле настройки деплоя и запустить make deploy" и всё, лапки.
Matrix has you...
Re[11]: Язык Go - слабые стороны
От: Vetal_ca Канада http://vetal.ca
Дата: 17.02.22 17:54
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>А опытный рекрутер наймёт сразу того у кого руки из жопы и кто готов мужеложествовать если БИЗНЕСУ НАДО?



Ты думаешь, что если подкрепить несостоятельное мнение оскорбительными выражениями, и переведя верхний регистр, то твое мнение обретет хоть какой-то вес? "Кто не думает как Шеридан — тот п****ас."? "Ну согласись, что Шеридан прав, и твоя ориентация будет этим же Шериданом подтверждена"? Это твои аргументы, это твой уровень?

Знаешь, в контексте обсуждения твоя ориентация и страхи с ней связанные тут не интересны. Хотя, уши проглядываются, уж слишком часто ты апеллируешь к этому делу.
Re[12]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 17.02.22 18:02
Оценка:
Здравствуйте, Vetal_ca, Вы писали:

S>>А опытный рекрутер наймёт сразу того у кого руки из жопы и кто готов мужеложествовать если БИЗНЕСУ НАДО?



V_>Ты думаешь, что если подкрепить несостоятельное мнение оскорбительными выражениями, и переведя верхний регистр, то твое мнение обретет хоть какой-то вес? "Кто не думает как Шеридан — тот п****ас."? "Ну согласись, что Шеридан прав, и твоя ориентация будет этим же Шериданом подтверждена"? Это твои аргументы, это твой уровень?

V_>Знаешь, в контексте обсуждения твоя ориентация и страхи с ней связанные тут не интересны. Хотя, уши проглядываются, уж слишком часто ты апеллируешь к этому делу.

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

Что-то бормочет про руки на жопе, загоняет сам себе затычку в зад и показывает фиги.
Это опыт для рекрутера. Учится отсеивать, чтобы не тратить на таких самоназванных "селюков-профессионалов" времени.



Я умею разговаривать по разному и стараюсь держаться в рамках того как говорит собеседник.
Matrix has you...
Re[5]: Язык Go - слабые стороны
От: Константин Б. Россия  
Дата: 17.02.22 20:31
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

vsb>>Подход с явной обработкой выходит боком практически всегда. Ошибку либо тупо прокидывают вверх, теряя стектрейс, либо игнорируют, либо пытаются обрабатывать на месте (очень часто с багами, т.к. этот сценарий никогда не тестируют).


НС>Это потому что у тебя не С++, где исключения настолько опасная штука, что в некоторых проектах их тупо запрещают. Ну а потом эти проблемы С++ плюсовики переносят на исключения, не язык же виноват, право.


А боязнь явного возврата ошибок она по твоему откуда?
Все от сишных кодов возврата. То что проблемы С переносят на ошибки в Go — тут тоже не Go виноват.
Re[7]: Язык Go - слабые стороны
От: ononim  
Дата: 17.02.22 21:10
Оценка:
Лень было писать именно сравнение, но наследоваться и переопределять можно:
package main

import (
    "log"
)

type HZ interface
{
    Bar()
}

type Foo struct {
    id int;
}

func (foo *Foo) Bar() {
    log.Println("Foo::Bar called, id:", foo.id);
}

func (foo *Foo) SetID(newId int) {
    foo.id = newId;
}

type Fee struct {
    Foo
}

func (fee *Fee) Bar() {
    log.Println("Fee::Bar called, id:", fee.id);
    fee.Foo.Bar();
}


func callByInterface(hz HZ) {
    hz.Bar()
}

func main() {
    o:= Foo{}
    e:= Fee{}

    o.SetID(1);
    e.SetID(2);

    o.Bar();
    e.Bar();

    callByInterface(&o);
    callByInterface(&e);
}

Foo::Bar called, id: 1
Fee::Bar called, id: 2
Foo::Bar called, id: 2
Foo::Bar called, id: 1
Fee::Bar called, id: 2
Foo::Bar called, id: 2
Как много веселых ребят, и все делают велосипед...
Re[7]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 17.02.22 21:27
Оценка:
Здравствуйте, Sheridan, Вы писали:

C>>В Go есть ООП, причём достаточно крутой за счёт структурной типизации.

S>Унаследуйся от класса и переопредели метод сравнения.
Делаем интерфейс Comparable с методом Compare. И всё.
Sapienti sat!
Re[8]: Это точно наследование?
От: Sheridan Россия  
Дата: 17.02.22 23:02
Оценка:
Здравствуйте, ononim, Вы писали:

O>Лень было писать именно сравнение, но наследоваться и переопределять можно:

O>
type Foo struct {
    id int;
}

type Fee struct {
    Foo
}

func (fee *Fee) Bar() {
    log.Println("Fee::Bar called, id:", fee.id);
    fee.Foo.Bar();
}

Это точно наследование с переопределением? Я ничего не перепутал? -_-
Хоть кто нибудь на такое покупается?
Matrix has you...
Re[12]: Опять дваццатьпять
От: CreatorCray  
Дата: 17.02.22 23:08
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>>Контейнеры, их необходимость и популярность-это деградация именно культуры разработки ПО.

S>Именно про это я и пишу. Против этого я тут и выступаю.
Ты ещё наксколько я помню и против monobinary выступал, которые не имеют никакого отношения к контейнерам.
И да, кусок говна, который из себя распаковывает кучу хлама в tmp и оттуда втихаря юзает — не monobinary
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[14]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 17.02.22 23:19
Оценка:
Здравствуйте, Sinclair, Вы писали:

R>>Микросервисы решают 2 задачи: делают возможным реализацию приложения, которому не хватает ресурсов одной машины (гугл/фейскнига) и делают возможным разработку приложения, которым занимаются разные команды с разными дедлайнами, задачам и приоритетами (тут достаточно договориться о протоколе обмена данными и времени реализации изменений, а также поддержки легаси — остальное в каждой команде решают независимо, а вот запихать это в один монолит — возникнет неразруливаемый срач с выяснением у кого длиннее).

S>Самое главное, что решают микросервисы — позволяют писать код на чём угодно.
Ну как бы, на секундочку, это минус. Негоже в рамках одного проекта держать зоопарк подпроектов на разных языках. Нет, оно конечно можно, если смысл есть и профит, но мультиязычность ради мультиязычности — никуда не годится.
Такой себе аргумент, короче.

Вот разве что если речь идет про модули-плагины которые можно под ваш сервис самостоятельно писать — то да, мультиязычность будет плюсом. И это пожалуй единственное место где оно действительно оправдано.
Matrix has you...
Re[14]: Опять дваццатьпять
От: CreatorCray  
Дата: 18.02.22 01:46
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>А с другой стороны забодаешься потом эту помойку обновлять.

Какую ещё помойку?
Пришёл новый бинарь, положил его вместо старого и всё.

S>и таким образом зачинив весь использующий её софт

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

S>Ну и конечно же для подобных авторов монолитов совершенно наплевать на диски заказчиков/потребителей.

Вот это ты щас серьёзно?
Поди бинари уже десятки гигабайт весят?
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[17]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 18.02.22 05:52
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Не совсем. Именно микросервисы как идея — довольно свежая вещь. Другое дело что в реальности обычно идеальных микросервисов нет, и выстраивается вполне классическая SOA архитектура с некоторыми нюансами.

НС>Тут еще надо понимать, что микросервисы сейчас стали популярны не столько из-за исходной идеи, сколько из-за того что вокруг них сформировалась экосистема, т.н. cloud native решения, которые позволяют разумными услилиями строить очень сложные high load решения.

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

Смысл всегда один и тот же: локализовать мысль программиста внутри отдельных процессов, не давая ей расползаться, и локализовать последствия недодуманной программистской мысли внутри отдельных процессов, не давая им расползаться.

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

НС>А проблема тут в том, что вокруг микросервисов развелось огромное количество мифов и ритуалов, а по сути многие просто не понимают в чем их суть. Тут рядом эпичный топик
Автор: BlackEric
Дата: 22.11.21
на тему есть.


Ну, так всегда бывает с вещами, которые больше красивое и маркетинговое слово, чем технологическая идея.
Re: Язык Go - слабые стороны
От: bitboi Голландия  
Дата: 18.02.22 06:28
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вот, кстати, что на счет Go?


S>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?


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

но вот библиотеки — говно, не потому что они плохо или некачественно сделаны, а потому что они какие-то слишком самобытные

почему для того чтобы соединиться с хостом мне нужно вызывать метод Dial?
где мои monotonic clocks? почему вместо этого time.Now() возвращает объект, который содержит две метки времени и пытается быть умным при вычислении интервалов?
какого лешего все операции с файлами принимают String вместо специального типа Path, String это юникодная строка, а путь в файловой системе не обязан ею быть

таких странностей там очень много, это такие вещи, которые бы просто не приняли на ревью, если бы их попытались пропихнуть в тот же boost
Re[14]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 18.02.22 06:38
Оценка:
Здравствуйте, Sheridan, Вы писали:

НС>>Т.е. "aws тотже".

S>Не распарсил что ты имеешь в виду.

Потерял нить разговора? Бывает. Я имею в виду что го получил рапространение почти исключительно в контексте облачного бэка, так что на особенности его работы вне контейнеров по большому счету плевать.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[13]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 18.02.22 06:38
Оценка:
Здравствуйте, Sheridan, Вы писали:

НС>>>>Нет. Для того контейнеры и придумали, чтобы не было дороговато.

S>>>А ты считал стоимость сопровождения?
НС>>Кого, контейнеров? И что подразумевается под их сопровождением?
S>>> Стоимость специалиста по кубам, нопример?
НС>>При чем тут куб? Куб решает намного больше задач, чем контейнеры.
S>Кто будет инфраструктуру настраивать?

Ты не ответил на вопрос.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[15]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 18.02.22 06:38
Оценка:
Здравствуйте, Sheridan, Вы писали:

V_>>Амазон, Гугл, Azure, ...

S>У ваших заказчиков всегда есть доступ к интернетам с достаточно широкой полосой? Открою тебе тайну: далеко не у всех так.

У тех кто покупает решения, требующие кубер и при этом не готов тратиться на свой ДЦ — у всех.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[11]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 18.02.22 06:38
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Ты сам это тестил, проверял, что так оно и есть?


Да, проверяли, так и есть.

S> Учитывая, что докер-это жуткое глюкалово,


Современный кубер докера и не использует. А контейнеры как таковые в линухе вполне вылизаны и стабильны.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[18]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 06:38
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Паттерн "разбить все на взаимодействующие изолированные процессы"


Микросервисы это больше и более конкретно, чем этот паттерн.

Pzz>Смысл всегда один и тот же


Смысл 99% архитектурных паттернов — достижение low coupling при условии high cohesion. Но этот факт никак не обесценивает эти паттерны.

Pzz>Ну, так всегда бывает с вещами, которые больше красивое и маркетинговое слово, чем технологическая идея.


Тем не менее микросервисы это вполне конкретная технологическая идея.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[7]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 06:41
Оценка:
Здравствуйте, Sheridan, Вы писали:

НС>>Закапывать надо ООП, а не гошечку.

S>Причины?

Неадекватность современным задачам, плохо работающие идеи.

S>Серьёзно.


Абсолютно.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[7]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 06:43
Оценка:
Здравствуйте, Sheridan, Вы писали:

C>>В Go есть ООП, причём достаточно крутой за счёт структурной типизации.

S>Унаследуйся от класса и переопредели метод сравнения.

Это не задача, а решение, одно из. Задача называется динамическая диспетчеризация, и у нее есть много вариантов решения, не только полиморфизм классов в ОО стиле.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[11]: Опять дваццатьпять
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.02.22 06:44
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Ты сам это тестил, проверял, что так оно и есть?

Если честно — нет. У меня опыт с докером — только в рамках университетского курса.
Но было бы странно, если бы в нём не работали базовые штуки. Так-то контейнерных виртуализаторов — как говна за баней. Докер славен именно своей инфраструктурой и вот такими оптимизациями.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 06:45
Оценка:
Здравствуйте, Константин Б., Вы писали:

КБ>А боязнь явного возврата ошибок она по твоему откуда?


Где ты увидел боязнь? Возврат ошибок порождает кучу макаронного бойлерплейта в любом языке (включая го, хоть и в меньшей степени), это факт, а не боязнь.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[8]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.02.22 06:50
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Абсолютно.
Вот я всё больше начинаю к той же точке зрения склоняться.
Несмотря на то, что всю жизнь (с 10 класса) писал на языках с ООП, и привык мыслить именно им.

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

Если вернуться к истокам, то ООП было изобретено для многооконного GUI. Интересно разобраться, как рисовать гую на ФП — сильно хуже, чем в ООП, а то может быть и лучше.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.02.22 06:54
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:


НС>Это не задача, а решение, одно из. Задача называется динамическая диспетчеризация, и у нее есть много вариантов решения, не только полиморфизм классов в ОО стиле.

Именно. Причём ООПшная архитектура тут — одна из самых неудачных.
Корректно реализовать метод сравнения в чистом ООП не так-то просто.
ФП-шный паттерн матчинг тут работает гораздо удобнее, по крайней мере, для замкнутых иерархий.
А ситуацию, где нам может потребоваться метод сравнения для открытых иерархий, я представить затрудняюсь.
И, опять-таки, для такой ситуации написать корректный ОО-код будет крайне тяжело.
В основном потому, что трудно предсказать, какое поведение ожидается от сравнения разнотипных объектов.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[15]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 18.02.22 07:08
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС> Я имею в виду что го получил рапространение почти исключительно в контексте облачного бэка, так что на особенности его работы вне контейнеров по большому счету плевать.

Бгггг. Мало того что монолит, так его ещо и на всякий случай изолировать? Чтобы что?
Не, ну понятно, амазон, все дела. Там контейнеры и всё такое. А если без амазона? Тоже в контейнер запихивать будете?
Это такой современный фетиш?
Matrix has you...
Re[14]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 18.02.22 07:10
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>>>Нет. Для того контейнеры и придумали, чтобы не было дороговато.

S>>>>А ты считал стоимость сопровождения?
НС>>>Кого, контейнеров? И что подразумевается под их сопровождением?
S>>>> Стоимость специалиста по кубам, нопример?
НС>>>При чем тут куб? Куб решает намного больше задач, чем контейнеры.
S>>Кто будет инфраструктуру настраивать?
НС>Ты не ответил на вопрос.
Будем в детский сад играть? Ладно, я это тоже могу.
Ты первый не ответил на вопрос.
Matrix has you...
Re[16]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 18.02.22 07:11
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:


V_>>>Амазон, Гугл, Azure, ...

S>>У ваших заказчиков всегда есть доступ к интернетам с достаточно широкой полосой? Открою тебе тайну: далеко не у всех так.
НС>У тех кто покупает решения, требующие кубер и при этом не готов тратиться на свой ДЦ — у всех.
Ну да, ну да...
По опросам гугла на главной странице — 100% людей пользуются интернетом....
Matrix has you...
Re[10]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 18.02.22 07:11
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>Бизнес нанимает профессионала чтобы решать задачи бизнеса но потом не слушает профессионала

НС>С чего ты взял что ты профессионал? Сам так решил? То что ты тут пишешь — уровень любителя.
Я тут при чом?
Matrix has you...
Re[9]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 07:11
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Несмотря на то, что всю жизнь (с 10 класса) писал на языках с ООП, и привык мыслить именно им.


Я в какой то момент вернулся и перечитал начало книжки Гради Буча (которая Object Solutions). Там очень доходчиво и чисто про ООП изложено, и вместе с тем хорошо понимаешь, насколько оно натянуто и плохо стыкуется с реальным кодом и реальными задачами, а не какой нибудь модельной автоматизацией теплицы.

S>Если вернуться к истокам, то ООП было изобретено для многооконного GUI. Интересно разобраться, как рисовать гую на ФП — сильно хуже, чем в ООП, а то может быть и лучше.


Судя по тому что ФП уже много десятилетий, а ФП гуя вменяемого нет до сих пор — сильно. Нужны какие то новые подходы.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[8]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 18.02.22 07:12
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>Закапывать надо ООП, а не гошечку.

S>>Причины?
НС>Неадекватность современным задачам, плохо работающие идеи.
эммм... Можешь более подробно пжлст?
Matrix has you...
Re[8]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 18.02.22 07:14
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

C>>>В Go есть ООП, причём достаточно крутой за счёт структурной типизации.

S>>Унаследуйся от класса и переопредели метод сравнения.
НС>Это не задача, а решение, одно из. Задача называется динамическая диспетчеризация, и у нее есть много вариантов решения, не только полиморфизм классов в ОО стиле.
А тут речь именно про ООП. Человек сказал что в Go есть крутой ООП. Он не сказал "ООП нет, но задача решится об динамическую типизацию".
Matrix has you...
Re[16]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 18.02.22 07:14
Оценка:
Здравствуйте, Sheridan, Вы писали:

НС>> Я имею в виду что го получил рапространение почти исключительно в контексте облачного бэка, так что на особенности его работы вне контейнеров по большому счету плевать.

S>Бгггг. Мало того что монолит, так его ещо и на всякий случай изолировать? Чтобы что?

Less overhead
Containers require less system resources than traditional or hardware virtual machine environments because they don’t include operating system images.
Increased portability
Applications running in containers can be deployed easily to multiple different operating systems and hardware platforms.
More consistent operation
DevOps teams know applications in containers will run the same, regardless of where they are deployed.
Greater efficiency
Containers allow applications to be more rapidly deployed, patched, or scaled.
Better application development
Containers support agile and DevOps efforts to accelerate development, test, and production cycles.


S>Не, ну понятно, амазон, все дела. Там контейнеры и всё такое. А если без амазона?


А если без амазона, то там го в следовых количествах. Ты вообще читаешь мои сообщения? Что за тупая манера задавать вопросы, на которые уже дан ответ?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[17]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 18.02.22 07:21
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>>>У ваших заказчиков всегда есть доступ к интернетам с достаточно широкой полосой? Открою тебе тайну: далеко не у всех так.

НС>>У тех кто покупает решения, требующие кубер и при этом не готов тратиться на свой ДЦ — у всех.
S>Ну да, ну да...
S>По опросам гугла на главной странице — 100% людей пользуются интернетом....

По делу есть что сказать? Что это за заказчик такой, у которого нет инета, зато есть свой большой ДЦ, и при этом ему почему то слишком дорого развернуть OpenShift?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[15]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 18.02.22 07:21
Оценка:
Здравствуйте, Sheridan, Вы писали:

НС>>>>>>Нет. Для того контейнеры и придумали, чтобы не было дороговато.

S>>>>>А ты считал стоимость сопровождения?
НС>>>>Кого, контейнеров? И что подразумевается под их сопровождением?
S>>>>> Стоимость специалиста по кубам, нопример?
НС>>>>При чем тут куб? Куб решает намного больше задач, чем контейнеры.
S>>>Кто будет инфраструктуру настраивать?
НС>>Ты не ответил на вопрос.
S>Будем в детский сад играть?

Вопрос к тебе зачем ты играешь в детский сад.

S> Ладно, я это тоже могу.Ты первый не ответил на вопрос.


Потому что твой вопрос в стиле "ты уже перестал пить коньяк по утрам". Я задал тебе уточняющий вопрос. Тут ты понял что спорол фигню и начал всячески уходить от темы. Так будет ответ или засчитываем слив?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[17]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 18.02.22 07:27
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>> Я имею в виду что го получил рапространение почти исключительно в контексте облачного бэка, так что на особенности его работы вне контейнеров по большому счету плевать.

S>>Бгггг. Мало того что монолит, так его ещо и на всякий случай изолировать? Чтобы что?

НС>Less overhead
НС>Containers require less system resources than traditional or hardware virtual machine environments because they don’t include operating system images.

Но больше, чем "без контейнеров". В том числе и сложнее сопровождение.
Да-да-да, контейнеры разворачиваются чуть ли не по щелчку пальцев. Но чтобы это произошло ктото должен это описать, настроить, подготовить инфраструктуру и вот это вот всё.
С тем же успехом можно не в контейнеры а в ansible/chif, да хоть тупо в скрипты. Ну, в том смысле что время и туда и туда всё равно потратится. Не аргумент, крч.


НС>Increased portability
НС>Applications running in containers can be deployed easily to multiple different operating systems and hardware platforms.


Ой, ВНЕЗАПНО виртуальная машина. Причом следующим же пунктом после "vm нинужны!"


НС>More consistent operation
НС>DevOps teams know applications in containers will run the same, regardless of where they are deployed.

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


НС>Greater efficiency
НС>Containers allow applications to be more rapidly deployed, patched, or scaled.

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


НС>Better application development
НС>Containers support agile and DevOps efforts to accelerate development, test, and production cycles.

Наоборот. agile and DevOps могут использовать контейнеры. А могут и не использовать.
Matrix has you...
Re[18]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 18.02.22 07:28
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Что это за заказчик такой, у которого нет инета, зато есть свой большой ДЦ, и при этом ему почему то слишком дорого развернуть OpenShift?

Расскажу только, что у него astra linux smolensk.
Matrix has you...
Re[12]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 18.02.22 07:35
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>>>Бизнес нанимает профессионала чтобы решать задачи бизнеса но потом не слушает профессионала

НС>>>С чего ты взял что ты профессионал? Сам так решил? То что ты тут пишешь — уровень любителя.
S>>Я тут при чом?

НС>При том что рекомендации плевать на задачи бизнеса и постоянно обновлять либы идут исключительно от тебя. Профессионал такого бизнесу навязывать не будет.

При чом тут "навязывать"? Это как раз та самая работа, за которую бизнес платит деньги. Бизнес хочет стабильный, развивающийся продукт. И нанимает для этого профессионала.

НС>Я тебе больше скажу, бизнес часто такое и не навязывает. Бизнес просто просит реализовать набор фич. А решение по тому когда мы либы обновляем, а когда занимаемся другими задачами принимают разработчики. И инициатива тормознуть обновление почти всегда исходит от них. Бизнес скорее наоборот, прибежит с найденной уязвимостью и попросит что то обновить.

А что мешает в ответ на моё "планируйте обновления" (переведу на бизнес-язык: "сообщите бизнесу, что в случае долгого не-обновления может случиться 'ой' и придется потратить сотни нефти на исправление") написать "мы както так приблизительно и работаем"
Зачем вы мне пишете тогда фразы типа "обновлять ненужно"? Срач ради срача?
Matrix has you...
Re[9]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 07:36
Оценка:
Здравствуйте, Sheridan, Вы писали:

НС>>Неадекватность современным задачам, плохо работающие идеи.

S>эммм... Можешь более подробно пжлст?

Могу
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[9]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 07:36
Оценка:
Здравствуйте, Sheridan, Вы писали:

НС>>Это не задача, а решение, одно из. Задача называется динамическая диспетчеризация, и у нее есть много вариантов решения, не только полиморфизм классов в ОО стиле.

S>А тут речь именно про ООП.

Нет, тут речь про конкретное решение при помощи наследования из ООП.

S>Он не сказал "ООП нет, но задача решится об динамическую типизацию".


Ты по прежнему не в состоянии прочесть что тебе пишут.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[13]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 07:41
Оценка:
Здравствуйте, Sheridan, Вы писали:

НС>>При том что рекомендации плевать на задачи бизнеса и постоянно обновлять либы идут исключительно от тебя. Профессионал такого бизнесу навязывать не будет.

S>При чом тут "навязывать"? Это как раз та самая работа, за которую бизнес платит деньги.

Бизнес не платит деньги за обязательное и постоянное обновление либ.

S> Бизнес хочет стабильный, развивающийся продукт.


Осталось доказать что постоянное обновление всех либ — обязательное условие для стабильного, развиваюющегося продукта.

S>А что мешает в ответ на моё "планируйте обновления"


А сейчас ты занялся подменой. Ты заявлял не про планирование обновлений (с этим никто бы и не спорил), а про:

Используемые либы надо актуализировать при их релизе сразу во всех проектах команды. Не получается при релизе либ — так хотя бы раз в квартал актуализировать.


S>Зачем вы мне пишете тогда фразы типа "обновлять ненужно"?


Приведи где я такое написал. Не стыдно врать то?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[16]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 18.02.22 07:42
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>>>>>Нет. Для того контейнеры и придумали, чтобы не было дороговато.

S>>>>>>А ты считал стоимость сопровождения?
НС>>>>>Кого, контейнеров? И что подразумевается под их сопровождением?
S>>>>>> Стоимость специалиста по кубам, нопример?
НС>>>>>При чем тут куб? Куб решает намного больше задач, чем контейнеры.
S>>>>Кто будет инфраструктуру настраивать?
НС>>>Ты не ответил на вопрос.

НС>Потому что твой вопрос в стиле "ты уже перестал пить коньяк по утрам". Я задал тебе уточняющий вопрос. Тут ты понял что спорол фигню и начал всячески уходить от темы. Так будет ответ или засчитываем слив?

Я тебя спросил считал ли ты стоимость сопровождения. Ты включил непонятно кого и начал изображать непонимание. Я сделал вид что ты вопрос не понял и спросил его по другому, проще. Ты начал уходить от темы. И в итоге обвинил меня что от темы ушол я.
Удобно, чо.
Matrix has you...
Re[18]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 18.02.22 07:47
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Да-да-да, контейнеры разворачиваются чуть ли не по щелчку пальцев. Но чтобы это произошло ктото должен это описать, настроить, подготовить инфраструктуру


Есть возможность развернуть кластерное решение без "ктото должен это описать, настроить, подготовить инфраструктуру"?

S>С тем же успехом можно не в контейнеры а в ansible/chif, да хоть тупо в скрипты.


Можно, но контейнереы проще, универсальнее и быстрее.

S>Ой, ВНЕЗАПНО виртуальная машина.


Почему внезапно? ВМ это базовый кирпич облаков, понятно что к ней все сведется. Впрочем, есть варианты и без ВМ, см. ACI/Fargate.

S> Причом следующим же пунктом после "vm нинужны!"


Где ты увидел такой пункт?

S>

НС>>More consistent operation
НС>>DevOps teams know applications in containers will run the same, regardless of where they are deployed.

S>Ой, а без контейнеров как будто приложения работают по другому.

Они больше зависят от окружения, как следствие больше проблем при деплойменте в конкретное окружение.

S>Напомню только что ровно так же можно и без контейнеров при помощи того-же ansible.


Нельзя. Контейнер понимается намного быстрее, чем отрабатывают твои скрипты. Я уж не говорю о том, что собрать контейнер намного проще и требует меньше знаний.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[17]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 18.02.22 07:49
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Я тебя спросил считал ли ты стоимость сопровождения.


Я писал про контейнеры, ты спросил про кубер. Почему я должен включать стоимость сопровождения кубера в оценку бенефитов от контейнеров? Так при чем тут кубер?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[10]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 18.02.22 07:52
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>Это не задача, а решение, одно из. Задача называется динамическая диспетчеризация, и у нее есть много вариантов решения, не только полиморфизм классов в ОО стиле.

S>>А тут речь именно про ООП.
НС>Нет, тут речь про конкретное решение при помощи наследования из ООП.
Цитирую: "В Go есть ООП, причём достаточно крутой за счёт структурной типизации."
Matrix has you...
Re[14]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 18.02.22 07:59
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Sheridan, Вы писали:


НС>>>При том что рекомендации плевать на задачи бизнеса и постоянно обновлять либы идут исключительно от тебя. Профессионал такого бизнесу навязывать не будет.

S>>При чом тут "навязывать"? Это как раз та самая работа, за которую бизнес платит деньги.
НС>Бизнес не платит деньги за обязательное и постоянное обновление либ.
Это такая же часть работы, как и нажатие на кнопки. Так что платит. Но эта работа не выполняется (иначе бы срача не было). И то что бизнес просто не в курсе того, что часть работы не выполняется вы почемуто интерпретируете как "бизнесу это не надо".


S>> Бизнес хочет стабильный, развивающийся продукт.

НС>Осталось доказать что постоянное обновление всех либ — обязательное условие для стабильного, развиваюющегося продукта.
Потому что если не обновлять то со временем продукт тупо перестанет работать на свежих ОС.


S>>А что мешает в ответ на моё "планируйте обновления"

НС>А сейчас ты занялся подменой. Ты заявлял не про планирование обновлений (с этим никто бы и не спорил), а про:
НС>

НС>Используемые либы надо актуализировать при их релизе сразу во всех проектах команды. Не получается при релизе либ — так хотя бы раз в квартал актуализировать.

Не "при их релизе сразу", а "сразу во всех проектах". Казнить нельзя помиловать получилось, да.


S>>Зачем вы мне пишете тогда фразы типа "обновлять ненужно"?

НС>Приведи где я такое написал. Не стыдно врать то?
Я написал "вы". Тебе бы я написал "ты".
Хотя бы вон там
Автор: Ikemefula
Дата: 16.02.22
. Весь смысл поста в том что "обновлять нинадо потому что сложна, поэтому например докер"
Matrix has you...
Re[15]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 08:01
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Ну как бы, на секундочку, это минус. Негоже в рамках одного проекта держать зоопарк подпроектов на разных языках.


О, давай, расскажи как надо, очень интересно.
Вот есть у нас модуль обучения, написан на Питоне (модуль это не dll, это набор скриптов, общающихся с внешним миром через консоль и файлы и запускающий при этом десяток разных приложений), и команда, умеющая в машинное обучение и Питон. Рядом другая команда, умеющая в CV и C++, и модуль CV на C++. И третья команда, умеющая в облачный бэк и их Платформа, написанная на дотнете или жабе. И еще пяток сторонних сервисов, написанных на Go, С++, Питоне, жаве.
Теперь это все нам нужно собрать в работающий продукт, причем в разумные сроки. Твои действия?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[18]: Опять дваццатьпять
От: Cyberax Марс  
Дата: 18.02.22 08:21
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Image: emulation_workflow2.png

S>Ой, ВНЕЗАПНО виртуальная машина. Причом следующим же пунктом после "vm нинужны!"
Не совсем. qemu-aarch64/qemu-amd64 (или FIX-Emu, с которым я сейчас экспериментирую) не виртуализует всю машину, а только конкретный процесс (или группу процессов). Оно просто транслирует системные вызовы между архитектурами, и сам прикладной код.

При этом благодаря механизму binfmt_misc в Линуксе можно запустить нативный bash на x64, из него запустить midnight commander для aarch64, а затем из него запустить приложение для архитектуры risc-v.
Sapienti sat!
Re[11]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 18.02.22 08:22
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>>>А тут речь именно про ООП.

НС>>Нет, тут речь про конкретное решение при помощи наследования из ООП.
S>Цитирую: "В Go есть ООП, причём достаточно крутой за счёт структурной типизации."
Есть. Нет "наследования классов" и мастурбирования на "контроль доступа".
Sapienti sat!
Re[19]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 18.02.22 08:26
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>Да-да-да, контейнеры разворачиваются чуть ли не по щелчку пальцев. Но чтобы это произошло ктото должен это описать, настроить, подготовить инфраструктуру

НС>Есть возможность развернуть кластерное решение без "ктото должен это описать, настроить, подготовить инфраструктуру"?
Нет.


S>>С тем же успехом можно не в контейнеры а в ansible/chif, да хоть тупо в скрипты.

НС>Можно, но контейнереы проще, универсальнее и быстрее.
Все три — спорно. Если кратко — зависит от опыта того кто это делает.


S>>Ой, ВНЕЗАПНО виртуальная машина.

НС>Почему внезапно? ВМ это базовый кирпич облаков, понятно что к ней все сведется. Впрочем, есть варианты и без ВМ, см. ACI/Fargate.
S>> Причом следующим же пунктом после "vm нинужны!"
НС>Где ты увидел такой пункт?
Прямо перед обсуждаемым.


S>>

НС>>>More consistent operation
НС>>>DevOps teams know applications in containers will run the same, regardless of where they are deployed.

S>>Ой, а без контейнеров как будто приложения работают по другому.
НС>Они больше зависят от окружения, как следствие больше проблем при деплойменте в конкретное окружение.
Ну так хоть какието минимальные требования к окружению то должны быть, не?
Или вы эти требования делегируете докеру?
Заказчику всё равно, он их выполнит либо для докера либо для вас. Не аргумент, крч.


S>>Напомню только что ровно так же можно и без контейнеров при помощи того-же ansible.

НС>Нельзя. Контейнер понимается намного быстрее, чем отрабатывают твои скрипты. Я уж не говорю о том, что собрать контейнер намного проще и требует меньше знаний.
Тоже спорно и тоже зависит от опыта исполнителя.
Matrix has you...
Re[18]: Опять дваццатьпять
От: Sheridan Россия  
Дата: 18.02.22 08:28
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>Я тебя спросил считал ли ты стоимость сопровождения.

НС>Я писал про контейнеры, ты спросил про кубер. Почему я должен включать стоимость сопровождения кубера в оценку бенефитов от контейнеров? Так при чем тут кубер?
А что, куб внезапно перестал быть модным и все обратно в докер-композ вернулись?
Ну допустим что так, сделай s/куб/докеркомпоз/ — смысл вопроса останется тем-же.
Matrix has you...
Re[12]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 18.02.22 08:31
Оценка:
Здравствуйте, Cyberax, Вы писали:

S>>Цитирую: "В Go есть ООП, причём достаточно крутой за счёт структурной типизации."

C>Есть. Нет "наследования классов" и мастурбирования на "контроль доступа".
Ну, такой себе ООП. Самую мякотку и выкинули.
Matrix has you...
Re[9]: Это точно наследование?
От: ononim  
Дата: 18.02.22 08:35
Оценка:
S>func (fee *Fee) Bar() {
S> log.Println("Fee::Bar called, id:", fee.id);
S> fee.Foo.Bar();
S>}
S>Это точно наследование с переопределением? Я ничего не перепутал? -_-
То что ты выделил — это в терминах С++ — вызов метода базового класса из переопределенного метода в дочернем. Просто чтобы показать возможности.
Как много веселых ребят, и все делают велосипед...
Re[2]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 18.02.22 08:42
Оценка:
Здравствуйте, bitboi, Вы писали:

B>но вот библиотеки — говно, не потому что они плохо или некачественно сделаны, а потому что они какие-то слишком самобытные

ЩИТО?

Из однозначно плохих библиотек в стандартной упаковке — только SQL и log.

B>почему для того чтобы соединиться с хостом мне нужно вызывать метод Dial?

Потому, что "connect" слишком перегружен. Надо было имя придумать.

B>где мои monotonic clocks? почему вместо этого time.Now() возвращает объект, который содержит две метки времени и пытается быть умным при вычислении интервалов?

Эрм... time.Now() всегда содержит монотонное время. Как раз очень остроумное решение. Такая вот последовательно гарантированно работает даже при изменении системного времени:
start := time.Now()
time.Sleep(10*time.Second)
end := time.Now()
elapsed := end.Sub(start) // Всегда правильно


B>какого лешего все операции с файлами принимают String вместо специального типа Path, String это юникодная строка, а путь в файловой системе не обязан ею быть

Это не так. string в Go может содержать произвольный набор байт.

Пример, который прекрасно работает:
    fl, err := os.Create("/tmp/" + string([]byte{1, 2, 3, 4}))
    if err != nil {
        panic(err.Error())
    }
    _, _ = fl.Write([]byte("Hello!"))
    _ = fl.Close()

На macOS и Линуксе работает без проблем.

Исключение есть только одно — на Windows строка преобразуется в UCS-2 перед вызовом CreateFileW. Проблема в том, что в Windows файлы могут содержать произвольный набор UCS-2 символов, в том числе и последовательности, которые не транслируются в utf-8 (см.: https://simonsapin.github.io/wtf-8/ ). Так что на Windows у Go могут быть проблемы в случае с файловыми системами, созданными в старых версиях Windows.

B>таких странностей там очень много, это такие вещи, которые бы просто не приняли на ревью, если бы их попытались пропихнуть в тот же boost

В Бусте ровно та же проблема, кстати. Я проверял и отправлял баг.
Sapienti sat!
Re[14]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 18.02.22 08:56
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>>Есть. Нет "наследования классов" и мастурбирования на "контроль доступа".

S>>Ну, такой себе ООП. Самую мякотку и выкинули.
C>Наследование классов — оказалось противопоказано и в классических ООП, так как создаёт слишком сильную связность. А детальный контроль доступа просто не нужен, достаточно разделения между публичным интерфейсом и приватным для пакета.
Чем protected то не угодил?
Matrix has you...
Re[3]: Язык Go - слабые стороны
От: ononim  
Дата: 18.02.22 09:00
Оценка:
C>Из однозначно плохих библиотек в стандартной упаковке — только SQL и log.
flag еще абы что
Как много веселых ребят, и все делают велосипед...
Re[18]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 18.02.22 09:34
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>Теперь это все нам нужно собрать в работающий продукт, причем в разумные сроки. Твои действия?

S>>У вас выбора нет, у вас уже есть куча мала и её хоть както надо запустить.
НС>Это не только у нас, это чуть более чем во всех крупных проектах так.
Ну ниоч, в общемто. Поддерживать зоопарк — такое себе...


S>>Я же про ситуации когда выбор (ещё) есть.

НС>Не увидел этого в твоем заявлении:
НС>

НС>Ну как бы, на секундочку, это минус. Негоже в рамках одного проекта держать зоопарк подпроектов на разных языках.

А этого там и нет. Я говорю "это плохо конечно, но у вас нет выбора".
Matrix has you...
Re[10]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.02.22 09:52
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Я в какой то момент вернулся и перечитал начало книжки Гради Буча (которая Object Solutions). Там очень доходчиво и чисто про ООП изложено, и вместе с тем хорошо понимаешь, насколько оно натянуто и плохо стыкуется с реальным кодом и реальными задачами, а не какой нибудь модельной автоматизацией теплицы.
АФАИР у меня к коду модельной автоматизации теплицы тоже были претензии; но это было сто лет тому, поэтому без перечтения вспомнить не выйдет.
НС>Судя по тому что ФП уже много десятилетий, а ФП гуя вменяемого нет до сих пор — сильно. Нужны какие то новые подходы.
Может быть, может быть. Ну, либо признать, что ООП прекрасно подходит для гуя, и там его и оставить.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[11]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.02.22 09:58
Оценка:
Здравствуйте, Sheridan, Вы писали:
S>Первый же пункт, про наследование которое не имеет отражений в реальном мире. Серьёзно? Что с эволюцией делать будем?
Дяденька, а вы точно программист?
S>Ну и вообще там всё такое.. "А может быть, а может и не быть". В челом написано умно но ничего существенного.
Там просто нужно понимать, о чём идёт речь.
Есть более медленное изложение, к примеру, той же проблемы ограниченности иерархических таксономий — у Липперта.
S>В общем, автор очень хочет очернить ООП, явно видно.
Особенно это видно по тому, что у него же есть топик Benefits of OOP.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[16]: Язык Go - слабые стороны
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.02.22 10:30
Оценка:
Здравствуйте, Sheridan, Вы писали:

I>>В любом случае конфигурация финишного деплоймента на момент разработки неизвестна. И в конце спокйно может оказаться мешанина вида "софтина-плагины-еще-софтина-еще-плагины" имее взаимоисключающие требования.

S>Всмысле неизвестна? Как софт должен установиться и как работать уже должно быть известно ещо до первой строки кода, на проектировании. Окружение по мере разработки да, может поменяться. Наприер, используемая БД или средства мониторинга. Но чем ближе к финишу, тем всё более точно известно и окружение.

Для небольшого класса приложений это так. А для остального софта финишная конфигурация принципиально неизвестна.

S>При этом деплой пишется сразу, параллельно разработке. И этим кодом деплоя выкатывается продукт на stage сервера.


Ну вот я взял alpina + node, понакидывал туда хрен знает чего — десятка два софтин. Каким образом команды alpine или node или команды тех софтин будут в курсе про эту мою конфигурацию?

I>>Заказчик платит не за софт в дистрибутиве, а за решение конкретной его проблемы. all-in-one это хороший вариант исключить проблемы с шаред/транзитивными зависимостями.

S>Определитесь уже. То заказчик не может на свои сервера поставить для вашего продукта нужную ОС (из списка популярных и заведомо стабильных), то ему побоку на ОС и ему надо решить некую проблему. Взаимоисключающие пункты.


I>>Снова тебе программисты мешают.

S>Я чтото не так сказал? Программисты умеют находить корни проблем и исправлять их? Если да, то к чему этот разговор? Срач ради срача?

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


I>>Здесь ровно наоборот- ты по пять раз на сообщении утверждашь, что с прграммистами чтото не то.

S>Конечно чтото не то. Вас послушать так программист умеет только код в студии набирать. Чуть чтото не так и сразу у него лапки.

Ты снова пишешь из 90. Программист это не всемогутор и не мастер на все руки. И разработчик ПО это только частный случай программиста, при этом специализаций таких разработчиков вагон и маленькая тележка.

I>>Совсем необязательно, что придется. Это всего лишь риск. Сработает ли он, и во что обойдутся последствия это отдельный разговор. И слишком часто заказчик принимает решение, что ему выгоднее всего игнорировать такие риски.

S>Ты по верхам прыгаешь. Спустись на землю. Этот риск при своевременном обновлении либ воообще не возникнут.

Ты попутал причину и следствие. Обновление — это одна из стратегий управления риском, т.е. минимизация вероятности небрагоприятного результата. И у тебя это единственно возможная, единственно правильная стратегия.
Есть и другая стратегия — игнорирование. А можно сказать — "дешевле заплатить когда случится фейл". Это тоже возможные стратегии. Тебя послушать, так они все оказываются неправильными.

I>>Да, бывают такие баги, которые трудно воспроизводятся, или их фикс ломает обратную совместимость. БОлее того — приоритеты в разработке никто не отменял. А в опен-сорсе тебе никто ничего не должен.

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

В том то и дело, что никак. Берешь ты либу А, думаешь, что всё хорошо, написал тесты, запаблишил. Другая команда через полгода собирает на основе твоего солюшна свой собственный, и выясняет, что у них баг, который автор либы А никак не может пофиксить.
Им что теперь, проплатить тебе переписывание с нуля, что бы ты построил солюшн на основе другой либы?

I>>Это только с детскими багами так, когда сразу ясно где он, и как его воспроизвести. А слишком часто баг в одном месте, а причина — в противоположном, и появляется не сразу, а время от времени, через пару дней и последствия

S>То у тебя тот же баг в другом месте. То у тебя баг вообще неуловимый. Сколько у тебя обуви то?

Баг это обычно наблюдаемое поведение. Т.е. именно то, что описывается в багтрекере. Причина на этот момент неизвестна. В какой части проекта находится причина — сказать невозможно. Для этого надо идентифицировать, локализовать проблему.
Соответсвенно, нормой является именно описаный мной случай.
Например — UI содержит мусор. А причина в наполнении БД на другом ресурсе.

I>>А это норма в опен-сорсе — игнорить баги. Заходишь зарепортать в популярный репозиторий, а там булькают вещи еще с нулевых.

S>Если брать к себе в проект либу которую когдато вася пуповкин написал для себя то так и будет. И часто у вас ошибки выбора используемых либ? Как часто вы хватаете первое попавшееся а потом "ойвей, а либа то мёртвая!"?.

Ты слово "популярный" правильно понимаешь?

I>>Так я не сужу по себе.

S>Вот только не надо говорить мне что если весь мир называет белое чорным то и я обязан это делать.

Так в том то и дело — весь мир живет не по твоим правилам

I>>Снова программисты виноваты.

S>Не все, а только те, которые тупы.

Обычно ты пишешь максимально обобщая "программисты некомпетентны".

I>>У тебя похоже риск и инцидент это одно и то же.

S>Нет. Но тебе же важно набросить на вентилятор.

Собственно смотри пример про обновление — там ты снова демонстрируешь эту самую особенность и у тебя всего она единственная стратегия.
Пример
есть риск уязвимости
— обновить, затратив 100 чаоов * 30$ в час + налоги — это твой вариант, с твоих слов это единственно правильный
А есть и другие
— игнорировать — бывает и так, для маловероятных или некритических рисков это наилучшая стратегия
— не обновлять, а закрыть файрволом-фильтром, стоимость 1 час * 30$ + налоги
— не обновлять, а застраховать риски и выплатить пенальти, когда сработает уязвимость, стоимость страховки/пенальти прилагается
— не обновлять, т.к. через год будет другая версия на другом движке
— передать другой команде, пусть они думают, надо им или нет
— открыть для опенсорса, пусть обновят те, кому это актуально
— обновить когда будет на это бюджет
Re[14]: Опять дваццатьпять
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.02.22 10:41
Оценка:
Здравствуйте, Sheridan, Вы писали:

V_>>Вот на экономию этих мегабайт Шеридан их хочет оправдать свой подход, идущий в разрез с реальностью бытия.

S>Нет. Никакой экономии не будет. Потому как у вас программисты все пишут вразнобой и в проекте может быть несколько версий одной и той же либы.



Вот есть у тебя либа X, на ней сделаны две другие либы, А и Б, + X ты используешь у себя. Но А протестирована для версии X@1.0.1 а Б протестирована дя X@1.1.0, релизный цикл у каждой из них разный.
Итого, если вдруг ты решишь обновиться на последнюю X@1.2.0, ты получаешь новую, неизвестную конфигурацию, т.е. никто не проверял, насколько А и Б совместимы с этой версией.

Проекты, которые ограничивают либы единственной версией каждой либы идут в тупик — они всегда работают с конфигурациями, для которых никто и никогда не прогонял хотя бы минмальный набор тестов, что есть огромная неопределенность и чудовищный риск.

А вот те, кто разрешают несколько версий, получают определенные гарантии, что А + X протестированы, и Б + X протестированы. Но проигрывают в размере дискового пространства, которое, внимание, много дешевле времени работы что программиста, что тестировщика.
Отредактировано 18.02.2022 14:41 Pauel . Предыдущая версия .
Re[19]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 10:53
Оценка:
Здравствуйте, Sheridan, Вы писали:

НС>>Это не только у нас, это чуть более чем во всех крупных проектах так.

S>Ну ниоч, в общемто.

Пиши по русски.

S> Поддерживать зоопарк — такое себе...


Да вообще что то поддерживать — такое себе. Лежать на печи и нифига не делать — еще проще. Вопрос только в том, кто за этот праздник жизни будет платить.

S>А этого там и нет. Я говорю "это плохо конечно, но у вас нет выбора".


Выбор есть всегда. Например, взять и переписать требуемый сервис на нужном языке. Только за все при этом надо платить.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[15]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 10:53
Оценка:
Здравствуйте, Sheridan, Вы писали:

НС>>Бизнес не платит деньги за обязательное и постоянное обновление либ.

S>Это такая же часть работы, как и нажатие на кнопки.

Бизнес не платит деньги за обязательное и постоянное обновление либ.

S> Так что платит.


Нет.

S> Но эта работа не выполняется (иначе бы срача не было).


Или выполняется ровно в том объеме, в котором это требуется, а не в том, в котором хочется Шеридану чтобы соответствовать его идеальной картине мира.

S> И то что бизнес просто не в курсе того, что часть работы не выполняется вы почемуто интерпретируете как "бизнесу это не надо".


Бизнес нормальный в курсе всех работ. И когда он не понимает их необходимости, он задает прямой вопрос — какую пользу эта работа принесет продукту что мы вынуждены на это тратить большое количество ресурсов? Сможешь на него ответить?

S>>> Бизнес хочет стабильный, развивающийся продукт.

НС>>Осталось доказать что постоянное обновление всех либ — обязательное условие для стабильного, развиваюющегося продукта.
S>Потому что если не обновлять то со временем продукт тупо перестанет работать на свежих ОС.

Или не перестанет. И уж точно не перестанет работать через квартал, как ты тут обозначил в качестве крайнего срока на полное обновление. И уж точно не перестанут работать разом все несколько сотен зависимостей.

S>Не "при их релизе сразу", а "сразу во всех проектах". Казнить нельзя помиловать получилось, да.


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

S>>>Зачем вы мне пишете тогда фразы типа "обновлять ненужно"?

НС>>Приведи где я такое написал. Не стыдно врать то?
S>Я написал "вы". Тебе бы я написал "ты".

Зачем в разговоре со мной ты привел чужое высказывание?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[13]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 18.02.22 11:05
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Ну, такой себе ООП. Самую мякотку и выкинули.


С чего ты взял что наследование это мякотка? Вот у меня в текущем проекте на десятки мегабайт исходников наследования реализаций по пальцам одной руки, и ни в одном из этих пальцев нет виртуальных функций. Та еще мякотка выходит.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[20]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 18.02.22 11:12
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>>>Да-да-да, контейнеры разворачиваются чуть ли не по щелчку пальцев. Но чтобы это произошло ктото должен это описать, настроить, подготовить инфраструктуру

НС>>Есть возможность развернуть кластерное решение без "ктото должен это описать, настроить, подготовить инфраструктуру"?
S>Нет.

Тогда в чем бенефит отказа от контейнеров?

S>>>С тем же успехом можно не в контейнеры а в ansible/chif, да хоть тупо в скрипты.

НС>>Можно, но контейнереы проще, универсальнее и быстрее.
S>Все три — спорно.

Так поспорь.

S>Если кратко — зависит от опыта того кто это делает.


Это не кратко, это пусто.

S>>> Причом следующим же пунктом после "vm нинужны!"

НС>>Где ты увидел такой пункт?
S>Прямо перед обсуждаемым.

Там нет этого. Ты реально не понял о чем речь или прикидываешься? ВМ не "не нужны", ВМ дорого обходятся. Контейнеры позволяют использовать меньше ВМ, или вообще их не использовать явно.

S>>>Ой, а без контейнеров как будто приложения работают по другому.

НС>>Они больше зависят от окружения, как следствие больше проблем при деплойменте в конкретное окружение.
S>Ну так хоть какието минимальные требования к окружению то должны быть, не?

Да, ядро линуха с поддержкой контейнеров. Это все.

S>Или вы эти требования делегируете докеру?


Нет, делегируем конкретному дистру хостовой ОС, который обязан уметь в стандартные контейнеры.

S>Заказчику всё равно, он их выполнит либо для докера либо для вас.


Заказчику не все равно, потому что он либо использует облако публичное, и тогда там контейнеры искаропки, либо приватное, и тогда ему куда проще использовать стандартное решение нежели настраивать и обучать своих админов уникальному решению имени Шеридана.

НС>>Нельзя. Контейнер понимается намного быстрее, чем отрабатывают твои скрипты. Я уж не говорю о том, что собрать контейнер намного проще и требует меньше знаний.

S>Тоже спорно

Поспорь.

S>и тоже зависит от опыта исполнителя.


Какой такой опыт сделает пяток строчек в dockerfile сложнее написания ansible скриптов под все поддерживаемые разновидности ОС?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[19]: Опять дваццатьпять
От: Ночной Смотрящий Россия  
Дата: 18.02.22 11:15
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>>>Я тебя спросил считал ли ты стоимость сопровождения.

НС>>Я писал про контейнеры, ты спросил про кубер. Почему я должен включать стоимость сопровождения кубера в оценку бенефитов от контейнеров? Так при чем тут кубер?
S>А что, куб внезапно перестал быть модным и все обратно в докер-композ вернулись?

Опять уходишь от вопроса. Мы обсуждали контейнер, при чем тут оркестратор? Могут быть контейнеры без оркестратора, может быть оркестратор без контейнеров, это ортогональные вещи.

S>Ну допустим что так, сделай s/куб/докеркомпоз/ — смысл вопроса останется тем-же.


Зачем мне отвечать на вопрос о стоимости поддержки кубера при обсуждении контейнеров?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[20]: Опять дваццатьпять
От: Vetal_ca Канада http://vetal.ca
Дата: 18.02.22 12:34
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Нет.


Да, Шеридан, да. Это абсолютно так.


S>Все три — спорно. Если кратко — зависит от опыта того кто это делает.


Нет, однозначно нет.


S>>>Напомню только что ровно так же можно и без контейнеров при помощи того-же ansible.

НС>>Нельзя. Контейнер понимается намного быстрее, чем отрабатывают твои скрипты. Я уж не говорю о том, что собрать контейнер намного проще и требует меньше знаний.
S>Тоже спорно и тоже зависит от опыта исполнителя.

Ansible не идемпотентен. Откатить Ansible не вернет к предыдущему результату.

Накатывание Ansible зависит от другого Ansible и нет никаких гарантий что это не сломается.

Дальше, Ansible это операция инициируемая оператором. Scale up и scale down могут быть динамическими и случаться каждый день в зависимости от дневной нагрузки.

Неужели ты настолько дремуч, что не понимаешь ограничения Ansible? Может ты и в Ансибле своем некомпетентен? Я уже убеждаюсь, что и в нем ты — самозванец-профан
Re[7]: Язык Go - слабые стороны
От: Константин Б. Россия  
Дата: 18.02.22 13:28
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

КБ>>А боязнь явного возврата ошибок она по твоему откуда?


НС>Где ты увидел боязнь?


http://rsdn.org/forum/flame.comp/8195149.1
Автор: vsb
Дата: 15.02.22


НС>Возврат ошибок порождает кучу макаронного бойлерплейта в любом языке (включая го, хоть и в меньшей степени), это факт, а не боязнь.


Такой же "факт" как и "теряется стектрейс" или "пытаются обрабатывать ошибки на месте (с багами)". Собственно ты даже не скрываешь что говоришь о каких-то других языках и проецируешь проблемы этих языков на го.
Re[12]: Язык Go - слабые стороны
От: Hobbes Россия  
Дата: 18.02.22 13:38
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Абсолютно. Нет в реальном мире наследования за пределами биологии.


Я в последнее время придерживаюсь точки зрения, что наследование должно было Интерфейс — [0..N] Абстрактных классов — Имплементация. Если родительский класс не абстрактный, то поведение наследника должно чем-то отличаться от поведения родителя, иначе не нужно было бы существование наследника. А полиморфизм, при котором поведение наследника отличается от поведения родителя, я считаю антипаттерном.
Re[9]: Язык Go - слабые стороны
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 18.02.22 14:24
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Уж очень мало остаётся задач, в которых удобно описывать решения в терминах объектов-с-состоянием, и обмена сообщениями.

Мир сместился с сторону data-driven и реактивность из-за больших потоков данных, раньше такого не было просто.
Sic luceat lux!
Re[13]: Язык Go - слабые стороны
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.02.22 14:47
Оценка:
Здравствуйте, Hobbes, Вы писали:

H>Я в последнее время придерживаюсь точки зрения, что наследование должно было Интерфейс — [0..N] Абстрактных классов — Имплементация. Если родительский класс не абстрактный, то поведение наследника должно чем-то отличаться от поведения родителя, иначе не нужно было бы существование наследника. А полиморфизм, при котором поведение наследника отличается от поведения родителя, я считаю антипаттерном.


У тебя здесь противоречие
1. ты заявляешь, что должен быть интерфейc-абстрактыйкласс-реализация. Ни для чего больше не нужно заводить этот интерфейс, кроме как абстрагирование. И с абстрактным классом ровно то же.
2. Ты утверждаешь, что поведение наследника должно чем отличаться родительского
3. при этом, если поведение наследника отличается от поведения родителя у тебя это антипаттерн

Зачем тогда огород городить?

Итого — п1 это уже заявка на полиморфизм, т.к. через один интерфейс сможем работать сразу со всеми наследниками. А в п3 выясняем, что это антипаттерн

Собственно, наследование и полиморфизм это две стороны одной монеты. Все это само по себе не нужно. А цель этих приседаний — обеспечение абстракции. При помощи наследования конструируем новую разновидность, при помощи полиморфизма вызываем. Но цель — абстракция.
Отредактировано 18.02.2022 14:54 Pauel . Предыдущая версия . Еще …
Отредактировано 18.02.2022 14:51 Pauel . Предыдущая версия .
Re[14]: Язык Go - слабые стороны
От: Hobbes Россия  
Дата: 18.02.22 15:06
Оценка:
Здравствуйте, Ikemefula, Вы писали:


I>У тебя здесь противоречие

I>1. ты заявляешь, что должен быть интерфейc-абстрактыйкласс-реализация. Ни для чего больше не нужно заводить этот интерфейс, кроме как абстрагирование. И с абстрактным классом ровно то же.
I>2. Ты утверждаешь, что поведение наследника должно чем отличаться родительского
I>3. при этом, если поведение наследника отличается от поведения родителя у тебя это антипаттерн

I>Зачем тогда огород городить?


I>Итого — п1 это уже заявка на полиморфизм, т.к. через один интерфейс сможем работать сразу со всеми наследниками. А в п3 выясняем, что это антипаттерн


Значит я не совсем понятно донёс свою мысль. Не должно быть такого, чтобы можно было создать объект родительского класса и объект производного класса. Т. к. если у них одинаковое поведение — то непонятно, зачем нужны разные классы с одинаковым поведением. А если поведение разное, то получается, что объект производного класса не может быть использован вместо объекта родительского класса, что я считаю антипаттерном.

Интерфейс отличается от неабстрактного класса: от интерфейса ожидается полиморфное поведение, а от неабстрактного класса нет.
Re[2]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 18.02.22 15:31
Оценка:
Здравствуйте, bitboi, Вы писали:

B>почему для того чтобы соединиться с хостом мне нужно вызывать метод Dial?


В память о Plan 9.

А есть ли разница, Dial там, или Connect?
Re[13]: Язык Go - слабые стороны
От: Reset  
Дата: 18.02.22 16:32
Оценка:
H> А полиморфизм, при котором поведение наследника отличается от поведения родителя, я считаю антипаттерном.

Ты проявляещь ту же узость сознания, что и Барбара. Наследование — это не только наследование интерфейса. Но и в более широком смысле результат применения другого принципа — повторного использования кода. Отсюда появляется, например, private наследование (когда никакой интерфейс не может наследоваться).

Но, да, с таким подходом собеседование не пройдешь. SOLID нарушить нельзя, на заморочки собеседующего тем более наступать нельзя — короче, "Мы вам перезвоним".
Re[14]: Язык Go - слабые стороны
От: Hobbes Россия  
Дата: 18.02.22 17:15
Оценка:
Здравствуйте, Reset, Вы писали:

R>Ты проявляещь ту же узость сознания, что и Барбара. Наследование — это не только наследование интерфейса. Но и в более широком смысле результат применения другого принципа — повторного использования кода. Отсюда появляется, например, private наследование (когда никакой интерфейс не может наследоваться).


В какой ситуации private наследование лучше private поля класса?
Re[15]: Язык Go - слабые стороны
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.02.22 18:08
Оценка:
Здравствуйте, Hobbes, Вы писали:

H>А если поведение разное, то получается, что объект производного класса не может быть использован вместо объекта родительского класса, что я считаю антипаттерном.


Наоборот, это нормально, но только в определенных рамках. Т.е. когда сохраняется контракт, предусловия, постусловия и тд. Как только это ломается, например метод Add по факту начинает удалять, это конечно же паскудство.
Re[9]: Язык Go - слабые стороны
От: elmal  
Дата: 18.02.22 18:59
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>Абсолютно.
S>Вот я всё больше начинаю к той же точке зрения склоняться.
S>Несмотря на то, что всю жизнь (с 10 класса) писал на языках с ООП, и привык мыслить именно им.

S>Уж очень мало остаётся задач, в которых удобно описывать решения в терминах объектов-с-состоянием, и обмена сообщениями.

А не надо мыслить в рамках одной парадигмы. Неимоверно рулит мультипарадигменность, когда для части задач применяется ООП, для части ФП, для части процедурщина, для части декларативность. Современные языки идут в эту сторону. И язык, который заточен только под одну парадигму уже будет достаточно убог и не универсален.
Re[16]: Язык Go - слабые стороны
От: Hobbes Россия  
Дата: 18.02.22 19:39
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Наоборот, это нормально, но только в определенных рамках. Т.е. когда сохраняется контракт, предусловия, постусловия и тд. Как только это ломается, например метод Add по факту начинает удалять, это конечно же паскудство.


Контракт может сохраняться, я не спорю. Но зачем делать так:

Interface --> Impl1 --> Impl2


Когда логичнее так:

Interface --> Impl1
          +-> Impl2


А общие данные и методы можно вынести в общего абстрактного предка. Или отдельно в общего мембера.

У первого варианта в том, что объект типа Impl2 является также объектом типа Impl1, который с точки зрения функциональности, как правило, не ведёт себя как объект типа Impl1. Например Impl1 рисует на экране белым цветом по чёрному, а Impl2 чёрным по белому. А интерфейс и инварианты могут быть при этом одинаковые.

Я не рассматриваю случаи, когда Impl2 делает совсем то же самое, что и Impl1, но скажем оптимизирован для более узкого круга задач.
Re[4]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 19.02.22 02:17
Оценка:
Здравствуйте, ononim, Вы писали:

C>>Из однозначно плохих библиотек в стандартной упаковке — только SQL и log.

O>flag еще абы что
Он просто сильно ограниченный, это нормально. А вот что они курили, когда не сделали log интерфейсом — вопрос.
Sapienti sat!
Re[17]: Язык Go - слабые стороны
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.02.22 06:38
Оценка:
Здравствуйте, Hobbes, Вы писали:

H>Контракт может сохраняться, я не спорю. Но зачем делать так:


H>
H>Interface --> Impl1 --> Impl2
H>


Это проблемный вариант. Его оправдано делать ради оптимизаций каких. По возможности от него стоит избавляться.
Re[3]: Язык Go - слабые стороны
От: bitboi Голландия  
Дата: 20.02.22 09:56
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А есть ли разница, Dial там, или Connect?


принципиальной разницы нет, но есть опыт использования 100500 разных сетевых библиотек, в которых есть этот самый connect, а еще bind, listen и тд
Re[16]: Язык Go - слабые стороны
От: alex_public  
Дата: 20.02.22 15:18
Оценка:
Здравствуйте, Sinclair, Вы писали:

Небольшой комментарий совсем не по теме. Но не могу не отметиться, т.к. глаз зацепился за фразу:

S>То есть в мс-архитектуре вся система и состоит из "модулей-плагинов". Те же самые идеи, что и в компонентной архитектуре, популярной 30 лет назад, только механика взаимодействия теперь построена не на RPC или CORBA, а на HTTP.


Нюанс в том, что в данный момент основным подходом снова становится RPC. Правда теперь это уже RPC поверх HTTP/2 (gRPC), но это не суть (тут https играет роль не сильно большую, чем tcp, ip, ethernet). )))
Re[3]: Язык Go - слабые стороны
От: bitboi Голландия  
Дата: 20.02.22 17:05
Оценка:
Здравствуйте, Cyberax, Вы писали:


B>>почему для того чтобы соединиться с хостом мне нужно вызывать метод Dial?

C>Потому, что "connect" слишком перегружен. Надо было имя придумать.

это как? мне кажется это как раз dial не соответствует тому что происходит на самом деле


B>>где мои monotonic clocks? почему вместо этого time.Now() возвращает объект, который содержит две метки времени и пытается быть умным при вычислении интервалов?

C>Эрм... time.Now() всегда содержит монотонное время. Как раз очень остроумное решение. Такая вот последовательно гарантированно работает даже при изменении системного времени:
C>
C>start := time.Now()
C>time.Sleep(10*time.Second)
C>end := time.Now()
C>elapsed := end.Sub(start) // Всегда правильно
C>


я согласен, что это остроумное решение, которое тем не менее, работает не всегда так как надо, иногда нужно иметь возможность просто получить одну метку времени и все
ну скажем я сериализовал две метки времени, до сервиализации между ними одна разница, после десериализации — другая

C>Это не так. string в Go может содержать произвольный набор байт.


тем не менее это не отменяет того, что path это просто строка в Go, это не deal breaker, но немного ебобо
Re[4]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 21.02.22 04:06
Оценка:
Здравствуйте, bitboi, Вы писали:

B>>>почему для того чтобы соединиться с хостом мне нужно вызывать метод Dial?

C>>Потому, что "connect" слишком перегружен. Надо было имя придумать.
B>это как? мне кажется это как раз dial не соответствует тому что происходит на самом деле
Почему же? Оно "набирает" номер другой стороны.

B>я согласен, что это остроумное решение, которое тем не менее, работает не всегда так как надо, иногда нужно иметь возможность просто получить одну метку времени и все

B>ну скажем я сериализовал две метки времени, до сервиализации между ними одна разница, после десериализации — другая
Это практически единственный пример, где оно не работает. Но если очень хочется — берём и вызываем clock_gettime напрямую.

C>>Это не так. string в Go может содержать произвольный набор байт.

B>тем не менее это не отменяет того, что path это просто строка в Go, это не deal breaker, но немного ебобо
Ну они могли бы ввести тип "type Path string", но смысл? Массив байт неудобен из-за того, что нельзя гарантировать иммутабельность.
Sapienti sat!
Re[17]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.02.22 06:29
Оценка:
Здравствуйте, alex_public, Вы писали:
_>Нюанс в том, что в данный момент основным подходом снова становится RPC. Правда теперь это уже RPC поверх HTTP/2 (gRPC), но это не суть (тут https играет роль не сильно большую, чем tcp, ip, ethernet). )))
Интересно, с чем это связано. Что именно компенсирует недостатки RPC по сравнению с REST?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 21.02.22 09:55
Оценка:
Здравствуйте, bitboi, Вы писали:

C>>Почему же? Оно "набирает" номер другой стороны.

B>ну типа мы набираем номер другой стороны и ждем когда нас соединят, получается что dial это только первая часть процесса
B>плюс у меня еще ассоциации с signalling в VoIP появляются
Ну так и есть. Connect/Dial делают попытку соединиться с удалённой стороной, на что удалённая сторона должна ответить ("поднять трубку").

C>>Это практически единственный пример, где оно не работает. Но если очень хочется — берём и вызываем clock_gettime напрямую.

B>мне кажется можно придумать еще, но главное конечно, это то что теряется аспект документирования кода и интерфейсов
B>скажем если я вижу где-то в интерфейсе duration и это системное время, либо наоборот монотонное, я что-то сразу понимаю про то как это все должно работать, а тут нет, мелочь конечно, но неприятно
Монотонность часов для Duration — вообще пофиг. Это разность между двумя отметками времени.

C>>Ну они могли бы ввести тип "type Path string", но смысл? Массив байт неудобен из-за того, что нельзя гарантировать иммутабельность.

B>жить с этим конечно можно, но опять же, вот есть у меня ф-я, которая преобразует путь в каноничный (в Go такой ф-ии почему-то нет, но представим что есть)
Пусть преобразует.

B>так вот, ф-я получает на вход путь в виде строки? при этом она не делает то что можно подумать (преобразует строку используя только входные данные), она лезет в ФС и делает что-то сложное, использует системный вызов, который может делать какой-то ввод-вывод и тд, но ф-я выглядит так, словно она просто преобразует строку

Тогда такая функция должна бы принимать контекст и возвращать пару (string, error) в качестве результата. Будет сразу понятно, что она делает что-то сложное.

B>в общем, мое мнение — strong types это хорошо, в плюсах к этому уже давно пришли, там уже принято вводить именованные типы вместо фундаментальных, там где это имеет смысл

Ну так можно и в Go — "type Path string". Это будет сильный тип, который надо из/в строку преобразовывать явно.

Но вот честно, не вижу особых плюсов. Go — это не С++, и выдумывать сложности его разработчики не любят.
Sapienti sat!
Re[18]: Язык Go - слабые стороны
От: alex_public  
Дата: 21.02.22 11:38
Оценка:
Здравствуйте, Sinclair, Вы писали:

_>>Нюанс в том, что в данный момент основным подходом снова становится RPC. Правда теперь это уже RPC поверх HTTP/2 (gRPC), но это не суть (тут https играет роль не сильно большую, чем tcp, ip, ethernet). )))

S>Интересно, с чем это связано. Что именно компенсирует недостатки RPC по сравнению с REST?

Не берусь высказываться за глобальные причины (почему мир переходит), могут высказаться только о своих ощущениях. И эти ощущения представляют в основном список из нескольких пунктов убожества REST (причём я буду говорить не о теоретических определениях этой архитектуры, а о свойствах общепринятых практических реализаций):

1. Максимально убогая сериализация. Т.е. в том же gRPC используется далеко не идеальный Protocol Buffers (например MessagePack намного эффективнее), но по сравнению со стандартным подходом сериализации из REST, это просто мегашедевр эффективности. )))

2. Несимметричные возможности у клиента и сервера. По сути REST — это однонаправленный протокол, в то время как в gRPC после установки соединения сервер может спокойно инициировать отсылку данных клиенту.

3. Одновременная и убогость и излишество базовых методов REST (которые наследие HTTP). Это наверное самый важных архитектурный пункт, так что поясню подробнее. При использование REST возможны два разных архитектурных подхода:
— использование базовых методов в качестве набора команд (API) нашего сервиса. Очевидно, что это подходит только для максимально простеньких задач, целиком укладывающихся в CRUD. И тут чувствуется вся убогость этого набора команд.
— использование удобного нетривиального API, реальные команды которого передаются в REST запросах в качестве данных (параметров). Т.е. в этом случае REST уже служит просто очередным сетевым слоем (ниже прикладного), правда достаточно не эффективным. И в этом случае наоборот очевидно излишество базовых методов (в принципе одного POST достаточно для передачи любой прикладной команды).

В целом меня совсем не удивляет происходящий сейчас переход на gRPC. Меня скорее удивляет почему индустрия не сделала этого намного раньше, потратив десятилетие на REST убожество.
Re[19]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.02.22 12:16
Оценка:
Здравствуйте, Cyberax, Вы писали:

S>>Интересно, с чем это связано. Что именно компенсирует недостатки RPC по сравнению с REST?

C>Конкретно с gRPC — полноценная двусторонняя коммуникация.
Ну, по моему опыту, любая RPC-style коммуникация — это какой трэш. В основном — потому, что не умеет в передачу распределённого состояния.
То есть в нормальный протокол, рассчитанный на применение в сети, должны быть заложены концепции safety и idempotence.

C>Ну и в целом, REST весьма неудобен как подход, в целом. Слишком много гибкости.

Непонятно.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.02.22 12:24
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Если вернуться к истокам, то ООП было изобретено для многооконного GUI. Интересно разобраться, как рисовать гую на ФП — сильно хуже, чем в ООП, а то может быть и лучше.


Самое смешное, что Go (ну ОК, Newsqueak) был тоже изобретен для многооконного GUI

https://swtch.com/~rsc/thread/newsqueak.pdf
Re[19]: Язык Go - слабые стороны
От: night beast СССР  
Дата: 21.02.22 12:29
Оценка:
Здравствуйте, alex_public, Вы писали:

_>1. Максимально убогая сериализация. Т.е. в том же gRPC используется далеко не идеальный Protocol Buffers (например MessagePack намного эффективнее), но по сравнению со стандартным подходом сериализации из REST, это просто мегашедевр эффективности. )))


кто-то запрещает передавать в ответе бинарные данные?

_>3. Одновременная и убогость и излишество базовых методов REST (которые наследие HTTP). Это наверное самый важных архитектурный пункт, так что поясню подробнее. При использование REST возможны два разных архитектурных подхода:

_>- использование базовых методов в качестве набора команд (API) нашего сервиса. Очевидно, что это подходит только для максимально простеньких задач, целиком укладывающихся в CRUD. И тут чувствуется вся убогость этого набора команд.

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

_>- использование удобного нетривиального API, реальные команды которого передаются в REST запросах в качестве данных (параметров). Т.е. в этом случае REST уже служит просто очередным сетевым слоем (ниже прикладного), правда достаточно не эффективным. И в этом случае наоборот очевидно излишество базовых методов (в принципе одного POST достаточно для передачи любой прикладной команды).


это не REST
Re[11]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.02.22 12:32
Оценка:
Здравствуйте, Sheridan, Вы писали:

НС>>Могу

S>Первый же пункт, про наследование которое не имеет отражений в реальном мире. Серьёзно? Что с эволюцией делать будем?

Ты про биологическую эволюцию?

Ну видимо, будем есть задницей, раз все млекопитающие произошли от кишечнополостных, а у них одна дырка для всех целей. И метать икру; рыбка у нас тоже в предках.
Re[12]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.02.22 12:37
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Sheridan, Вы писали:


НС>>>Могу

S>>Первый же пункт, про наследование которое не имеет отражений в реальном мире. Серьёзно?

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


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

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

Вот эта вот большая морская свинка приходится ближайшим родственником слону: https://moscowzoo.ru/animals/damany/daman-bryusa/
Re[12]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 21.02.22 12:59
Оценка:
Здравствуйте, Pzz, Вы писали:

НС>>>Могу

S>>Первый же пункт, про наследование которое не имеет отражений в реальном мире. Серьёзно? Что с эволюцией делать будем?
Pzz>Ты про биологическую эволюцию?
Pzz>Ну видимо, будем есть задницей, раз все млекопитающие произошли от кишечнополостных, а у них одна дырка для всех целей. И метать икру; рыбка у нас тоже в предках.
man онтогенез
Matrix has you...
Re[10]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.02.22 13:11
Оценка:
Здравствуйте, Pzz, Вы писали:
Pzz>Самое смешное, что Go (ну ОК, Newsqueak) был тоже изобретен для многооконного GUI

Это вообще какое-то общее место. К примеру, читаем https://github.com/area9innovation/flow9/blob/master/doc/flow.markdown:

The main design goals of flow are:

Обратите внимание — это не-ОО язык. Это статически типизированный функциональный язык с C-style syntax.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[20]: Язык Go - слабые стороны
От: alex_public  
Дата: 21.02.22 14:02
Оценка:
Здравствуйте, Sinclair, Вы писали:

_>>1. Максимально убогая сериализация. Т.е. в том же gRPC используется далеко не идеальный Protocol Buffers (например MessagePack намного эффективнее), но по сравнению со стандартным подходом сериализации из REST, это просто мегашедевр эффективности. )))

S>Да, хороший поинт. Впрочем, сам REST ничего про сериализацию не говорит. Если state, который мы передаём, хорошо описывается MessagePack, то почему бы не передавать его MessagePack?

Ну для начала не стоит забывать про то, что в REST у тебя для части данных жёстко определён способ сериализации, причём максимально убогий — urlencoded .

А далее, даже если мы возьмём MessagePack и HTTP/2 для REST, то это всё равно не позволит нам получить сравнимую эффективность из-за наличия в gRPC такого "типа данных" как stream. Который позволяет отправить множество сообщений в рамках одного запроса (а не проводить весь комплекс установки ip, tcp, http, ssl соединений для каждой маленькой пачки данных).

S>Но есть у меня подозрение, что для REST MessagePack мало что даст. Ну, из банального — там есть очевидный, механический способ построить delta-encoding?


Эээ что? )

_>>2. Несимметричные возможности у клиента и сервера. По сути REST — это однонаправленный протокол, в то время как в gRPC после установки соединения сервер может спокойно инициировать отсылку данных клиенту.

S>Ну, сделать reliable two-way state transfer ещё тяжелее, чем однонаправленный. Я пока что не очень представляю себе задачу, где это было бы уместно с точки зрения архитектуры.

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

S>То есть если нас устраивает ненадёжность — то без проблем, можно делать двусторонние каналы. А если нужна надёжность — то рисковать полагаться на клиента, который может лечь...


Типа если клиент с REST ляжет, то это как-то поможет не забыть отреагировать в нужный момент на текущие данные? )))

_>>3. Одновременная и убогость и излишество базовых методов REST (которые наследие HTTP). Это наверное самый важных архитектурный пункт, так что поясню подробнее. При использование REST возможны два разных архитектурных подхода:

_>>- использование базовых методов в качестве набора команд (API) нашего сервиса. Очевидно, что это подходит только для максимально простеньких задач, целиком укладывающихся в CRUD. И тут чувствуется вся убогость этого набора команд.
S>Нет конечно. Прямо на этом сайте уже поднимались примеры "сложных задач", где применение RPC "очевидно" эффективнее. Во всех случаях, АФАИР, RPC проиграл.
S>В рамках CRUD можно представить всё, что угодно. Более того — как раз такое представление и является единственно возможным способом строить распределённые приложения.

Ну вот тебе простейшая (и опять же из вполне реальной практики) задачка. Есть шаговый манипулятор со свободным вращением (но без энкодера). И соответственно у управляющей им схемы есть две команды: move_left() и move_right(). Доступ к этому через RPC очевидно выглядит полностью естественно — прямо как и реальные команды. А вот как по твоему будет выглядеть логичный REST вариант интерфейса? )))

_>>В целом меня совсем не удивляет происходящий сейчас переход на gRPC. Меня скорее удивляет почему индустрия не сделала этого намного раньше, потратив десятилетие на REST убожество.

S>Хм. Пока что не вижу аргументов, кроме какого-то непонимания REST.

Ну возможно это мои личные субъективные ощущения (а индустрия возвращается к RPC по каким-то другим причинам), а возможно ты слепой (не видишь аргументов, а они есть). Не знаю.
Re[17]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 21.02.22 14:13
Оценка:
Здравствуйте, Hobbes, Вы писали:

H>Контракт может сохраняться, я не спорю. Но зачем делать так:


H>Когда логичнее так:


Потому что классическое ООП наследование это два в одном — наследование контрактов и наследование реализаций. Когда нужно что то одно (а обычно оно так и нужно) — то второе идет ненужным довеском. Для наследования контрактов в языках посовременне придумали понятие интерфейсов. А вот с наследованием реализаций все плохо, private наследование в плюсах это какой то уродливый франкенштейн.
В некоторых языках есть миксины/трейты/шейпы/етц, и есть всякие паттерны. Но это все сильно усложняет дизайн. Как по мне, тут просто ООП не годится, и дизайн в ФП стиле, с функциями, намного чище.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[20]: Язык Go - слабые стороны
От: alex_public  
Дата: 21.02.22 15:57
Оценка:
Здравствуйте, night beast, Вы писали:

_>>3. Одновременная и убогость и излишество базовых методов REST (которые наследие HTTP). Это наверное самый важных архитектурный пункт, так что поясню подробнее. При использование REST возможны два разных архитектурных подхода:

_>>- использование базовых методов в качестве набора команд (API) нашего сервиса. Очевидно, что это подходит только для максимально простеньких задач, целиком укладывающихся в CRUD. И тут чувствуется вся убогость этого набора команд.
NB>тут чувствуется возможность на уровне прикси-сервера распределять нагрузку ничего не зная о реализации конкретных ендпоинтов.

Балансировка запросов встроена прямо в gRPC. )))
Re[21]: Язык Go - слабые стороны
От: night beast СССР  
Дата: 21.02.22 16:50
Оценка:
Здравствуйте, alex_public, Вы писали:

NB>>тут чувствуется возможность на уровне прикси-сервера распределять нагрузку ничего не зная о реализации конкретных ендпоинтов.


_>Балансировка запросов встроена прямо в gRPC. )))


и?
Re[20]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 21.02.22 19:08
Оценка:
Здравствуйте, Sinclair, Вы писали:

C>>Конкретно с gRPC — полноценная двусторонняя коммуникация.

S>Ну, по моему опыту, любая RPC-style коммуникация — это какой трэш. В основном — потому, что не умеет в передачу распределённого состояния.
S>То есть в нормальный протокол, рассчитанный на применение в сети, должны быть заложены концепции safety и idempotence.
gRPC — это всё-таки не CORBA. В нём нет встроенных "объектных ссылок" и прочей нечисти. По сути, statefullness распространяется только на рамки одного запроса.

Потому API на gRPC проектируется по тем же принципам, что и для REST.

C>>Ну и в целом, REST весьма неудобен как подход, в целом. Слишком много гибкости.

S>Непонятно.
Сериализация не стандартизована и размазана по пути запроса, query string, телу запроса, заголовкам HTTP, и даже cookies.

В gRPC всё просто — есть сообщение, с возможными метаданными (для авторизации) и всё. При этом сообщения подчиняются жёсткой схеме.
Sapienti sat!
Re[14]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 21.02.22 22:19
Оценка:
Здравствуйте, Pzz, Вы писали:

S>>man онтогенез

Pzz>No manual entry for онтогенез
Pzz>Надо доставить какой-то пакет?
да. brains
Matrix has you...
Re[15]: Язык Go - слабые стороны
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.02.22 22:22
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Здравствуйте, Pzz, Вы писали:


S>>>man онтогенез

Pzz>>No manual entry for онтогенез
Pzz>>Надо доставить какой-то пакет?
S>да. brains

# dnf install brains
Last metadata expiration check: 3:25:14 ago on Mon 21 Feb 2022 09:56:12 PM MSK.
No match for argument: brains
Error: Unable to find a match: brains


Re[16]: Язык Go - слабые стороны
От: Sheridan Россия  
Дата: 22.02.22 06:55
Оценка:
Здравствуйте, Pzz, Вы писали:

S>>>>man онтогенез

Pzz>>>No manual entry for онтогенез
Pzz>>>Надо доставить какой-то пакет?
S>>да. brains
Pzz>
Pzz># dnf install brains
Pzz>Last metadata expiration check: 3:25:14 ago on Mon 21 Feb 2022 09:56:12 PM MSK.
Pzz>No match for argument: brains
Pzz>Error: Unable to find a match: brains
Pzz>

Pzz>

Всё ясно теперь.
# emerge brains -av
These are the packages that would be merged, in order:

Calculating dependencies          ... done!                  
[ebuild   R   ] sci-libs/brains-9999::hand-local  USE="hands intellect mind thinking thought" 0 KiB

Total: 1 package (1 reinstall), Size of downloads: 0 KiB

Matrix has you...
Re[22]: Язык Go - слабые стороны
От: alex_public  
Дата: 22.02.22 16:18
Оценка:
Здравствуйте, night beast, Вы писали:

NB>>>тут чувствуется возможность на уровне прикси-сервера распределять нагрузку ничего не зная о реализации конкретных ендпоинтов.

_>>Балансировка запросов встроена прямо в gRPC. )))
NB>и?

Что и? ) Это означает, что абсолютно незачем мучиться с убогим набором команд http, объясняя это убожество возможностью автоматической балансировки. Та же самая автоматическая балансировка спокойно работает и в gRPC (с произвольным набором команд).
Re[24]: Язык Go - слабые стороны
От: alex_public  
Дата: 22.02.22 18:40
Оценка:
Здравствуйте, Sinclair, Вы писали:

_>>То, что на момент отправки первого сообщения, данных для следующих сообщений пока ещё нет.

S>И?

Что и? В gPRC это возможно в рамках одного соединения, а в REST нет.

_>>И что мешает сделать тоже самое с gRPC? )

S>То, что в него не встроены такие вещи. Вам придётся вносить всё это в сигнатуру метода, ломая обратную совместимость с клиентами, которые не знают про delta encoding.
S>А в REST это встроено из коробки. Поэтому можно допиливать сервер, не переживая за то, что часть клиентов не умеют такие вещи.

Так встроено или надо допиливать сервер?

S>С учётом разнообразных хидеров аналогом одного REST-ендпоинта будут несколько десятков сигнатур RPC-методов. Чего, естественно, никто не делает.


Бредим? )

S>Вот вам, к примеру, delta encoding даже в голову не пришёл — значит, если дать вам спроектировать сервис на основе gRPC, вы ничего подобного в него не заложите.


Ты вот это сейчас серьёзно? ) Ты считаешь, что при запросе коллекции данных никому не придёт в голову указывать в запросе её срез и все будут возвращать только коллекцию целиком? )))

_>>Ну вот https://tinkoff.github.io/investAPI/ тебе реальный пример. )

S>Ну я и говорю — для роботов REST может и не подойти.

Ой, т.е. оказывается уже целая большая область обнаружилась, где REST сливает RPC? А кто же у нас вот только что писал:

Прямо на этом сайте уже поднимались примеры "сложных задач", где применение RPC "очевидно" эффективнее. Во всех случаях, АФАИР, RPC проиграл. В рамках CRUD можно представить всё, что угодно. Более того — как раз такое представление и является единственно возможным способом строить распределённые приложения.

И вот уже "неожиданно" оказывается что не "во всех случаях"? )))

А если дальше пойдём разбираться, то вообще окажется что всё наоборот... )))

Да, кстати, у ребят в указанном примере ещё год назад был REST интерфейс (OpenAPI и всё такое)... )))

_>>Ну так а если это условие задачи (в биржевой торговле так и есть), то что тогда? )))

S>Тогда биржа просто забивает на то, что клиент может лечь. Это — его проблемы. Так ведь? Нет задачи "гарантированно известить обо всех событиях".

Нет, как раз требуется гарантированное извещение. И более того, условия ещё более жёсткие — оно требуется в чёткие интервалы времени (чуть позже и эта информация уже бесполезна). Однако сама эта задача априори требует нормальной работоспособности обеих сторон (иначе она просто не может быть решена). Так что вариант с корректной обработкой ситуации умершего клиента смешно даже рассматривать — это априори форс-мажор и потенциальная потеря денег.

_>>Я же писал, что экондера нет. Да и не нужен он, т.к. на устройстве камера, поток от которой параллельно тоже идёт к пользователю (и тот глазами по картинке легко определяет нужное ему положение).

S>Угу. С задержкой в 500мс, да?

И? В чём проблема то?

S>Простите, эта схема — неработоспособна.


Да я смотрю ты и в этой области специалист.

_>>Кстати, тут подумалось, что в рамках gRPC можно и поток данных от камеры сделать не параллельным где-то рядом, а прямо в рамках того же API (как stream кадров от сервера).

S>А то. Можно. Но это — патологически неустойчивый вариант. Пользоваться им будет крайне неудобно. В разы неудобнее, чем через REST.

Оу, видеопоток через REST... Это прямо максимально интересно становится.

S>В то время, как REST архитектура (не протокол, а архитектура) позволит им пользоваться даже без человека на приёмном конце.


Эээ что? ) Весь смысл всего это в том, чтобы человек пейзажики смотрел...

_>>Я правильно понимаю, что данный поток слов надо воспринимать как слив по данному примеру? )))

S>Можно и так воспринимать. Но правильнее будет, если вы примете как слив саму формулировку архитектурного решения, т.к. оно вряд ли решит задачу конечного потребителя.

Какого ещё архитектурного решения? У тебя есть физическая железка с заданными параметрами (условно двумя кнопками влево/вправо и кнопкой включения камеры, возвращающей поток кадров) и надо приделать к ней удалённый доступ. Архитектуру можешь плодить какую хочешь. Но ты уже показал, что в рамках REST подхода ты можешь только слиться с невнятными оправданиями.

_>>С учётом наличия такой https://github.com/grpc-ecosystem/grpc-gateway штуки, мне кажется что выбор о базовой реализации должен быть однозначным. ))) Хотя конечно же по настоящему модные возможности (типа двунаправленных потоков) там отсутствуют — ну это цена за желание поддержки легаси (REST).

S> Пока что выглядит как попытка совместить недостатки обоих подходов.

Это просто инструмент переходного периода. Когда хочется перейти на быстрые современные решения, но при этом надо поддерживать ещё и клиентов с устаревшими подходами...
Отредактировано 22.02.2022 18:49 alex_public . Предыдущая версия .
Re[23]: Язык Go - слабые стороны
От: night beast СССР  
Дата: 22.02.22 18:45
Оценка:
Здравствуйте, alex_public, Вы писали:

NB>>и?


_>Что и? ) Это означает, что абсолютно незачем мучиться с убогим набором команд http, объясняя это убожество возможностью автоматической балансировки. Та же самая автоматическая балансировка спокойно работает и в gRPC (с произвольным набором команд).


чтобы эта балансировка в gRPC работала также, тебе там так-же придется формализовать набор команд как это сделано в REST.
причем, если хочешь работать не только со своим велосипедом, то этот набор команд нужно как-то стандартизировать.
так и в чем в итоге преимущество?
Re[24]: Язык Go - слабые стороны
От: alex_public  
Дата: 22.02.22 19:55
Оценка:
Здравствуйте, night beast, Вы писали:

_>>Что и? ) Это означает, что абсолютно незачем мучиться с убогим набором команд http, объясняя это убожество возможностью автоматической балансировки. Та же самая автоматическая балансировка спокойно работает и в gRPC (с произвольным набором команд).

NB>чтобы эта балансировка в gRPC работала также, тебе там так-же придется формализовать набор команд как это сделано в REST.
NB>причем, если хочешь работать не только со своим велосипедом, то этот набор команд нужно как-то стандартизировать.
NB>так и в чем в итоге преимущество?

Эээ зачем???

И я даже не буду говорить о том, что в реализацию gRPC уже встроена автоматически работающая клиентская балансировка (https://github.com/grpc/grpc/blob/master/doc/load-balancing.md). Предположим что этого всего нет и будем говорить только о серверной балансировке. И так, зачем для неё нужна формализация команд?
Re[25]: Язык Go - слабые стороны
От: night beast СССР  
Дата: 22.02.22 20:06
Оценка:
Здравствуйте, alex_public, Вы писали:

_>И я даже не буду говорить о том, что в реализацию gRPC уже встроена автоматически работающая клиентская балансировка (https://github.com/grpc/grpc/blob/master/doc/load-balancing.md). Предположим что этого всего нет и будем говорить только о серверной балансировке. И так, зачем для неё нужна формализация команд?


я же пример приводил -- команды гет в одну сторону, другие в другую.
как ты это будешь в grpc делать?
Re[27]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.02.22 05:55
Оценка:
Здравствуйте, Cyberax, Вы писали:
C>Да, это плохо. Все ограничения и способности API должны быть описаны в его схеме. По факту в REST это совсем не так.
По факту это никогда не так. Схема описывает только маленький кусочек поведения API. Тут по соседству обсуждали вопросы тестирования — я там иллюстрацию приводил.
C>Например, имеем вот это API: https://docs.docker.com/engine/api/v1.41/#operation/ContainerArchiveInfo — "взять архив файловой системы".
Нет, "взять архив файловой системы" — это https://docs.docker.com/engine/api/v1.41/#operation/ContainerArchive. А то, что вы показали — это "взять информацию об архиве файловой системы".
C>Внимание, вопрос! Как это API будет взаимодействовать с Range?
Тот, который вы указали — никак. Запрос HEAD не поддерживает хидер Range
Зато вызвав HEAD, мы получим (или не получим) заголовок Accept-Ranges, который скажет всё, что нам надо знать.

А можем просто сразу сделать GET запрос с Range.
Если сервер не умеет в Range, то он просто вернёт полный файл.
При этом мы никогда не перепутаем частичный респонс с полным — поэтому у нас корректно работают любые комбинации клиента и сервера.

C>Не видел пока вообще ни одного API, где был бы conditional get. Более того, я даже не видел клиентов, которые его бы поддерживали.

Любой браузер и любой прокси-сервер.

C>Так что на практике получается, что всё преимущество REST API заключается ровно в одном сценарии с выдачей статических файлов, и может быть реализована только при использовании клиента, который специально написан для этого.

Отчего же "статических"?

C>>>Не будут. Делаем нужные параметры запроса явным параметром и всё. Для примера, если что-то типа DownloadFile, то в запрос добавляем опциональные поля типа Range и прочих. В качестве бонуса, не нужно заниматься разбором формата Range.

S>> Покажите мне реальный (g)RPC API в котором есть опциональные параметры типа Range и прочих.
C>То есть? Это будет просто параметр в API.

C>Типа:

C>
C>service FileService {
C>  rpc DownloadData(in DownloadDataRequest) returns (stream DataChunk);
C>}

C>message DownloadDataRequest {
C>   message ChunkRange {
C>      uint64 offset = 1;
C>      uint64 size = 2;
C>   }
C>   string file_id = 1;
C>   repeated ChunkRange chunks = 2;
C>}

C>message DataChunk {
C>   uint64 chunk_index = 1;
C>   uint64 offset = 2;
C>   uint64 size = 3;
C>   bytes data = 4;
C>}
C>

Пример такого gRPC API в живой природе можно увидеть?

C>По API сразу понятно что и как использовать. Не надо гадать: "А поддерживает ли API-сервер Range?"

При желании, так можно сделать и в REST. Например, многие протоколы вместо Range:items поддерживают явные параметры size и page.
А можно просто пробовать, что поддерживает сервер. Например, если мы получили частичный ответ, а потом соединение упало, то мы можем попытаться запросить недостающую часть.
Не умеет сервер так — ну ок, перевыкачаем целиком. Умеет — сэкономим трафик.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[28]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 23.02.22 08:13
Оценка:
Здравствуйте, Sinclair, Вы писали:

C>>Да, это плохо. Все ограничения и способности API должны быть описаны в его схеме. По факту в REST это совсем не так.

S>По факту это никогда не так. Схема описывает только маленький кусочек поведения API. Тут по соседству обсуждали вопросы тестирования — я там иллюстрацию приводил.
Схема может описывать достаточно большой кусок API. По крайней мере, она однозначно может описывать все аргументы метода. В REST на практике нет даже этого.

C>>Например, имеем вот это API: https://docs.docker.com/engine/api/v1.41/#operation/ContainerArchiveInfo — "взять архив файловой системы".

S>Нет, "взять архив файловой системы" — это https://docs.docker.com/engine/api/v1.41/#operation/ContainerArchive. А то, что вы показали — это "взять информацию об архиве файловой системы".
Ага. Но это скорее вопрос к уродам, которые делают документацию в виде бесконечной страницы, которая меняет адресную строку при прокрутке.

C>>Внимание, вопрос! Как это API будет взаимодействовать с Range?

S>Тот, который вы указали — никак. Запрос HEAD не поддерживает хидер Range
S>Зато вызвав HEAD, мы получим (или не получим) заголовок Accept-Ranges, который скажет всё, что нам надо знать.
Т.е. надо иметь копию сервера, причём работающую. И создать ситуацию, когда этот метод можно вызвать.

S>А можем просто сразу сделать GET запрос с Range.

S>Если сервер не умеет в Range, то он просто вернёт полный файл.
S>При этом мы никогда не перепутаем частичный респонс с полным — поэтому у нас корректно работают любые комбинации клиента и сервера.
И как мы это счастье будем тестировать? Код с использованием Range в интеграционных тестах не будет использоваться. Писать сразу нетленку без багов и надеяться, что если Docker в какой-то момент таки добавит Range, то всё будет работать сразу правильно?

Никакие из известных мне генераторов кода по OpenAPI автоматически Range не поддерживают, кстати. Так что надеяться на инструментарий тоже не получится.

C>>Не видел пока вообще ни одного API, где был бы conditional get. Более того, я даже не видел клиентов, которые его бы поддерживали.

S>Любой браузер и любой прокси-сервер.
Браузер тоже не поддерживает для всего. XMLHttpRequest его автоматически не умеет. Так что автоматически он будет только для ресурсов, которые включаются в HTML (т.е. изображения, скрипты, CSS).

Это такое мизерное достоинство, что несерьёзно.

C>>Так что на практике получается, что всё преимущество REST API заключается ровно в одном сценарии с выдачей статических файлов, и может быть реализована только при использовании клиента, который специально написан для этого.

S>Отчего же "статических"?
Из-за того, что для нестатических conditional get бессмыслен. Т.е. файл не должен меняться, по крайней мере часто.

S>Пример такого gRPC API в живой природе можно увидеть?

Это практически пример из моего API в приложении, только у меня он в обратную сторону (upload).

Но если хочется публичного API, то вот: https://github.com/googleapis/googleapis/blob/master/google/storage/v2/storage.proto#L623

C>>По API сразу понятно что и как использовать. Не надо гадать: "А поддерживает ли API-сервер Range?"

S>При желании, так можно сделать и в REST. Например, многие протоколы вместо Range:items поддерживают явные параметры size и page.
Можно. Но тогда нет никаких преимуществ перед gRPC.
Sapienti sat!
Re[29]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.02.22 09:26
Оценка:
Здравствуйте, Cyberax, Вы писали:


C>>>Внимание, вопрос! Как это API будет взаимодействовать с Range?

S>>Тот, который вы указали — никак. Запрос HEAD не поддерживает хидер Range
S>>Зато вызвав HEAD, мы получим (или не получим) заголовок Accept-Ranges, который скажет всё, что нам надо знать.
C>Т.е. надо иметь копию сервера, причём работающую. И создать ситуацию, когда этот метод можно вызвать.
Нет, не надо. Надо читать RFC2616

C>И как мы это счастье будем тестировать? Код с использованием Range в интеграционных тестах не будет использоваться. Писать сразу нетленку без багов и надеяться, что если Docker в какой-то момент таки добавит Range, то всё будет работать сразу правильно?

Да, лучше всего — писать нетленку без багов. Прокси-сервера предоставляют такую нетленку.
В том то и разница между RPC и REST, что в последнем можно написать универсальный код, который корректно работает.

C>Никакие из известных мне генераторов кода по OpenAPI автоматически Range не поддерживают, кстати. Так что надеяться на инструментарий тоже не получится.

Конечно. И Accept-Encoding, и прочие Accept: не умеют.
C>Браузер тоже не поддерживает для всего. XMLHttpRequest его автоматически не умеет. Так что автоматически он будет только для ресурсов, которые включаются в HTML (т.е. изображения, скрипты, CSS).
И когда это XHR разучился использовать кэш браузера? В последний раз, как я этим интересовался, XHR работали точно так же, как и всё остальное.
C>Это такое мизерное достоинство, что несерьёзно.
Ну, ок.
C>Из-за того, что для нестатических conditional get бессмыслен. Т.е. файл не должен меняться, по крайней мере часто.
Всё ровно наоборот. Для статических мы ставим expiration:never, и никогда не перезапрашиваем.
А вот для контента, который может измениться, conditional get — то, что доктор прописал.
Он позволяет нам дёргать документ хоть раз в секунду — и сразу же получить новую версию, если она есть. Или очень компактный 304, если нету.
S>>При желании, так можно сделать и в REST. Например, многие протоколы вместо Range:items поддерживают явные параметры size и page.
C>Можно. Но тогда нет никаких преимуществ перед gRPC.
Вот именно
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[27]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.02.22 15:46
Оценка:
Здравствуйте, blacktea, Вы писали:

B>Господи, да что же ты такое несешь *facepalm*.

Есть возражения?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[30]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 23.02.22 17:54
Оценка:
Здравствуйте, Sinclair, Вы писали:

C>>Т.е. надо иметь копию сервера, причём работающую. И создать ситуацию, когда этот метод можно вызвать.

S>Нет, не надо. Надо читать RFC2616
Ну то есть, опять писать сразу нетленку без тестирования.

C>>И как мы это счастье будем тестировать? Код с использованием Range в интеграционных тестах не будет использоваться. Писать сразу нетленку без багов и надеяться, что если Docker в какой-то момент таки добавит Range, то всё будет работать сразу правильно?

S>Да, лучше всего — писать нетленку без багов. Прокси-сервера предоставляют такую нетленку.
S>В том то и разница между RPC и REST, что в последнем можно написать универсальный код, который корректно работает.
Т.е. для REST мы должны сразу писать код, который возможно будет мёртвым грузом вечно, и который может скрывать в себе дыры в безопасности.

Замечательно.

C>>Никакие из известных мне генераторов кода по OpenAPI автоматически Range не поддерживают, кстати. Так что надеяться на инструментарий тоже не получится.

S>Конечно. И Accept-Encoding, и прочие Accept: не умеют.
Ага.

C>>Браузер тоже не поддерживает для всего. XMLHttpRequest его автоматически не умеет. Так что автоматически он будет только для ресурсов, которые включаются в HTML (т.е. изображения, скрипты, CSS).

S>И когда это XHR разучился использовать кэш браузера? В последний раз, как я этим интересовался, XHR работали точно так же, как и всё остальное.
Не использует. fetch может использовать. При этом, ни один из известных мне небраузерных клиентов не поддерживает.
Sapienti sat!
Re[26]: Язык Go - слабые стороны
От: alex_public  
Дата: 23.02.22 20:42
Оценка:
Здравствуйте, Sinclair, Вы писали:

_>>Что и? В gPRC это возможно в рамках одного соединения, а в REST нет.

S>Возможно, хотя и с натяжкой.

Ой, ну к чему эти глупые фантазии))) Двухсторонний канал банально невозможен в REST.

_>>Так встроено или надо допиливать сервер?

S>Встроено в протокол. Реализация в сервере — дело добровольное.

Ну т.е. чтобы это заработало, это надо написать руками. Так и в gRPC тоже самое. В чём отличие то по твоему? )))

_>>Ты вот это сейчас серьёзно? ) Ты считаешь, что при запросе коллекции данных никому не придёт в голову указывать в запросе её срез и все будут возвращать только коллекцию целиком? )))

S>Конечно. Именно так. Давайте посмотрим на ваш "реальный пример" и убедимся, что, к примеру, в https://tinkoff.github.io/investAPI/marketdata/#getlastpricesrequest не предусмотрено никакого способа запросить "изменения цен с прошлого запроса".
S>Только коллекция целиком. И так всё и везде.

О, очень хороший пример по целому ряду пунктов.

Ну для начала здесь у нас как раз каноничный срез коллекции. Просто видимо ты запутался и не заметил, что тут у нас коллекцией является не массив с монотонным индексом (типа времени), а словарь (по всем инструментам). И соответственно срез описывается не интервалом "от и до", а полным перечислением ключей.

Если же ты хотел именно банальный срез монотонного массива, то там прямо рядом лежит функция https://tinkoff.github.io/investAPI/marketdata/#getcandlesrequest с классическими параметрами среза from и to, возвращающая классический кусок массива.

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

И теперь вот вопросик, а как тоже самое канонично описать в REST архитектуре? Просто идеологически тут явно должно быть GET, но при этом передавать массив строк в url как-то крайне печально... )))

_>>Ой, т.е. оказывается уже целая большая область обнаружилась, где REST сливает RPC?

_>>А кто же у нас вот только что писал:
_>>

Прямо на этом сайте уже поднимались примеры "сложных задач", где применение RPC "очевидно" эффективнее. Во всех случаях, АФАИР, RPC проиграл. В рамках CRUD можно представить всё, что угодно. Более того — как раз такое представление и является единственно возможным способом строить распределённые приложения.

_>>И вот уже "неожиданно" оказывается что не "во всех случаях"? )))
S>Ну так это же как раз несложная задача.

Ааа, ну т.е. "в рамках CRUD можно представить всё, что угодно", если это сложные задачи, а вот простые задачи с помощью CRUD плохо представляются... Понятно, понятно...

_>>А если дальше пойдём разбираться, то вообще окажется что всё наоборот... )))

S>Не, если мы пойдём дальше разбираться, то как раз и окажется, что RPC уместен там, где не нужна надёжность.

Так надёжность или сложность? ) Я уже что-то запутался... )))

А особенно забавно это всё звучит с учётом того факта, что REST по сути является строгим подмножеством RPC.

_>>Да, кстати, у ребят в указанном примере ещё год назад был REST интерфейс (OpenAPI и всё такое)... )))

S>Во-первых, почему "был"? Вот он и сейчас есть: https://tinkoff.github.io/invest-openapi/rest/

Тогда это был единственный интерфейс. А сейчас это официально старая версия, оставленная для совместимости и работающая через тот самый прокси.

S>Во-вторых, он никакой не REST. Это легко понять, посмотрев на список глаголов. У них все операции сделаны через POST — это как раз означает, что архитекторы тинькова — недоучки, и про REST не поняли ничего.

S>Это подтверждает мою гипотезу — на gRPC переходит не вся индустрия, а те, кто не осилил REST.

Что-то ты сам себе противоречишь. В предыдущем сообщение же сам признал, что для данной задачи REST не особо подходит.

_>>Нет, как раз требуется гарантированное извещение. И более того, условия ещё более жёсткие — оно требуется в чёткие интервалы времени (чуть позже и эта информация уже бесполезна). Однако сама эта задача априори требует нормальной работоспособности обеих сторон (иначе она просто не может быть решена). Так что вариант с корректной обработкой ситуации умершего клиента смешно даже рассматривать — это априори форс-мажор и потенциальная потеря денег.

S>Совершенно верно. Поэтому опытные HFT-пользователи размещают свои сервера в том же датацентре, что и биржа, не так ли
S>Но большинству простых смертных приложений такой роскоши, как сеть с надёжностью в шесть девяток, никто не даст. Поэтому делать вид, что решение, уместное для биржевых спекулянтов, подойдёт и "списку дел на сегодня" — как-то странно.

Не обязательно в том же дата-центре. Но точно в каком-то дата-центре (а не на домашнем компьютере).

_>>Оу, видеопоток через REST... Это прямо максимально интересно становится.

S>А что вас удивляет? Сейчас так делают более-менее все. Вот, пару недель назад жена участвовала в конференции удалённо. Аудиовидеостриминг в реальном времени.
S>Благодаря тому, что это было сделано через REST, мы смогли записать полное видео — причём на второй день, записали и первый и второй дни.
S>Потому что вот так вот устроен стриминг — это не fire-and-forget протокол вроде UDP или RTP, а честный HTTP, причём именно в стиле REST. То есть там лежит некоторый ресурс, который мы можем "читать", а кто-то одновременно дописывает новые данные в хвост этого ресурса.


У меня тут один старый сайтик есть, сохраняемый из ностальгических соображений. Он полностью статический. И теперь я кажется начинаю понимать, что он на самом деле сделан по архитектуре REST! Ну у него там есть разные URL'ы, к ним можно послать GET запросы и получить данные...

_>>Эээ что? ) Весь смысл всего это в том, чтобы человек пейзажики смотрел...

S>Это вам сейчас так кажется. А потом выяснится, что человеку интересно, на север он смотрит, или на юг. И что его раздражает невозможность прицелиться в нужную сторону из-за лагающей обратной связи и теряющихся prev/next.

Вообще, когда человек отвечает подобным образом на подобную задачу, то это может означать только одно из двух:
1. Он абсолютно не компетентен как инженер (не понимает слов ТЗ и т.п.)
2. Он вполне компетентен и всё понимает, но честный ответ на задачу демонстрирует его неправоту, поэтому он начинает вилять и менять ТЗ.

S>Даже формы опросников, сделанные в RPC стиле, раздражают до неимоверности (это те, где нельзя сделать back в браузере, а надо непременно жать кнопку "Назад").


Забавно, у нас в приложение по сути являющемся RPC клиентом (причём не gRPC, а вообще самодельном на базе WebSocket) в браузере, кнопка back отлично работает. Может всё дело в кривизне рук? )))

_>>Какого ещё архитектурного решения? У тебя есть физическая железка с заданными параметрами (условно двумя кнопками влево/вправо и кнопкой включения камеры, возвращающей поток кадров) и надо приделать к ней удалённый доступ.

S>
_>>Архитектуру можешь плодить какую хочешь. Но ты уже показал, что в рамках REST подхода ты можешь только слиться с невнятными оправданиями.
S>Почему же? я прикручу к этой железке датчик нуля, сделаю процедуру инициализации, и выставлю REST-протокол по управлению положением.

Да я уже понял, что ты выставишь требование изменения железа по причине того, что оно плохо сочетается с любимой тобой программной архитектурой. Интересно, как тебя на работу принимали с такими подходами? ) Или ты там при приёме скрывал подобные замашки? )))
Re[28]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 24.02.22 07:43
Оценка:
Здравствуйте, night beast, Вы писали:

_>>Если мне вдруг всё же понадобится реализовывать подобное (крайне сомневаюсь в полезности подобной задачи), то я просто поделю весь сервис на две части (с мутабельными и иммутабельными функциями), разместив их соответственно по разным адресам (т.е. так весь gRPC сервис живёт на одном URL, а так будет на двух).

NB>то есть будешь колхозить, о чем и речь.
Так что там колхозить-то? gRPC можно балансировать классически: https://towardsdev.com/grpc-request-routing-header-based-aws-alb-9934c1b4c67e — в этом примере балансирование на основе заголовка, но можно и по префиксу имени метода.

Но я бы явно разделил два endpoint'а.
Sapienti sat!
Re[31]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.02.22 08:23
Оценка:
Здравствуйте, Cyberax, Вы писали:
C>Ну то есть, опять писать сразу нетленку без тестирования.
Да совершенно необязательно. В том-то и дело, что REST из коробки очень дружелюбен к развитию протоколов.
Вот мы сели, выписали минимально необходимый набор примитивов, с которыми будет работать клиент.
Сделали референс реализацию сервера. Может быть, сделали мок-сервер, который умеет что-то там отдавать.
Написали клиента в рамках этой минимальной спецификации, протестировали.

А затем, по мере обнаружения реальных эксплуатационных проблем, начинаем решать их по мере поступления.
Например видим, что у реальных клиентов возникают проблемы — мы отдаём им большие респонсы, а связь неустойчивая, и мало кто (кроме наших же локальных QA) ухитряется докачать эти гигабайты без обрыва.
Ок — говорим "давайте мы будем поддерживать ranges". Допиливаем сервер так, чтобы он поддерживал докачку.
Допиливаем клиента; тем, кто жалуется на обрывы, говорим "ставьте клиента версии 1.02 — он умеет докачивать оборванное".
При этом у нас наш сервер может быть раскатан не на все ендпоинты; клиентов мы не можем принудительно проапгрейдить всех — и всё прекрасно работает. Клиенты версии 1.0 работают с сервером версии 1.02, и клиенты версии 1.02 продолжают работать с серверами версии 1.0.

Обнаруживаем, что наши данные меняются локально, а пользователи выкачивают каждый раз по мегабайту? Допиливаем delta encoding на сервере, допиливаем его на клиенте, тестируем, публикуем.
И опять у нас полная взаимная совместимость.

Понимаем, что данные, которые мы отправляем, сильно избыточны? Прикручиваем gzip-компрессию.
И так далее, по списку.

C>>>Браузер тоже не поддерживает для всего. XMLHttpRequest его автоматически не умеет. Так что автоматически он будет только для ресурсов, которые включаются в HTML (т.е. изображения, скрипты, CSS).

S>>И когда это XHR разучился использовать кэш браузера? В последний раз, как я этим интересовался, XHR работали точно так же, как и всё остальное.
C>Не использует. fetch может использовать.
Странно. Я пытался подтверждение в интернете, но на стековерфлоу в основном обсуждается обратный вопрос — как заставить XHR перечитывать результат GET с сервера, а не из локального кэша.
Ладно, будет время — напилю какой-нибудь простой тест.
C>При этом, ни один из известных мне небраузерных клиентов не поддерживает.
Это просто означает, что для тех клиентов такая проблема неактуальна. Ну, либо что их авторы плохо образованы, и тупо не знают возможностей используемого протокола. "Ну, а как вы хотели — 30 мегабайт это 30 мегабайт".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[30]: Язык Go - слабые стороны
От: Cyberax Марс  
Дата: 24.02.22 11:25
Оценка:
Здравствуйте, night beast, Вы писали:

C>>Так что там колхозить-то? gRPC можно балансировать классически: https://towardsdev.com/grpc-request-routing-header-based-aws-alb-9934c1b4c67e — в этом примере балансирование на основе заголовка, но можно и по префиксу имени метода.

C>>Но я бы явно разделил два endpoint'а.
NB>вопрос не в том, можно или не можно это сделать.
NB>вопрос в том что каждый будет это делать по-своему (или вообще не делать а потом, когда понадобится, судорожно все менять)
NB>в отличие от РЕСТ, где это уже описано.
Так и в REST оно тоже не "само" делается. Кто-то должен настроить маршрутизацию в зависимости от пути, причём правильно, чтобы это было прозрачно для клиентов.

На gRPC это делается ровно так же.
Sapienti sat!
Re[21]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 01.03.22 08:49
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>gRPC — это всё-таки не CORBA.


Это совсем не CORBA, это тот же REST в котором докрутили бинарный протокол вместо JSON и больше автоматического контроля за схемой.

C>Потому API на gRPC проектируется по тем же принципам, что и для REST.


Вот именно. Поэтому заявление "Нюанс в том, что в данный момент основным подходом снова становится RPC. Правда теперь это уже RPC поверх HTTP/2 (gRPC)" выглядит странно.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[27]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 03.03.22 13:02
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Вообще, когда человек отвечает подобным образом на подобную задачу, то это может означать только одно из двух:

_>1. Он абсолютно не компетентен как инженер (не понимает слов ТЗ и т.п.)
_>2. Он вполне компетентен и всё понимает, но честный ответ на задачу демонстрирует его неправоту, поэтому он начинает вилять и менять ТЗ.

Как минимум есть третий вариант — некомпетентен тот, кто писал ТЗ.
Я вообще не очень понимаю как при современном положении дел может сложиться подобная ситуация. Если речь о продакте и тех требованиях, что он дает, то он не должен писать ничего про реализацию и протокол, он должен описать user story. Если же речь о том кто диздок пишет (аналитик, техлид, тимлид etc), то как раз он и обязан задавать подобные вопросы продакту, и некомпетентен он если такие вопросы не задает, всецело полагаясь на компетенцию продакта.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[29]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 03.03.22 13:15
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Вот зачем писать такой длинный текст, чтобы продемонстрировать подобную глупость? То, что ты описал — это даже не близко двухсторонний канал. Двухсторонний, это когда в рамках одного соединения и клиент и сервер могут в любой момент (в том числе даже и совпадающие) инициировать отсылку сообщения на противоположную сторону.


https://en.wikipedia.org/wiki/WebSocket

Формально это другой протокол, но по факту очень близок к HTTP и совместим с ним.

_>Показываю на пальцах. Берём gRPC. Создаём там функции в полном соответствие с HTTP командами (GET, POST и т.д.). Явно передаём в качестве аргументов (опциональных конечно же) нужные HTTP заголовки. И договариваемся использовать эти функции по правилам REST. Что мы получим в итоге? Правильно, полноценный REST, реализованный поверх gRPC.


Да. И именно так взрослые дядьки и делают. Но тут есть одна проблема. gRPC намного жестче контролирует схему. С одной стороны, это плюс, так как страхует нас от части ошибок. Но с другой стороны — минус — так как вопрос обратной совместимости, очень больной даже в REST, в gRPC становится просто адом. Поэтому, кстати, ведущие собаководы советуют использовать gRPC только для внутрикластерных коммуникаций.
Но даже и в этом случае есть засады. Например, gRPC херит все бенефиты от микросервисной архитектуры, так как бенефиты эти завязаны на крайне слабую связность сервисов между собой через REST протоколы. Как только уровень связности повышается за счет жесткости и специфичности протоколов — в полный рост встают ровно те проблемы, от которых микросервисы должны позволить уйти.

_>Теперь понятно кто тут является чьим подмножеством? )


Почему для тебя это так важно?

_>Задача звучит так: есть готовая железка и ты должен запрограммировать для неё удалённый доступ. Ты уже продемонстрировал, что не смог справиться с этой задачей.


Больше выглядит что не справился ты. Посылать удаленному устройству вот прям команды, которые шлют ему по UDB или чем он там подрублен — это смелое решение. Что будет, к примеру, происходить при сбое прохождения пакетов ты явно не задумывался.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[33]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 03.03.22 13:19
Оценка:
Здравствуйте, Cyberax, Вы писали:

NB>>не в зависимости от пути а в зависимости от метода запроса, семантика которых (методов) четко прописана.

C>Да, в REST это более чётко прописано.

И это самое главное отлдичие REST от кастомных протоколов поверх gRPC.

C>Но тем не менее, в REST нет способа указать гарантии целостности, например.


Что ты подразумеваешь под "способом указать гарантии целостности"?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[28]: Язык Go - слабые стороны
От: alex_public  
Дата: 04.03.22 01:42
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Как минимум есть третий вариант — некомпетентен тот, кто писал ТЗ.

НС>Я вообще не очень понимаю как при современном положении дел может сложиться подобная ситуация. Если речь о продакте и тех требованиях, что он дает, то он не должен писать ничего про реализацию и протокол, он должен описать user story. Если же речь о том кто диздок пишет (аналитик, техлид, тимлид etc), то как раз он и обязан задавать подобные вопросы продакту, и некомпетентен он если такие вопросы не задает, всецело полагаясь на компетенцию продакта.

Поскольку ты очевидно не имеешь ни малейшего представление о разработке для жезелок, то попробую пояснить тебе ситуацию на примере из твоей области. Вот представь себе, что тебя вызывает руководство и говорит, что пришёл заказчик у которого есть свой спарк-кластер и который хочет чтобы вы создали ему ПО, работающее на этом кластере и решающее такие-то задачи. И вот через некоторое время все собираются и ты представляешь свой проект: "значит первым делом выкидываем ваш спарк-кластер и заменяем его на мейнфреймы; это позволит реализовать дополнительную функциональность, которая, как я считаю, вам нужна".

Эх, представил себе такую сценку и лица всех присутствующих...
Re[29]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.03.22 10:43
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Вот зачем писать такой длинный текст, чтобы продемонстрировать подобную глупость? То, что ты описал — это даже не близко двухсторонний канал. Двухсторонний, это когда в рамках одного соединения и клиент и сервер могут в любой момент (в том числе даже и совпадающие) инициировать отсылку сообщения на противоположную сторону.

Ну, и в чём подвох?

_>Ты думаешь что использование английский слов как-то улучшает твою аргументацию? На самом деле это только показывает твоё слабое владение профессиональной терминологией.

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

_>Осталось теперь только понять зачем может понадобится подобное в биржевом API. )))

Точно так же, как и в любом другом — если мне нужен список текущих цен, то мне выгоден любой способ сокращения трафика — в частности, если меняются не все цены, то получение дельты экономит трафик.

_>Ты похоже меня каким-то теоретиком считаешь))) В то время как у меня там уже давно функционирует очень прибыльная система.

Я вас никем не считаю. Я просто читаю то, что вы пишете. Мне совершенно неважно, по какой причине вы не отличаете список текущих цен на инструменты от истории свечей — потому, что вы теоретик, или просто из-за невнимательности.

_>И будет этот метод всю свою жизнь использоваться только с передачей даты предыдущего запроса (от которого вычисляется дельта) в виде null. Потому что эта функция используется только для разового получения актуального среза данных. Для истории есть свои методы. А для оперативных данных свои (поток данных инициируемый сервером и там можешь считать что реально изменения присылаются).

Ну, ок, вместо дельты вы предлагаете получать поток обновлений. Это — неплохой вариант.
_>Или быть может ты хочешь тут высказать идею о том, что непрерывный опрос в цикле — это лучше, чем ожидание сообщения об изменение с сервера? )))
Расскажите же мне, как ожидание сообщения будет работать после обрыва канала и восстановления подключения?

_>Вот, ты кажется уже начинаешь понимать как оно должно быть (в тинькоф api как раз подписка реализована, но подписка на поток от сервера!). Теперь ещё возможно дойдёшь до того, что непрерывный опрос в цикле — это очевидное зло и нагрузка впустую, и тогда сумеешь описать нормальную систему (выкинув REST), как раз как у тинькова.

Всё зависит от типа задачи. REST дружелюбен к любой топологии — в частности, я могу реализовать ресурс "история изменений", который будет бесконечным. Как число Pi.
Как мы уже обсудили выше, COMET никуда не делся. Более того — в отличие от gRPC, после обрыва я могу запросить историю изменений с того места, до которого я дочитал в прошлый раз.

_>Я чувствую такими темпами мы дойдём до того, что REST полезен только в узкой области скучных энтерпрайзных игр в базы данных (и то не факт, с учётом распространения всех этих брокеров сообщений, спарков и т.п.), а в остальных областях бесполезен.



_>А теперь попробуй реализовать обратное. Т.е. создать произвольный gRPC API с помощью REST.

А в чём проблема? Просто берём и заворачиваем всё, что угодно, в POST.

_>Не подходит для этой задачи, и ещё для многих других. )))



_>У тебя какое-то представление о современных сетях из прошлого века. У меня даже из дома пинг до тинькова 2 мс (и то это округление скорее всего).

Просто вам повезло с домом. У меня — 44мс. Физику не обманешь, и если у вас сервер расположен в 20000км от клиента, то нулевым пинг вы не сделаете никак.

_> "зачем" решает бизнес! )

Не бизнес, а продукт менеджмент.

_>Какое ещё "переизобрести REST"? Просто в браузере есть API для полноценного управления историей (т.е. поведением кнопки back) и всё. И кстати к взаимодействию с сервером это вообще ортогонально на самом деле.

Ну, можно и так, если сильно хочется.

_>У gRPC со всем этим получше будет. )))

Рассскажите, что делать при обрыве соединения, передающего stream?

_>Задача звучит так: есть готовая железка и ты должен запрограммировать для неё удалённый доступ. Ты уже продемонстрировал, что не смог справиться с этой задачей.

Хорошо, что мне обычно ставят задачи вроде "увеличить продажи в таком-то сегменте в такое-то количество раз" или "сократить количество обращений в службу поддержки в месяц на единицу продаж".

_> Такие системы (управления) всегда монопользовательские!

Как вы собираетесь это обеспечить?
_>Ты отлично продемонстрировал, что не имеешь ни малейшего представления о об обсуждаемых выше системах.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[30]: Язык Go - слабые стороны
От: alex_public  
Дата: 04.03.22 15:05
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

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

НС>Поскольку речь идет не о разработке железок, а о веб сервисах — с такими заявлениями сразу в лес.

Вообще то в дискуссии о ТЗ речь шла именно что о железке, причём вполне конкретной. И Sinclair требовал добавить к этой железке дополнительный аппаратный блок, чтобы соизволить взяться за написание простейшей программной части для неё. Видимо без этого данная простейшая задачка является нерешаемой для архитекторов с REST'ом головного мозга. )))
Re[31]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 05.03.22 07:36
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Вообще то в дискуссии о ТЗ речь шла именно что о железке, причём вполне конкретной. И Sinclair требовал добавить к этой железке дополнительный аппаратный блок


Ты как то крайне странно понял что он предлагал. Если удаленный протокол задан свыше, и там все так как ты описал — ну что ж, придется клиентам жрать кактус. ТОлько неясно при чем тут REST — в этой ситуации услуги аналитика и архитектора нам не нужны, все уже спроектировано.
Но топик то был не о такой ситуации, а о ситуации когда у нас есть возможность выбора между REST и RPC. Т.е. речь не о каком то аппаратном блоке, а о вполне себе программной начинке, а ты сейчас пытаешься подменить тему. Дескать, я тут придумал чисто аппаратное решение, где вы лохи, а значит я победил и прав во всем.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[32]: Язык Go - слабые стороны
От: alex_public  
Дата: 07.03.22 01:13
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

_>>Вообще то в дискуссии о ТЗ речь шла именно что о железке, причём вполне конкретной. И Sinclair требовал добавить к этой железке дополнительный аппаратный блок

НС>Ты как то крайне странно понял что он предлагал. Если удаленный протокол задан свыше, и там все так как ты описал — ну что ж, придется клиентам жрать кактус. ТОлько неясно при чем тут REST — в этой ситуации услуги аналитика и архитектора нам не нужны, все уже спроектировано.
НС>Но топик то был не о такой ситуации, а о ситуации когда у нас есть возможность выбора между REST и RPC. Т.е. речь не о каком то аппаратном блоке, а о вполне себе программной начинке, а ты сейчас пытаешься подменить тему. Дескать, я тут придумал чисто аппаратное решение, где вы лохи, а значит я победил и прав во всем.

Что-то ты бредишь или не знаю чем читал нашу беседу. Задача была сформулирована мною предельно просто: есть некая конкретная железка с конкретными "кнопками" и надо приделать (любым программным способом, без каких-либо ограничений на протокол) к ней удалённое управление (чтобы грубо говоря нажимать эти кнопки дистанционно). Если что, могу кинуть ссылку именно на такую формулировку в дискуссии выше.

И мой оппонент откровенно слился при решений этой простейшей задачки. Причём слился он очевидно потому, что у него REST головного мозга, а данная задача не очень канонично ложится на эту архитектуру. Но естественно он не мог этого признать и начал тупо вилять, рассказывая о том что надо просто взять другую железку и вот для неё то он уж напишет как надо...
Re[34]: Язык Go - слабые стороны
От: alex_public  
Дата: 10.03.22 01:00
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

_>> Задача была сформулирована мною предельно просто

НС>Задача твоя была призвана сменить тему. А когда тут никто на это не повелся — ты начал хамить.

Нет, задачка была ответом на тезис собеседника о том, что CRUD (читай REST) подход идеален для абсолютно всех видов задач. Это был контрпример на такой тезис.

НС>Я тебе напомню с чего все началось:

НС>

НС>Нюанс в том, что в данный момент основным подходом снова становится RPC.

НС>А теперь поясни, как отличия между RPC и REST вылились в обязательную необходимость какого то аппаратного блока.

Чтобы понять это достаточно было прочитать нашу дискуссию, но ты конечно это не осилил, а влез так и не поняв о чём вообще речь.

НС>Это я уж не говорю о том, что сравнивать REST (идеологию) и gRPC(конкретный фреймворк) — не самое разумное занятие. Сравнивать можно либо HTTP+JSON с gRPC, либо REST с RPC.


gRPC — это конкретный фреймворк, который набирает в данное время большую популярность. Более того, у меня на глазах переписывают существующие REST (в классической реализации) интерфейсы на gRPC (в не REST стиле). Что является индикатором того, что мода на чистую REST архитектуру, доминировавшую одно время, проходит.

_>>: есть некая конкретная железка с конкретными "кнопками" и надо приделать (любым программным способом, без каких-либо ограничений на протокол) к ней удалённое управление (чтобы грубо говоря нажимать эти кнопки дистанционно).

НС>Без промежуточного сервера на стороне железки? И этот момент ты, конечно, "забыл" уточнить в начале?

Само собой сервер (ну если так можно назвать платку в несколько квадратных сантиметров) имеется. Без этого просто невозможно ничего сделать и озвучивать такое специально было бы просто смешно. И мой собеседник прекрасно это всё понял.

НС>Еще раз, если ты с первого раза не понял:

НС>1) Либо на стороне железки нет возможности выбирать протокол, и тогда пример нерелевантен топику от слова "совсем"
НС>2) Либо протокол таки выбирать мы можем, и тогда твои рассказы про необходимость замены аппаратного блока и особенности разработки железок — грубая попытка подмены темы

Протокол выбирать можно. А необходимость замены железа заявил как раз мой собеседник. Похоже ты тут демонстрируешь просто эталонный уровень "я не в теме". )))
Re[36]: Язык Go - слабые стороны
От: alex_public  
Дата: 10.03.22 01:33
Оценка:
Здравствуйте, Sinclair, Вы писали:

_>>Почему невозможно то? Просто делаешь одну функцию Move (по методу POST) с одним булевым параметром (типа право/лево) и всё. Не вижу никаких проблем на самом деле.

S>Это не REST, а RPC.

Я знал (поэтому собственно и привёл этот пример изначально), что тебе это покажется не каноничным. ))) Но кстати интересно, какое из формальных требований REST ты видишь тут нарушенным (и чтобы при этом оно переставало быть нарушенном при наличие экодера)?

И это был только один пример (а ну да, точнее уже второй, если вспомнить ещё и биржу), а я ещё могу интересного повспоминать, причём всё из реальной практики и уже даже без железа...

_>>P.S. И кстати с учётом текущей геополитической обстановки, этот навык становится особо востребованным...

S>То есть вы думаете, что оптопары в РФ будут недоступны? Пессимистичненьно...

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

Да, и кстати оптопара не даст тебе возможность определения абсолютного положения. Только относительного (что глупо и не нужно, т.к. у тебя и так шаговый двигатель).
Re[37]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.03.22 03:48
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Я знал (поэтому собственно и привёл этот пример изначально), что тебе это покажется не каноничным. ))) Но кстати интересно, какое из формальных требований REST ты видишь тут нарушенным (и чтобы при этом оно переставало быть нарушенном при наличие экодера)?

Representational State Transfer. Для REST главное — передача состояния, а не команд.

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



_>Да, и кстати оптопара не даст тебе возможность определения абсолютного положения. Только относительного (что глупо и не нужно, т.к. у тебя и так шаговый двигатель).

Она даст возможность инициализировать положение железки после включения локального контроллера (ну, или пропадания связи между железкой и контроллером, что с точки зрения архитектуры одно и то же)
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[35]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 10.03.22 08:54
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Нет, задачка была ответом на тезис собеседника о том, что CRUD (читай REST) подход идеален для абсолютно всех видов задач.


Это где он такое написал?

НС>>А теперь поясни, как отличия между RPC и REST вылились в обязательную необходимость какого то аппаратного блока.

_>Чтобы понять это достаточно было прочитать нашу дискуссию, но ты конечно это не осилил,

Антон, судя по всему, тоже ее почему то не осилил. Их тут тысячи?

НС>>Это я уж не говорю о том, что сравнивать REST (идеологию) и gRPC(конкретный фреймворк) — не самое разумное занятие. Сравнивать можно либо HTTP+JSON с gRPC, либо REST с RPC.

_>gRPC — это конкретный фреймворк, который набирает в данное время большую популярность.

Ага, и при этом, как правильно заметил Cyberax, взрослые дядьки все равно проектируют для него API в REST стиле.

_> Более того, у меня на глазах переписывают существующие REST (в классической реализации) интерфейсы на gRPC (в не REST стиле). Что является индикатором того, что мода на чистую REST архитектуру, доминировавшую одно время, проходит.


Или индикатором того, что к вам пришел очередной архитект с NIH синдромом.

НС>>Без промежуточного сервера на стороне железки? И этот момент ты, конечно, "забыл" уточнить в начале?

_>Само собой сервер (ну если так можно назвать платку в несколько квадратных сантиметров) имеется. Без этого просто невозможно ничего сделать и озвучивать такое специально было бы просто смешно. И мой собеседник прекрасно это всё понял.

Ну то есть для замены RPC на REST никакого нового аппаратного блока все же не нужно.

_>Протокол выбирать можно. А необходимость замены железа заявил как раз мой собеседник.


Где он такое написал?

_>Похоже ты тут демонстрируешь просто эталонный уровень "я не в теме". )))


Ага, и Антон тоже не в теме. В теме только ты. О чем, собственно, я и написал в предыдущем сообщении.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[35]: Язык Go - слабые стороны
От: Ночной Смотрящий Россия  
Дата: 10.03.22 08:54
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Почему невозможно то? Просто делаешь одну функцию Move (по методу POST) с одним булевым параметром (типа право/лево) и всё. Не вижу никаких проблем на самом деле.


Тебе уже вопросы конкретные задали, но ты их поскипал. Что произойдет при обрыве соединения в момент посылки Move? Что произойдет если соединение оборвется в момент возврата отклика от сервера. Что будет если соединение с фиговой латентностью?
А то что ты никаких проблем не видишь мы уже поняли.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[30]: Язык Go - слабые стороны
От: alex_public  
Дата: 10.03.22 13:50
Оценка:
Здравствуйте, Sinclair, Вы писали:

О, я тут заметил что как-то пропустил твоё старое сообщение (я вообще через уведомления в почте читаю этот форум). Ну сейчас отвечу тогда...

_>>Вот зачем писать такой длинный текст, чтобы продемонстрировать подобную глупость? То, что ты описал — это даже не близко двухсторонний канал. Двухсторонний, это когда в рамках одного соединения и клиент и сервер могут в любой момент (в том числе даже и совпадающие) инициировать отсылку сообщения на противоположную сторону.

S>Ну, и в чём подвох?

Подвох в том, что ни в каких текущих реализациях REST это невозможно. Собственно поэтому grpc-gateway не является полноценным, а может эмулировать только подмножество возможностей grpc.

_>>Осталось теперь только понять зачем может понадобится подобное в биржевом API. )))

S>Точно так же, как и в любом другом — если мне нужен список текущих цен, то мне выгоден любой способ сокращения трафика — в частности, если меняются не все цены, то получение дельты экономит трафик.

Чтобы у тебя возникла экономия трафика с твоим подходом, тебе надо будет сделать как минимум два последовательных вызова этой функции. А это значит, что ты уже не правильно пользуешься этим API, т.к. для таких задач существует поток от сервера.

_>>Или быть может ты хочешь тут высказать идею о том, что непрерывный опрос в цикле — это лучше, чем ожидание сообщения об изменение с сервера? )))

S>Расскажите же мне, как ожидание сообщения будет работать после обрыва канала и восстановления подключения?

Восстанавливаешь соединение и снова подписываешься на нужные данные.

_>>Вот, ты кажется уже начинаешь понимать как оно должно быть (в тинькоф api как раз подписка реализована, но подписка на поток от сервера!). Теперь ещё возможно дойдёшь до того, что непрерывный опрос в цикле — это очевидное зло и нагрузка впустую, и тогда сумеешь описать нормальную систему (выкинув REST), как раз как у тинькова.

S>Всё зависит от типа задачи. REST дружелюбен к любой топологии — в частности, я могу реализовать ресурс "история изменений", который будет бесконечным. Как число Pi.
S>Как мы уже обсудили выше, COMET никуда не делся. Более того — в отличие от gRPC, после обрыва я могу запросить историю изменений с того места, до которого я дочитал в прошлый раз.

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

_>>А теперь попробуй реализовать обратное. Т.е. создать произвольный gRPC API с помощью REST.

S>А в чём проблема? Просто берём и заворачиваем всё, что угодно, в POST.

Ну вот заверни двухсторонний поток в POST. )))

_>>У тебя какое-то представление о современных сетях из прошлого века. У меня даже из дома пинг до тинькова 2 мс (и то это округление скорее всего).

S>Просто вам повезло с домом. У меня — 44мс. Физику не обманешь, и если у вас сервер расположен в 20000км от клиента, то нулевым пинг вы не сделаете никак.

Однако ты легко можешь взять сервер в любом датацентре Москвы и получишь результат как у меня. И для этого вовсе не надо залезать в датацентр Тинькова.

_>>У gRPC со всем этим получше будет. )))

S> Рассскажите, что делать при обрыве соединения, передающего stream?

Переподключаешься и запрашиваешь stream снова. А в чём проблема то?

_>>Задача звучит так: есть готовая железка и ты должен запрограммировать для неё удалённый доступ. Ты уже продемонстрировал, что не смог справиться с этой задачей.

S> Хорошо, что мне обычно ставят задачи вроде "увеличить продажи в таком-то сегменте в такое-то количество раз" или "сократить количество обращений в службу поддержки в месяц на единицу продаж".

Что-то не похоже на техническую должность, скорее на менеджерскую... )

_>> Такие системы (управления) всегда монопользовательские!

S>Как вы собираетесь это обеспечить?

Логин и пароль естественно. Ты вообще что ли никогда не встречался с камерами наблюдения? ))) Сейчас же это уже вообще бытовое устройство по сути, которое многие дома ставят. Ещё за животными подглядывают с работы... )))
Re[39]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.03.22 14:19
Оценка:
Здравствуйте, alex_public, Вы писали:
_>Да, это главное. Только надо понимать в каком смысле здесь говорится о передаче состояния.
В прямом.
_>А именно, здесь подразумевается отказ от хранения состояния сервером — всё нужное приходит в запросе.
Нет конечно, это чушь. Именно что понимается хранение состояния сервером.
_>А если у нас такая задача, что в ней просто нет состояния в принципе?
Тогда можно обойтись без REST. Но даже в таких задачах бывают неожиданные полезности от REST.
_>Кстати, могу тебе ещё один вполне реальный пример привести. Серверу передаются некий скрипт, который он должен выполнить (и возможно прислать какие-то реакции, причём возможно не сразу, — зависит от самого скрипта). У меня вот тут под боком реально передвигается некая штука (и исполняет сложные команды)...
Да, это один из канонических примеров преимуществ REST.
Потому, что REST позволяет, к примеру, убедиться, что скрипт выполнится не более 1 раза, даже если коммуникационный канал между клиентом и сервером сбоит.
REST позволит нам от задачи "мы что-то там отправили на сервер, хз чо получилось и получилось ли вообще" перейти к задаче "управляем очередью заданий на сервере" — в том числе видеть, исполнился ли скрипт, или ещё ждёт в очереди, или он исполняется.
Будет возможность прервать или отменить исполнение скрипта.

_>О, тут ещё подумалось... А ведь взаимодействие со всеми базами данных тоже же укладывается в этот сценарий (просто там в роли скрипта SQL и т.п. будут). Как насчёт показать преимущества REST в такой классической задаче? )))

Да, SQL — это классика REST.
_>В том смысле что реализовать не доступ к конкретной табличке (собственно это и есть функциональность 90% современных говносервисов в сети), а реализовать в стиле REST универсальный интерфейс доступа к БД, позволяющий выполнить произвольный SQL (для примера) запрос.
В мире SQL REST-стиль — это отказ от хранимых процедур в пользу View + Instead-of triggers.
Я этот пример студентам рассказываю

_>А то ты же говорил, что "Во всех случаях, АФАИР, RPC проиграл." и "В рамках CRUD можно представить всё, что угодно."...

А то.

_>И это будет абсолютно бесполезная и неудобная для пользователя функция. Потому что если ты будешь показывать ему это значение (а иначе зачем оно тогда?), то он привыкнет что грубо говоря 0 — это направление на север, а 180 — это на юг. А после следующего выключения энергии эти значения станут уже другими.

Смотрите, как это работает. К камере крепится диск с 1 отверстием, разделяющий светодиод и фотодиод. Оптопара монтируется в выбранном нами направлении — например, север.
Всякий раз, как "сервер" просыпается, он начинает крутить камерой по часовой стрелке, пока оптопара не покажет "есть!". Теперь мы знаем состояние камеры — она смотрит на север.
Когда мне приходит команда "повернись в направлении 276", сервер выдаёт моторчику заданное количество шагов. Ну там — 0, если камера уже смотрит на 276, и 36, если камера смотрит на 240. При этом он, понятное дело, изменяет состояние некоторого внутреннего "регистра" — глобальной переменной, которая описывает текущее состояние камеры.

_>В общем похоже что гениальным архитекторам пока что ещё рано думать о железе...

%)
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[31]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.03.22 14:25
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Подвох в том, что ни в каких текущих реализациях REST это невозможно.

Хм. Я вроде описал способ, которым это делается.

_>Восстанавливаешь соединение и снова подписываешься на нужные данные.

Падажжите. Ну так в моей подписке был провал неизвестной длительности.

_>Ты похоже чего-то не понимаешь))) Те данные, что присылаются потоком — они потом нигде не хранятся, ни в каких историях.

Вы так говорите, как будто это хорошо.
_>В истории бирж хранятся свечи, с максимальным разрешением по времени в 1 минуту. А поток присылает изменения цены в реальном времени (может быть секундные, а может быть часовые — зависит от ситуации и инструмента).
Что такое "часовые изменения в реальном времени"?

_>Ну вот заверни двухсторонний поток в POST. )))

Я продолжаю непонимать в чём проблема.

_>Однако ты легко можешь взять сервер в любом датацентре Москвы и получишь результат как у меня. И для этого вовсе не надо залезать в датацентр Тинькова.

Ок, давайте так — сколько наносекунд занимает разбор "текстовых хидеров" в REST-запросе, который лишний по сравнению с gRPC?

_>Переподключаешься и запрашиваешь stream снова. А в чём проблема то?

В том, что кусок стрима прощёлкан клювом.

_>Что-то не похоже на техническую должность, скорее на менеджерскую... )



_>Логин и пароль естественно. Ты вообще что ли никогда не встречался с камерами наблюдения? ))) Сейчас же это уже вообще бытовое устройство по сути, которое многие дома ставят. Ещё за животными подглядывают с работы... )))


Ну вот, я взял и зашёл на эту камеру с телефона, и одновременно с компьютера.
Я кручу на телефоне "вправо", а жена в это время крутит "влево". Что будет происходить?

Однопользовательскость не определяется логином и паролем.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[40]: Язык Go - слабые стороны
От: alex_public  
Дата: 10.03.22 15:24
Оценка:
Здравствуйте, Sinclair, Вы писали:

_>>А именно, здесь подразумевается отказ от хранения состояния сервером — всё нужное приходит в запросе.

S>Нет конечно, это чушь. Именно что понимается хранение состояния сервером.

Какая милота. Кстати, не напомнишь, как там звучит 2-ой пункт из требований REST? )))

_>>А если у нас такая задача, что в ней просто нет состояния в принципе?

S>Тогда можно обойтись без REST. Но даже в таких задачах бывают неожиданные полезности от REST.

По правильному тут надо читать не "можно обойтись без REST", а "лучше обходиться без REST". )))

_>>Кстати, могу тебе ещё один вполне реальный пример привести. Серверу передаются некий скрипт, который он должен выполнить (и возможно прислать какие-то реакции, причём возможно не сразу, — зависит от самого скрипта). У меня вот тут под боком реально передвигается некая штука (и исполняет сложные команды)...

S>Да, это один из канонических примеров преимуществ REST.
S>Потому, что REST позволяет, к примеру, убедиться, что скрипт выполнится не более 1 раза, даже если коммуникационный канал между клиентом и сервером сбоит.
S>REST позволит нам от задачи "мы что-то там отправили на сервер, хз чо получилось и получилось ли вообще" перейти к задаче "управляем очередью заданий на сервере" — в том числе видеть, исполнился ли скрипт, или ещё ждёт в очереди, или он исполняется.
S>Будет возможность прервать или отменить исполнение скрипта.

Как забавно. ) Так что же тебе помешало тогда в предыдущей задачке (которая очевидно является подмножеством этой) применить тот же подход? ) Ну типа очередь заданий виде "поворот налево" и "поворот направо"? )))

_>>О, тут ещё подумалось... А ведь взаимодействие со всеми базами данных тоже же укладывается в этот сценарий (просто там в роли скрипта SQL и т.п. будут). Как насчёт показать преимущества REST в такой классической задаче? )))

S>Да, SQL — это классика REST.

О, даже так...

Т.е. я правильно понимаю, что скажем эта https://www.postgresql.org/docs/current/protocol.html штука является классикой REST? )

_>>В том смысле что реализовать не доступ к конкретной табличке (собственно это и есть функциональность 90% современных говносервисов в сети), а реализовать в стиле REST универсальный интерфейс доступа к БД, позволяющий выполнить произвольный SQL (для примера) запрос.

S>В мире SQL REST-стиль — это отказ от хранимых процедур в пользу View + Instead-of triggers.
S>Я этот пример студентам рассказываю

Так ты интерфейс то опиши... Вот у нас у клиента есть произвольная SQL (+DML+DDL, ну как обычно) строка. Куда её сунуть и как получить результат исполнения в REST стиле...

_>>И это будет абсолютно бесполезная и неудобная для пользователя функция. Потому что если ты будешь показывать ему это значение (а иначе зачем оно тогда?), то он привыкнет что грубо говоря 0 — это направление на север, а 180 — это на юг. А после следующего выключения энергии эти значения станут уже другими.

S>Смотрите, как это работает. К камере крепится диск с 1 отверстием, разделяющий светодиод и фотодиод. Оптопара монтируется в выбранном нами направлении — например, север.
S>Всякий раз, как "сервер" просыпается, он начинает крутить камерой по часовой стрелке, пока оптопара не покажет "есть!". Теперь мы знаем состояние камеры — она смотрит на север.
S>Когда мне приходит команда "повернись в направлении 276", сервер выдаёт моторчику заданное количество шагов. Ну там — 0, если камера уже смотрит на 276, и 36, если камера смотрит на 240. При этом он, понятное дело, изменяет состояние некоторого внутреннего "регистра" — глобальной переменной, которая описывает текущее состояние камеры.

Ха, ты имел ввиду оптопару в таком смысле. Понятно) Просто традиционно её применяют совсем по другому (по сути для подсчёта шагов). А то, что описал ты традиционно называется совсем по другому: концевики. И они бывают и оптические и механические и магнитные. Да, и кстати никакой диск при их использование (оптических естественно) не нужен (а вот для подсчёта шагов как раз используется диск со множеством прорезей).

Ну и да, такое будет работать. Но это, как я и говорил изначально, будет дополнительный аппаратный блок и дополнительная прошивка. А с изначальной задачей на заданном железе ты справиться не смог.
Re[32]: Язык Go - слабые стороны
От: alex_public  
Дата: 10.03.22 17:13
Оценка:
Здравствуйте, Sinclair, Вы писали:

_>>Подвох в том, что ни в каких текущих реализациях REST это невозможно.

S>Хм. Я вроде описал способ, которым это делается.

Ну что за детских сад? Вот давай ты попробуешь реализовать в стиле REST например тот же самый потоковый протокол Тинькова информации с биржи. Т.е. вот мы подключаемся; подписываемся на информацию о 5 акциях; нам идёт в ответ непрерывный поток этой информации; далее в какой-то момент мы хотим ещё и о какой-то 6-ой акции получать информацию и изменяем свою подписку; и после этого получаем уже поток с информацией о 6 акциях. И всё это конечно в рамках одного соединения. Ну и как ты это сделаешь?

_>>Восстанавливаешь соединение и снова подписываешься на нужные данные.

S>Падажжите. Ну так в моей подписке был провал неизвестной длительности.

И? Эти данные уже давно стухли.

_>>В истории бирж хранятся свечи, с максимальным разрешением по времени в 1 минуту. А поток присылает изменения цены в реальном времени (может быть секундные, а может быть часовые — зависит от ситуации и инструмента).

S>Что такое "часовые изменения в реальном времени"?

Это значит, что ты подписался на поток, а там часами никаких сообщений (если нет сделок), а может быть наоборот, каждую секунду летят...

_>>Однако ты легко можешь взять сервер в любом датацентре Москвы и получишь результат как у меня. И для этого вовсе не надо залезать в датацентр Тинькова.

S>Ок, давайте так — сколько наносекунд занимает разбор "текстовых хидеров" в REST-запросе, который лишний по сравнению с gRPC?

Так я вроде приводил графики (причём даже не свои, а какие-то дотнетные), но ты сказал что нарисовать всё что угодно можно...

_>>Переподключаешься и запрашиваешь stream снова. А в чём проблема то?

S>В том, что кусок стрима прощёлкан клювом.

Так он же стухла уже. ))) Как весь предыдущий стрим собственно — важно только текущее значение и всё.

_>>Логин и пароль естественно. Ты вообще что ли никогда не встречался с камерами наблюдения? ))) Сейчас же это уже вообще бытовое устройство по сути, которое многие дома ставят. Ещё за животными подглядывают с работы... )))

S>
S>Ну вот, я взял и зашёл на эту камеру с телефона, и одновременно с компьютера.
S>Я кручу на телефоне "вправо", а жена в это время крутит "влево". Что будет происходить?
S>Однопользовательскость не определяется логином и паролем.

И снова детский сад? Вот как будто бы ты не знаешь как решается данный вопрос. Что есть две стандартные стратегии: или текущее соединение блокирует все новые или же любое новое соединение выкидывает предыдущее. И в разных задачах используется или один или второй подход.
Re[42]: Язык Go - слабые стороны
От: alex_public  
Дата: 11.03.22 01:09
Оценка:
Здравствуйте, Sinclair, Вы писали:

_>>Какая милота. Кстати, не напомнишь, как там звучит 2-ой пункт из требований REST? )))

S>Вы явно чего-то фундаментального не понимаете про REST. Из того, что RESTful протокол занимается передачей состояния, вовсе не означает, что "всё состояние передаётся в запросе".

Так ты не ответил, какой там 2-ой пункт из требований REST? И как это пересекается с твоим пониманием REST "Именно что понимается хранение состояния сервером"? )))

_>>По правильному тут надо читать не "можно обойтись без REST", а "лучше обходиться без REST". )))

S>Прежде чем давать советы, как и что правильно читать, неплохо было бы разобраться с основами REST.
S>Ну, возьмём например такой сервис, у которого вообще нет никакого состояния.
S>Ему на вход подаётся, допустим, небольшая картинка. Скажем, 200*80px. Сервер ставит на неё свой водяной знак.
S>Можно это трактовать как RPC: "Вот тебе картинка, нарисуй на ней".
S>А можно — как REST: "Отдай мне картинку с такими параметрами".
S>Второй подход выигрывает тем, что можно снизить нагрузку от повторных обращений, просто выставив хидер Expiration: Never.

Прикинул вероятность побитового совпадения двух произвольных цветных картинок размером 200*80px и в очередной раз оценил твоё умение проектировать системы. )

S>Можно реализовать сервис, который отдаёт десятичные знаки числа Pi. Он тоже полностью stateless.

S>REST-подход означает, что мы легко привинчиваем к нему Range хидер: сервис просто пропускает сколько-то первых цифр, которые уже есть у клиента, и экономит ему трафик.

Да, люди очень хорошо научились раздавать статические файлы. Правда к API это никакого отношения не имеет. Да и кстати даже со статическими файлами это умение уже давно не актуально. Помнится последний раз докачкой большого файла я пользовался лет 20 назад. А в современном мире даже если и случится такое чудо, как сбой в уже идущем процессе скачивания, то всем гораздо проще инициировать скачивание сначала.

_>>Как забавно. ) Так что же тебе помешало тогда в предыдущей задачке (которая очевидно является подмножеством этой) применить тот же подход? ) Ну типа очередь заданий виде "поворот налево" и "поворот направо"? )))

S>А там примерно так и будет; потому что поворот камеры осуществляется не мгновенно. Поэтому когда делается PUT или PATCH, придётся отвечать 202.

О, т.е. теперь уже оказывается, что можно решить задачку на REST и без дополнительного железа? Или что? )))

_>>Т.е. я правильно понимаю, что скажем эта https://www.postgresql.org/docs/current/protocol.html штука является классикой REST? )

S>Нет. Сам по себе DML является практически классикой REST, потому что как раз и описывает CRUD операции.

Не слышал про такой протокол, как DML... К какой СУБД он даёт сетевой доступ и по какому порту обычно? )

_>>Так ты интерфейс то опиши... Вот у нас у клиента есть произвольная SQL (+DML+DDL, ну как обычно) строка. Куда её сунуть и как получить результат исполнения в REST стиле...

S>Вот вы опять подменяете задачу конкретным решением.
S>Задача у вас в чём? Управлять состоянием БД.
S>Ну вот был у нас такой доисторический stateful протокол. Разработанный для текстовых терминалов, перед которыми будет сидеть живой пользователь, и набирать все вот эти вот begin transaction.

Я правильно понял, что теперь у нас и SQL плохой и устаревший? )))

S>Если мы поставим такую же задачу перед современным архитектором, то получится протокол ODATA


Я правильно понял, что этот мертворождённый уродец, является твоим идеалом? )
Re[34]: Язык Go - слабые стороны
От: alex_public  
Дата: 11.03.22 01:30
Оценка:
Здравствуйте, Sinclair, Вы писали:

_>>Ну что за детских сад? Вот давай ты попробуешь реализовать в стиле REST например тот же самый потоковый протокол Тинькова информации с биржи. Т.е. вот мы подключаемся; подписываемся на информацию о 5 акциях; нам идёт в ответ непрерывный поток этой информации; далее в какой-то момент мы хотим ещё и о какой-то 6-ой акции получать информацию и изменяем свою подписку; и после этого получаем уже поток с информацией о 6 акциях. И всё это конечно в рамках одного соединения. Ну и как ты это сделаешь?

S>Сделаю POST, в тело которого запишу список 5 акций. Для простоты — в line-delimited JSON. В ответ нам начинает ехать поток обновлений в какой-то кодировке.
S>Для простоты — line-delimited JSON.
S>Поток никогда не закрывается. Ни туда, ни обратно. Всё.
S>Тут, конечно, нарушены некоторые принципы REST, но в целом всё работает

Так это ты описал только начало из указанного мною сценария. А как 6-ую акцию то включить в поток в процессе работы? )

_>>И? Эти данные уже давно стухли.

S>Ну как это "стухли"?
S>Вот у меня есть 500 инструментов. Обновляются по разному. Кто-то раз в час, кто-то раз в секунду. Связь на 10 секунд пропала. Мне теперь надо перевычитать цены для всех 500? Изменилось-то за это время может быть 40 позиций. Опять же — как мне убедиться, что между моментами "я прочитал все цены" и "я начал ловить поток изменений" не было потерянных изменений?

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

_>>Так я вроде приводил графики (причём даже не свои, а какие-то дотнетные), но ты сказал что нарисовать всё что угодно можно...

S>Это потому, что непонятно, какая задача решалась. Я вот показываю примеры, в которых при неустойчивой связи RPC будет гораздо хуже по трафику, чем REST.

Какие ещё примеры ты показал? Что в 90-ые годы была польза от возможности докачать большой статический файл при обрыве связи? Это правда... Только какое это имеет отношение к современным API, работающим в современных сетях?

_>>И снова детский сад? Вот как будто бы ты не знаешь как решается данный вопрос. Что есть две стандартные стратегии: или текущее соединение блокирует все новые или же любое новое соединение выкидывает предыдущее. И в разных задачах используется или один или второй подход.

S>Здорово. То есть теперь мы не можем посмотреть одну и ту же камеру с двух компьютеров.

Не смотреть камеру, а иметь доступ к интерфейсу управления. Ты вот видел когда-нибудь, чтобы например к одному дрону можно было подключиться с двух контроллеров? Может это тоже недостаток продукта? )))

S>Смотрите, как быстро вы закапываете свой продукт Меня всегда изумляли ситуации, когда люди намеренно делают продукт хуже, вместо того, чтобы немножко подумать.


Да, да, я уже прямо представил, что твой дрон управляемый по OData одновременно сотней операторов, был бы просто хитом. )))
Re[35]: Язык Go - слабые стороны
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.03.22 02:08
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Так это ты описал только начало из указанного мною сценария. А как 6-ую акцию то включить в поток в процессе работы? )

Так и включить. Канал-то не закрыт. Дошлю ещё строчку line-delimited JSON.

_>А вот как раз для этого и существует функция (не потоковая) "получить текущие цены". Та самая, которую ты хотел зачем-то оптимизировать на отправку только изменений (сломав тем самым нужную функциональность).

ИИИ? Функция вернула результат на момент T0. Поток начал ехать в момент T0+dT.
Что с изменениями, которые (возможно) произошли за dT?

_>Какие ещё примеры ты показал? Что в 90-ые годы была польза от возможности докачать большой статический файл при обрыве связи? Это правда... Только какое это имеет отношение к современным API, работающим в современных сетях?

Современные сети — это, в том числе, и GPRS на ходу из автомобиля, который едет по городу с туннелями и развязками.

_>Да, да, я уже прямо представил, что твой дрон управляемый по OData одновременно сотней операторов, был бы просто хитом. )))

Естественно. Был бы именно что хитом. Но пока технической возможности реализовать именно дрон нету.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Язык Go - слабые стороны
От: Няшка Россия  
Дата: 21.05.22 11:45
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вот, кстати, что на счет Go?


S>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?


Изначально язык был создан Гуглом, чтобы снизить порог вхождения по сравнению с С/С++. Хороший компилятор и сильно упрощенные возможности нацеленны на то, чтобы не дать сделать ошибку. Если учитывать, что компиляторы оптимизируют сейчас в большинстве лучше чем человек, а на первый план выходит стоимость и скорость разработки (и сопровождения), то у С/С++ остается не так много козырей: умеечи можно написать производительнее / оптимизированее что-то монструозное или заточенное под железо.
Личное мнение: после С++ слёзы наворачиваются от примитивности, но что делать — такие времена.
80% людей оценивают свое мастерство выше среднего...
Re[2]: Язык Go - слабые стороны
От: vaa  
Дата: 30.05.22 06:29
Оценка:
Здравствуйте, Няшка, Вы писали:

Н>Здравствуйте, Shmj, Вы писали:


S>>Вот, кстати, что на счет Go?


S>>Из коробки компилится под множество платформ. Какие минусы в сравнении с тем же C++?


Н>Изначально язык был создан Гуглом, чтобы снизить порог вхождения по сравнению с С/С++. Хороший компилятор и сильно упрощенные возможности нацеленны на то, чтобы не дать сделать ошибку. Если учитывать, что компиляторы оптимизируют сейчас в большинстве лучше чем человек, а на первый план выходит стоимость и скорость разработки (и сопровождения), то у С/С++ остается не так много козырей: умеечи можно написать производительнее / оптимизированее что-то монструозное или заточенное под железо.

Н>Личное мнение: после С++ слёзы наворачиваются от примитивности, но что делать — такие времена.

я тут тыкнул на сайте пример.
в го
var string;

это "" пустая строка, довольно странное решение.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[7]: Опять дваццатьпять
От: pagid Россия  
Дата: 31.05.22 08:15
Оценка:
Здравствуйте, CreatorCray, Вы писали:

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

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

З.Ы. Так ты Шеридану и отвечаешь , не заметил сразу
Re[3]: Язык Go - слабые стороны
От: DarkEld3r  
Дата: 05.06.22 20:28
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>это "" пустая строка, довольно странное решение.


А что должно быть?
Re[5]: Язык Go - слабые стороны
От: Няшка Россия  
Дата: 06.06.22 08:07
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Здравствуйте, DarkEld3r, Вы писали:


DE>>Здравствуйте, vaa, Вы писали:


vaa>>>это "" пустая строка, довольно странное решение.


DE>>А что должно быть?


vaa>null


:============================== definitely null
80% людей оценивают свое мастерство выше среднего...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.