Куча говна / Говнокод #27644 Ссылка на оригинал

0

  1. 1
IT Оффтоп #111

#81: https://govnokod.ru/27280 https://govnokod.xyz/_27280
#82: https://govnokod.ru/27284 https://govnokod.xyz/_27284
#83: https://govnokod.ru/27296 https://govnokod.xyz/_27296
#84: https://govnokod.ru/27336 https://govnokod.xyz/_27336
#85: https://govnokod.ru/27381 https://govnokod.xyz/_27381
#86: https://govnokod.ru/27405 https://govnokod.xyz/_27405
#87: https://govnokod.ru/27429 https://govnokod.xyz/_27429
#88: https://govnokod.ru/27432 https://govnokod.xyz/_27432
#89: https://govnokod.ru/27435 https://govnokod.xyz/_27435
#90: https://govnokod.ru/27439 https://govnokod.xyz/_27439
#91: https://govnokod.ru/27449 https://govnokod.xyz/_27449
#92: https://govnokod.ru/27460 https://govnokod.xyz/_27460
#93: https://govnokod.ru/27463 https://govnokod.xyz/_27463
#94: https://govnokod.ru/27466 https://govnokod.xyz/_27466
#95: https://govnokod.ru/27473 https://govnokod.xyz/_27473
#96: https://govnokod.ru/27478 https://govnokod.xyz/_27478
#97: https://govnokod.ru/27484 https://govnokod.xyz/_27484
#98: https://govnokod.ru/27495 https://govnokod.xyz/_27495
#99: https://govnokod.ru/27504 https://govnokod.xyz/_27504
#100: https://govnokod.ru/27508 https://govnokod.xyz/_27508
#101: https://govnokod.ru/27511 https://govnokod.xyz/_27511
#102: https://govnokod.ru/27518 https://govnokod.xyz/_27518
#103: https://govnokod.ru/27526 https://govnokod.xyz/_27526
#104: https://govnokod.ru/27534 https://govnokod.xyz/_27534
#105: https://govnokod.ru/27544 https://govnokod.xyz/_27544
#106: https://govnokod.ru/27552 https://govnokod.xyz/_27552
#107: https://govnokod.ru/27554 https://govnokod.xyz/_27554
#108: https://govnokod.ru/27557 https://govnokod.xyz/_27557
#109: https://govnokod.ru/27581 https://govnokod.xyz/_27581
#110: https://govnokod.ru/27610 https://govnokod.xyz/_27610

Запостил: nepeKamHblu_nemyx nepeKamHblu_nemyx, (Updated )

Комментарии (552) RSS

  • Добрый вечер.

    Этот оффтоп сгенерирован автоматически.

    Индекс оффтопов: https://index.gcode.space/.
    Зеркала Говнокода и полезные ресурсы:
    * https://govnokod.xyz/ (альтернативный Говнокод)
    * https://gcode.space/ (read-only зеркало Говнокода)
    * https://t.me/GovnokodBot (Говнокод-бот в «Telegram»)
    * https://t.me/GovnokodChannel (Тематический канал в «Telegram»)
    * https://vorec.space/ (глоссарий Говнокода)
    * https://app.element.io/#/room/#govnokod:matrix.org (резервный чат)

    Примечание: автоматические перекаты в настоящее время осуществляются только с аккаунта nepeKamHblu_nemyx.
    Остерегайтесь подделок. Берегите себя и своих близких. Кок!
    Ответить
  • предыдущий оффтоп перестал работать, поэтому
    https://govnokod.xyz/_27610/#comment-656560

    > а пользователям на это глубоко похуй: какая тебе разница, через что твой жёсткий диск скорраптит криптовымогатель — через дыру в «SMB» или через «Shellshock»?

    MS может отказаться чинить дыру в SMB в Windows XP, сославшись на неподдерживаемость старой винды. А если некий старый дистрибутив Linux, BSD или еще чего, у тебя есть возможности, чтобы что-то там починить, несмотря на.

    > В отличие от попен-сорсных поделок, за уязвимости в коммерческих приложениях компания расплачивается прибылью и репутацией

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

    > В «closed source» несколько другая культура: там для улучшения качества продукта принято не самому править код, а отправлять баг-репорты, краш-репорты и телеметрию.

    Багрепорты и крашрепорты (иногда и телеметрию) я и в опенсорс отправлял, если что.
    Ответить
    • Конечно не открывается. Хуйню какую-то обсуждаете с километровыми комментариями, заебался пролистывать.
      Ответить
  • https://govnokod.ru/27610#comment668260
    > Только в реальности от этой простоты нет ни малейшего толка: никто не занимается аудитом опен-сорсных проектов, за исключением редких исключений (в большинстве случаев — когда юзвери скинулись на профессионального аудитора).

    Неправда.

    Поиском уязвимостей занимаются многие крупные корпорации, которые используют данный опенсорсный софт.
    Ответить
  • Блин, вот я в теории могу selinux'ом тонко разрулить что к чему имеет доступ, но в итоге вся гуйня сольётся в едином экстазе на одном X-сервере.

    Придётся запускать каждому из них по кефиру чтобы они друг к другу не лезли в окна да буфер обмена? Но тогда получится ёбаная матрёшка или у окон от одного домена безопасности не будет работать буфер ;(

    Какой-то тлен и безысходность.
    Ответить
    • Для каждого приложения надо создавать своего пользователя.

      Это называется «Sandboxing», я узнал это из Gentoo-wiki.
      Ответить
      • > пользователя

        Это здесь вообще не при делах. Если ты от разных юзеров на одном Х-сервере наделаешь окошек, то они все будут лазить друг к другу.

        А остальные права (кроме иксов) можно и для одного юзера разрулить (или вообще в контейнер/виртуалку загнать).
        Ответить
    • В qubes это как-то порешали, можно посмотреть как.
      Ответить
      • virtualbox тоже как-то прокидывает окошки из внутренней оси во внешнюю. Но боюсь что и там и там завязано на конкретный гипервизор.
        Ответить
        • Поэтому я за отдельные ПК или ноуты. Один MacBook, один ноут на Windows, десять ноутов на Linux-ах.
          Ответить
    • выдай каждому по отдельному DISPLAY

      а вот как миксовать аутпут надо подумать, может придется иметь разные мониторы.

      А вообще какой session 0 isolation ))
      Ответить
      • В принципе, даже фаерфокс себя нормально в кефире чувствует. Правда ему пришлось оконного менеджера за компанию запускать, иначе менюшки под главное окно проваливаются.

        З.Ы. У хромиума даже без wm всё работает.
        Ответить
        • Я боюсь что это единственный способ.

          Каждому сокету для связи с X11 права отдельного юзера, или каждому в домашнюю папку свою .Xauthority и всё.


          Находил статью как петух сделал мультисит из одной машины.

          DISPLAY это совокупность скрина (монитор+видеокарта), клавы и мыши.
          У него несколько карт, и куча мышей и клав.

          Он собрал такие диспели (прописав их в xorg.conf), и получил реально разные рабочие места
          http://www.linuxtoys.org/multiseat/multiseat.html
          Ответить
          • Иксы вообще охуенный конструктор, и современные юниксоиды уже и забыли наверное, какие штуки можно было с ними делать

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

            Один из DM настроить на ответы на BroadcatQuery.

            Потом включаешь бездисковую станцию с иксами (по сути X терминал), он бродкастом находит DM, и рисует окошко входа и список серверов

            Пользователь выбирает сервер, и логинится туда.

            Получается как RDS ферма с брокером, для какого-нить класса вообще збс
            Ответить
          • > реально разные рабочие места

            – у них что-то не то с social distancing
            Ответить
            • Экономят место

              А у вас на работе у каждого личный кабинетчтоли?
              Ответить
                • Потому что я реально видел "веб студию" в начале нулевых где люди именно так и сидели
                  Ответить
                  • это пиздец и чот мне подсказывает, что такое не прокатит по санитарным нормам

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

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

                        кстати, вот по этому поводу начальника транспортного цеха было бы интересно послушать
                        Ответить
                        • Д++ вроде богатый, не?

                          Я просто вспомнил как в моей молодости во всяких "бизнес центрах класса F", переделанных из старых советских НИИ, сидели такие вот маленькеи веб студии из двух человек, и делали сайты прачечным, и хостили их на valuehost, и вот у них обычно с санитарными нормами был швах
                          Ответить
                            • панель управления говноуслугами.
                              Ответить
                          • д++ может и богатый, а вот про его фирму я не уверен

                            > делали сайты прачечным
                            > с санитарными нормами был швах

                            какая постирония )))
                            Ответить
  • Кстати, а получается display manager окошко логина рисует вообще напрямую? Иксов и вейленда в этот момент ещё нету. Или я туплю?
    Ответить
    • Иксы есть конечно. Он либо их запускает сам, либо цепляется к существующим, либо они к нему цепляются
      Ответить
      • Лол, gdm оказывается вообще временный вейланд поднимает на время логина. А lightdm да, временные иксы.
        Ответить
        • Я не разбираюсь в отношениях вялого с гномом.

          `xdm(1)` либо сам запусакет Xorg (local display) либо цепляется к удаленному (remote display) либо принимает запрос по протоколу XDMCP и рисует на нем окошко

          https://www.x.org/releases/X11R7.6/doc/man/man1/xdm.1.xhtml

          xdm offers display management two different ways. It can manage X servers running on the local machine and specified in Xservers, and it can manage remote X servers (typically X terminals) using XDMCP (the XDM Control Protocol) as specified in the Xaccess file.

          Он еще может направить тебя на другой xdm (XDMCP Indirect)

          http://www.chiark.greenend.org.uk/~peterb/uxsup/project/xdm-socket/

          >временные
          а зачем временные?

          systemd стартует dm
          dm запускает иксы и пускает в них сессию
          при выходе из сессии иксы завершаются, dm их перезапускает
          не?
          Ответить
          • Да, если не прыгает с иксов на вейланд или обратно, то действительно не временные (пид не поменялся).

            > сессию

            Я же правильно понимаю, что "сессия" -- это просто батник, который поднимает оконный менеджер, всякие панельки и прочее говно?
            Ответить
                • > Xorg (Русский) - ArchWiki - Arch Linux

                  Ясно.
                  Ответить
                      • А Лолечка типа не трап?

                        Пацан сидит с женским ником и женским аватаром, не?
                        Ответить
                        • Теперь понятно, почему Лолечка так ненавидит других трапов: конкуренция.
                          Ответить
                        • > женским ником

                          Дай определение женскому нику.

                          > и женским аватаром

                          Вот блин, совсем забыл, что настоящий мужик ставит на аватарку только другого настоящего мужика, и потом весь форум любуется на жопу/хуй этого самого настоящего мужика. Другие (менее мужские картинки, т.е. те, на которые не возбуждается guest6), как и любое проявление симпатии к слабым мужчинам без членов (женщинам) – это проявление слабости, а настоящий мужик должен не иметь слабостей. Всё правильно говорю, или я упустил какие-то нюансы?
                          Ответить
                          • Про аватарку принято. Лучше женская аватарка, чем хуй. Но аниме — говно, поэтому лучше другую женщину поставь.
                            Ответить
                            • > Но аниме — говно

                              Во первых — нет.

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

                              Сегодня в зерно забыли таблеток насыпать?
                              Ответить
                          • >потом весь форум любуется на жопу/хуй этого самого настоящего мужика.

                            именно по этому я за "rotoeb"
                            Ответить
                          • я вот не уверен, что это спина... может, чёлка длинная просто
                            Ответить
            • Я бы сказал, что это зависит от DM.

              ``xdm`` имеет ресурс DisplayManager*session

              −session session_program
              Specifies the value for the DisplayManager*session resource. This indicates the program to run as the session after the user has logged in.

              А что туда записать -- дело твое
              На дебиане там прописан
              https://manpages.debian.org/bullseye/x11-common/Xsession.5.en.html

              Можно прописать туда session manager (удобно выбирать окружение):
              https://www.x.org/releases/X11R7.6/doc/man/man1/xsm.1.xhtml

              Какие-то DM в каких-то DE могут вообще иметь свою собственную машинерию
              Ответить
        • > lightdm

          Лол. Единственный реально используемый вклад Canonical в open-source.
          Всё остальное (mir, unity, upstart) сдохло. Или я что-то забыл?
          Ответить
          • > Или я что-то забыл?

            apparmor?

            З.Ы. Его не они начинали пилить, но до космонавта он вроде никому особо не интересен был.
            Ответить
            • Ну снап -- спорная вещь, очень сильно конфликтует с классическим подходом к репе. Зато там свежатина, да.
              Ответить
              • а lightdm?

                Вообще чем это всё лучше xdma? Круглыми уголками?
                Ответить
  • Кстати, почему все так не любят «systemd»?
    Это же удобный, многофункциональный, консистентный и унифицированный инструмент, который позволяет эффективно решать распространённые проблемы.

    Понятно, конечно, что утёнок душит выкидывать тонны ущербных говноскриптов из «/etc/rc0.d», но взрослеть-то нужно.

    Разговоры про «философию Unix» и «Unix way» лучше оставить прыщавым подросткам: это им приличествует разводить срачи о том, чьи скрипты православные, а чьи — ересь. Взрослым людям ОС нужна для эффективного решения задач, а не для споров про философию и подход.
    Ответить
    • Тебе приятно, что «PID 1» занят какой-то питушнёй на 500к+ строк хуёво-лапшичного говнокода, который должным образом никто не проверяет, и который при этом занимается ещё кучей всякой пижни?

      Лично мне – нет, именно поэтому я за «OpenRC».
      Ответить
      • А какая мне разница, чем там занят какой-то «PID 1», если он выполняет то, что мне нужно от системы, и делает это хорошо?
        Ну а утверждение о том, что его код никто не проверяет вообще смешно: это относится вообще практически к любому опен-сорсному ПО.
        Ответить
        • > А какая мне разница, чем там занят какой-то «PID 1»

          Если никакой, то поставь Винду, ведь...

          > он выполняет то, что мне нужно от системы

          И не выёбывайся.

          > и делает это хорошо

          Не хорошо, а хуёво и неэффективно.

          > это относится вообще практически к любому опен-сорсному ПО

          В портянке говнокода на 500 строчек кода найти уязвимость заметно проще, чем в портянке говнокода на 500000 строк кода.

          А теперь хрюкни и обнови шиндошс, или что ты там делаешь обычно.
          Ответить
            • Нет, это «ISO», мой злейший враг, враг всего ПРЫЩЕМИРА, критик пресвятого линакса.
              Ответить
              • > критик пресвятого линакса
                Ну почему же? Я за «GNU/Linux», когда он эффективно решает мои задачи.

                Критикую я иррациональную религиозную ненависть к хорошим, в общем-то, инструментам.
                Ответить
                • > Я за «GNU/Linux», когда он эффективно решает мои задачи.

                  Т.е. когда в нём отсутствуют поделия сумрачного гения Поттеринга? А какой у тебя DE стоит? GNOME? Если не гном, то причины, по которым люди не ставят системзду, тебе знакомы. А если всё-таки гном, то это многое объясняет.
                  Ответить
                  • > А какой у тебя DE стоит? GNOME?
                    Зачем мне DE на серверах? Управлять сервером мне гораздо быстрее и удобнее через консоль. Прописать «systemctl start service_foo» эффективнее, чем рыться в менюшках.
                    Ответить
                • > Критикую я иррациональную религиозную ненависть к хорошим, в общем-то, инструментам.

                  Правильно ли я понимаю, что ты считаешь хорошим инструментом "Microsoft Visual Studio"? Моя ненависть к этому инструменту несет не религиозный характер, и не связана с тем, что это продукт от "Microsoft". Я ненавижу поделки от "JetBrains" примерно так же сильно, и примерно по тем же причинам.
                  Ответить
                  • >Правильно ли я понимаю, что ты считаешь хорошим инструментом "Microsoft Visual Studio"?

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

                    Для разработки на C# или VC++ под винду Visual Studio вполне хорош, а для LISP вероятно нет. А для программирование на "си" под микроконтроллеры -- совсем нет.

                    Точно также Intellij Idea отличный IDE именно для Kotlin, а вот нужно ли писать на Ruby в RubyMine -- вопрос открытый и весьма спорный

                    > несет не религиозный характер
                    ой, ну ладно)) Кажется что бы MS ни сделал, обитатели ЛОРа это обосрут
                    Ответить
                    • > ой, ну ладно)) Кажется что бы MS ни сделал, обитатели ЛОРа это обосрут

                      Ну вот Microsoft Research пилит Haskell и на ЛОРе его что-то не особо обсирают, скорее хвалят.
                      Ответить
                    • > Для разработки на C# или VC++ под винду Visual Studio вполне хорош, а для LISP вероятно нет

                      А рационально ли делать такую IDE, чтобы ей хорошо было разрабатывать только под винду? Т.е. вот надо отдельную IDE под винду, отдельную IDE под FreeBSD, отдельную под NetBSD, отдельную под QNX, отдельную под Haiku, и намертво их прибивать к соотв. операционке, это норм, да?

                      И мои претензии касаются не только заточенности под винду, но еще и общей тяжеловесности и тормознутости этой студии.
                      Ответить
                      • > рационально
                        – какова целесообразность постройки моста через реку с точки зрения щуки? ©
                        Ответить
                        • > – какова целесообразность постройки моста через реку с точки зрения щуки? ©

                          Доебка не ясна. Перефразируйте
                          Ответить
                          • нахожу странным саму постановку вопроса про рациональность

                            мс уже минимум четверть века делает ide под винду и пока полёт нормальный

                            правда, я вот пользуюсь ide от ms под мак время от времени и тоже пока не умер
                            Ответить
                            • > нахожу странным саму постановку вопроса про рациональность

                              Находи. Я лично не нахожу.

                              > мс уже минимум четверть века делает ide под винду и пока полёт нормальный

                              Люди более чем две тыщи лет верят во всякие "религии" и поклоняются всяким "богам" и пока полет нормальный.
                              Ответить
                              • ты не понимаешь наверное

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

                                а чувак, у которого в контроллерах ничего нет, вдруг задаётся вопросом "а рационально ли это?"

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

                                  То же самое касается религий. Религиозные деятели рубят бабло на верующих. Означает ли, что религии сами по себе рациональны?
                                  Ответить
                                  • для своих создателей и верхушки конечно

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

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

                                      > а мнение мимокрокодила их как бы и не чешет

                                      Может конкретно их и нет
                                      Ответить
                                        • > бессмысленный вопрос какой-то

                                          Это т.н. "закрытый вопрос", на который можно ответить "Да" или "Нет". У тебя есть ответ?
                                          Ответить
                                      • ты лучше скажи, в чём рациональность портирования студии на лялих
                                        Ответить
                                        • Ты лучше для начала ответь на поставленный вопрос.
                                          Ответить
                                          • я на бессмысленные вопросы не отвечаю, сорян

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

                                              Я не считаю этот вопрос бессмысленным.
                                              Ответить
                                      • Дай, пожалуйста, определение «рациональности», а так же уточни, для кого факт работы «Visual Studio» в винде должен быть рациональным или нерациональным.
                                        Ответить
                                        • Небольшое дополнение для иллюстрации того, что я имею в виду: тратить N денег на удобную клавиатуру для меня рационально, потому что это мой рабочий инструмент. С другой стороны, тратить столько же денег на клавиатуру для нищего (без негативных коннотаций) человека, работающего грузчиком — совершенно нерационально.

                                          Именно поэтому для ответа на вопрос о рациональности в первую очередь следует указать субъекта, с точки зрения которого мы рассматриваем факты.
                                          Ответить
                                        • > Дай, пожалуйста, определение «рациональности»

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

                                          > а так же уточни, для кого факт работы «Visual Studio» в винде должен быть рациональным или нерациональным.

                                          Для того, кто захочет ее использовать не в винде. Привязка «Visual Studio» к винде может быть нерациональна и для самой «Microsoft», например чтобы продавать ее под какие-нибудь маки. Вполне может так оказаться, что через 10-20 лет никаких IBM-совместимых персональных компьютеров с процессорами x86-64 не будет, а будет какая-нибудь хрень на ARM и RISC-V с какими-то не-майкрософтовскими операционками (IOS, Android или еще какая-то хрень, про которую мы пока не знаем), и там вполне может быть полезна эта IDE.
                                          Ответить
                                          • Q:для кого факт работы «Visual Studio» в винде должен быть рациональным или нерациональным?

                                            A: Для того, кто захочет ее использовать не в винде.

                                            Dixi.



                                            > Привязка «Visual Studio» к винде может быть нерациональна и для самой «Microsoft»

                                            Иногда выгоднее продавать свою ОС с бесплатной IDE, чем делать кросс-платформенную IDE.

                                            MS давно уже дает бесплатную версию Студии (так было не всегда)

                                            XCode за пределами Mac OS тоже не очень распостранен.

                                            Яблоко свою ОС не продает (так было не всегда) но требует железа.

                                            Хочешь писать под ios? Купи мак.
                                            Ответить
                                            • я вообще не понимаю, почему в данном случае переносимым должен вдруг быть софт, а не форматы

                                              а форматы вижуалки давным давно умели открывать ещё несколько ide
                                              Ответить
                                              • Там в форматах небось есть проприетарное говно. Если там какие-нить подключения к MS-SQL, какие-нить ActiveX говны вытянуты, какие-нить WPFные гуи, то может и не открыться


                                                Безопаснее хранить cmake проект, и из него уже генерить cproj и sln кмк
                                                Ответить
                                                • > может и не открыться
                                                  – я сильно глубоко не копал, но солюшен вроде открывается всегда, может не открываться конкретный проект, он просто будет неактивным на конкретной платформе

                                                  > cmake
                                                  – та ну, для шарпа имхо излишний пердолинг
                                                  Ответить
                                                  • Навреное ты прав про проект, да: sln же просто список проектов, плюс выборка активного и конфигурации

                                                    Интересно перенести шарп проект со студии в Rider например. Откроет ли?
                                                    Ответить
                                                    • должен

                                                      я как-то давно делал одну маленькую фигню в вижуалке

                                                      а лет через 5 этот солюшн открыл в VS for Mac

                                                      скачало нужные проекты с нагета, собралось, запустилось

                                                      конечно, уверен, что есть какие-то специфические ситуации, но в целом производится такое впечатление, что это работает
                                                      Ответить
                                            • > Иногда выгоднее продавать свою ОС с бесплатной IDE, чем делать кросс-платформенную IDE.

                                              А иногда и не выгоднее. А может это выгодно в краткосрочной перспективе, но не выгодно в долгосрочной. Зачем-то ж MS сделали эту свою "Visual Studio Code".

                                              > MS давно уже дает бесплатную версию Студии (так было не всегда)

                                              Ха. Это мне напомнило одну статью Джоэла Сполски за 2004 год
                                              https://web.archive.org/web/20180922120900/http://russian.joelonsoftware.com/Articles/HowMicrosoftLosttheWaronA.html


                                              > Логическое заключение состоит в том, что если вы пытаетесь продавать операционную систему, то вам необходимо сделать так, чтобы разработчики программного обеспечения захотели писать программы для вашей операционной системы. Поэтому Стив Баллмер прыгал по сцене и кричал: «Разработчики, разработчики, разработчики, разработчики». Это так важно для Microsoft, что единственная причина, из-за которой средства разработки программного обеспечения не раздаются бесплатно, заключается в том, что они не хотят случайно перерезать кислород разработчикам конкурирующих инструментов разработки (хорошо, тем, которые остались), так как разнообразие инструментов разработки, доступных для их платформы, делает ее куда более привлекательной для разработчиков. Но на самом деле они хотят раздавать. Благодаря их программе Empower ISV вы можете получить пять наборов MSDN Universal (иначе известных как «практически все продукты Microsoft, исключая Flight Simulator») всего за 375$. Компиляторы командной строки для языков .NET включены с бесплатными библиотеками .NET … тоже бесплатно. Компилятор С++ теперь бесплатен. Что угодно для поощрения разработчиков работать под .NET и ликвидации таких компаний как Borland.
                                              Ответить
                                              • > А может это выгодно в краткосрочной перспективе, но не выгодно в долгосрочной.

                                                Может быть да, может быть нет.

                                                >Зачем-то ж MS сделали эту свою "Visual Studio Code".
                                                Существует мнение, что для продвижения Azure.

                                                MS вкладывает бабло в облако (может быть думает, что продажа ОС и всяких Exchange уже не будет приносить сказочной прибыли через 10-15 лет) и старается сделать инструмент плотно с ним интегрированный, чтобы каждый PHPшник мог на своей Убунте в VSCode написать сайт, и загрузить его им на Azure.
                                                Ответить
                                                • > MS вкладывает бабло в облако (может быть думает, что продажа ОС и всяких Exchange уже не будет приносить сказочной прибыли через 10-15 лет)
                                                  > старается сделать инструмент плотно с ним интегрированный, чтобы каждый PHPшник мог на своей Убунте в VSCode написать сайт, и загрузить его им на Azure.

                                                  Ди-вер-сифи-ка-ция.

                                                  И правильно делают.

                                                  Большая контора с кучей денег никогда не положит все яйца в одну корзину, и 8 из 10 проектов могут оказаться и окажутся тупиковыми, малоприбыльными. Но зато 1-2 выстреливших позволят отбить затраты и продолжать держаться на плаву.
                                                  Ответить
                                          • «Замечательное» определение. Рационально — это когда разумно и противоположно иррационально. А иррационально — это когда рационально.

                                            > поэтому принято говорить о различных типах рациональности.
                                            Ещё лучше.
                                            Ну ладно.

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

                                            > может быть нерациональна и для самой «Microsoft»
                                            С точки зрения «Microsoft» у разработки «Visual Studio» имеется единственная задача: получение прибыли (прямой или косвенной). Над решением этой задачи в «Microsoft» работают опытные специалисты, и нет никаких оснований полагать, что они разбираются в подсчёте прибыли лучше, чем питухи с «Говнокода». Если бы портирование «Visual Studio» под другие системы было экономически выгодно (то есть потенциальная прибыль от этого действия превышала бы потенциальные затраты) — мы бы сейчас могли сделать «apt-get install visual-studio».
                                            Таким образом, создание и поддержка «Visual Studio» компанией «Microsoft» соответствует целям и задачам компании, и, следовательно, является рациональным.
                                            Ответить
                                            • > «Замечательное» определение. Рационально — это когда разумно и противоположно иррационально. А иррационально — это когда рационально.

                                              Можешь еще спросить "что такое разумно", и "что такое иррационально". Если очень долго спрашивать определения слов в определениях слов, в конечном итоге получится зацикливание т.к. множество корректных (допустимых) слов счетно и конечно.

                                              > Да, для него это однозначно иррационально, потому что это попытка решения проблем неподходящим для этого инструментом.

                                              Неподходящим т.к. его сделали неподходящим.

                                              > Над решением этой задачи в «Microsoft» работают опытные специалисты, и нет никаких оснований полагать, что они разбираются в подсчёте прибыли лучше, чем питухи с «Говнокода».

                                              Очень интересно. Почему тогда Windows Phone провалилась? Мне очень давно (почти сразу) было очевидно, что это провальная инициатива, но MS упорно вливала туда бабло, не получая никакой прибыли, и они даже купили под это дело Nokia и все там прогондонили
                                              Ответить
                                              • > Почему тогда Windows Phone провалилась?

                                                – потому что Сатья ажурщик лол?

                                                нет, я знаю, что wp в принципе стоила балмеру поста, но подковёрные игры никто не отменял
                                                Ответить
                                                • > – потому что Сатья ажурщик лол?

                                                  Тогда был Баллмер. Он еще в запотевщей рубашке прыгал и выкрикивал developers, developers, developers
                                                  Ответить
                                                  • developers, developers, developers было лет на 15 раньше

                                                    wp + nokia вполне могла на каких-то рынках потягаться с ведром

                                                    почему её слили, это вопрос хороший. а её именно слили.
                                                    Ответить
                                              • > Если очень долго спрашивать определения слов в определениях слов, в конечном итоге получится зацикливание т.к. множество корректных (допустимых) слов счетно и конечно.
                                                А если не спрашивать — в конце концов придём к тому, что каждый будет говорить о своём.
                                                Так что вот моё определение для конкретного случая: создание продукта является рациональным тогда и только тогда, как созданный продукт выполняет задачи, которые предполагается решать при помощи этого продукта. В самом простом случае такой задачей может быть получение прямой прибыли: тогда создание продукта рационально (для создателя!) тогда, когда эту прибыль продукт приносит.

                                                > Неподходящим т.к. его сделали неподходящим.
                                                Неверно. Его не сделали неподходящим, его попросту не портировали. Это совершенно разные вещи.
                                                Разработка кросс-платформенного приложения (особенно на всяких сишках с крестами) стоит гораздо дороже, чем разработка приложения для конкретной платформы. Чтобы «Visual Studio» запускалась на линуксах — её авторы должны были потратить очень много дополнительного времени (и, следовательно, денег) на поддержку зоопарка этих самых линухов, зоопарка DE, X-сервера, вялого (в будущем) и прочего прыщеговна.
                                                Поэтому нет, никто специально не рушил (со злодейским хохотом) совместимость «Visual Studio» с линуксами. Её просто не делали.

                                                > Почему тогда Windows Phone провалилась?
                                                Потому что все совершают ошибки.

                                                > Мне очень давно (почти сразу) было очевидно
                                                Задним умом все крепки. Это эффект позитивного подкрепления: человеческому мозгу приятно чувствовать себя умным, поэтому моменты «я же говорил!» запоминаются гораздо лучше, чем несбывшиеся прогнозы.
                                                Ответить
                                                • > Неверно. Его не сделали неподходящим, его попросту не портировали.

                                                  > Поэтому нет, никто специально не рушил (со злодейским хохотом) совместимость «Visual Studio» с линуксами. Её просто не делали.

                                                  Правильнее тогда говорить "его не делали портируемым" а не "не портировали".

                                                  > Разработка кросс-платформенного приложения (особенно на всяких сишках с крестами) стоит гораздо дороже, чем разработка приложения для конкретной платформы.

                                                  It depends. И сейчас с кросс-платформой на сишке/крестах стало на порядок проще.

                                                  > на поддержку зоопарка этих самых линухов, зоопарка DE, X-сервера, вялого (в будущем) и прочего прыщеговна.

                                                  Можно было взять Qt, проблему с гуйней бы это решило.

                                                  > Задним умом все крепки. Это эффект позитивного подкрепления: человеческому мозгу приятно чувствовать себя умным

                                                  Я очень четко помню, как это было. Сначала я действительно полагал, что у MS есть какие-то шансы продвинуть свою принципиально новую ОС на мобильный рынок. Через некоторое время это выглядело со стороны как явно бессмысленное сжигание бабла, и было достаточно очевидно(и не только мне), что пора бы уже остановиться, но желание MS втулить свою ОС на мобильный рынок было слишком сильно...
                                                  Ответить
                                                  • > Правильнее тогда говорить "его не делали портируемым" а не "не портировали".
                                                    Хорошо.

                                                    > It depends. И сейчас с кросс-платформой на сишке/крестах стало на порядок проще.
                                                    Если под «проще» ты имеешь в виду «Qt» — то, наверное, да.

                                                    > Можно было взять Qt, проблему с гуйней бы это решило.
                                                    Напоминаю, что первый выпуск «Visual Studio» произошёл в 1997-м году.

                                                    Взять вышедшую два года назад и никому не известную либу для разработки IDE, изначально планировавшейся как основной инструмент для разработки под «Windows»? Увольте. Даже сейчас, спустя полтора десятка лет после выпуска, «Qt» — всё ещё кривое и тормозящее говно; каким же он был сразу после релиза?

                                                    > Я очень четко помню, как это было. Сначала я действительно полагал, что у MS есть какие-то шансы продвинуть свою принципиально новую ОС на мобильный рынок.
                                                    О чём и речь.

                                                    > Через некоторое время это выглядело со стороны
                                                    Ключевой момент — «со стороны». Мы не знаем и не можем знать, какие процессы происходили в это время внутри «Майкрософта», и чем эти затраты были оправданы. Можно, конечно, порассуждать о тупых менеджерах, но смысла в этом никакого нет.
                                                    Ответить
                                                    • > Даже сейчас, спустя полтора десятка лет после выпуска, «Qt» — всё ещё кривое и тормозящее говно; каким же он был сразу после релиза?

                                                      А винапи-гуйня является образцом скорости и прямоты?
                                                      Ответить
                                                      • Если за «Винапи-гуйню» брать «Visual Studio» — то да, UX у неё на порядок лучше, чем у QT-говна.
                                                        Ответить
                                                        • > Если за «Винапи-гуйню» брать «Visual Studio» — то да, UX у неё на порядок лучше, чем у QT-говна.

                                                          Я вообще-то про всякую MFC-питушню, OLE, COM, ActiveX и проч. сопутствующие говна. В архитектурном, так сказать, плане

                                                          Когда я для интереса попробовал в этом разобраться, было ощущение что я окунулся в чан с дерьмом
                                                          Ответить
                                                          • Четверть века назад можно было через OLE вставить документ excel себе в приложение

                                                            В Linux в это время у половины людей вообще гуй не работал, потому что xfree modlines не могли прописать
                                                            Ответить
                                                            • > Четверть века назад можно было через OLE вставить документ excel себе в приложение

                                                              Которое будет работать только с такой-то версией excel, который еще купить надо. Охуенно, да.
                                                              Ответить
                                                • > Чтобы «Visual Studio» запускалась на линуксах — её авторы должны были потратить очень много дополнительного времени (и, следовательно, денег)

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

                                                  > на поддержку зоопарка этих самых линухов, зоопарка DE, X-сервера, вялого (в будущем) и прочего прыщеговна

                                                  И ещё пердолиться с этим сраным неоднородным говном.

                                                  M$ нужна система разработки софта под свою ОСь.
                                                  Потому что нужен софт, голая операционная система никому особо не интересна.
                                                  Ответить
                                                  • > M$ нужна система разработки софта под свою ОСь.
                                                    Это правда, да.

                                                    > Извините. А нахуя портировать для конкурирующей платформы удобное средство разработки?
                                                    Справедливости ради это можно оправдать стратегиями вида EEE. Ну или просто банальным переманиванием: мол, приходите, девелоперсы, к нам на венду, у нас вон какая классная IDE есть!
                                                    Но, конечно, в давние времена первых выпусков «Студии» «Майки» были гораздо более агрессивны в плане конкуренции («своей земли не отдадим ни пяди» vs «культурная ассимиляция»).

                                                    А сейчас вон даже «VS Code» есть — вроде как рекламный флаер «Visual Studio».
                                                    Ответить
                                                    • > Справедливости ради это можно оправдать стратегиями вида EEE
                                                      Хахаха.

                                                      Так это нерентабельно.

                                                      90% линуксоидов даже бесплатно не поставят это говно, ибо для них само слово Майкрософт это как красная тряпка для быка, или как «Cатана» для православного человека.

                                                      > мол, приходите, девелоперсы, к нам на венду, у нас вон какая классная IDE есть

                                                      Так уже сделали WSL: «Приходите, к нам на венду».

                                                      Кмк, это гораздо более логичная стратегия: расширять возможности своего продукта, а пилить IDE для чужого. Причём поддержать весь зоопарк кобенаций разных DE и X11/Wayland/Mir/etc нетривиальная задача даже для M$.

                                                      С другой стороны, чем чёрт не шутит. Браузер же портанули.
                                                      Ответить
                                                      • > а пилить IDE для чужого
                                                        – а НЕ пилить имелось в виду?

                                                        > Браузер же портанули.
                                                        – какой браузер?
                                                        Ответить
                                                          • я до сих пор не понимаю, почему они закопали оригинальный edge
                                                            Ответить
                                                            • Сейчас происходит много странных вещей. То появляется новый «Edge», который по сути является «Хромиумом» с подменённой иконкой, то в «Visual Studio» зачем-то включат «clang», то «WSL» появится.

                                                              Такое ощущение, что «MS» хочет плавно отойти от разработки и в будущем только чужой софт упаковывать.
                                                              Ответить
                                                              • бляди

                                                                последняя более-менее девелоперская контора
                                                                Ответить
                                                              • > Такое ощущение, что «MS» хочет плавно отойти от разработки и в будущем только чужой софт упаковывать.

                                                                Батюшка esr выдвинул интересную гейпотезу. Кстати его блог хоть кто-то тут читает?

                                                                Её суть в том что Mелко$офту просто нерентабельно держать армию кодеров и саппортить это всё говно (браузеры, операционку). Причём винду нужно ещё портировать на арм.

                                                                Потому они со временем планируют перейти на linux-kernel, оставив легковесную обёртку вроде wine которая проксирует winapi system call в ядро луникса.

                                                                У них же сейчас большая часть профитов идёт от Azure. А так можно перекинуть головняк по поддержке зоопарка x86 и arm на коммьюнити.

                                                                Короче «Microsoft loves Linux»
                                                                Ответить
                                                            • > я до сих пор не понимаю, почему они закопали оригинальный edge

                                                              Потому что его использовали в основном только чтобы скачать другой браузер.
                                                              Ответить
                                                    • > стратегиями вида EEE

                                                      И с каких это пор ISO уверовал в бредни сектантов жопен-сороса?
                                                      Ответить
                                                      • Стратегия EEE это не бредни каких-то сектантов

                                                        > "Embrace, extend, and extinguish" (EEE),[1] also known as "embrace, extend, and exterminate",[2] is a phrase that the U.S. Department of Justice found[3] that was used internally by Microsoft[4] to describe its strategy for entering product categories involving widely used standards, extending those standards with proprietary capabilities, and then using those differences in order to strongly disadvantage its competitors.
                                                        Ответить
                      • Как правило чем система абстрактнее, чем шире круг решаемых ей задач, тем хуже она решает конкретную задачу.

                        ``vim`` прекрасный редактор для всего, но на C# удобнее писать в студии с R#.

                        Именно заточка VS под нужны Windows разработчика (поддержка ресурсов, например) позволила сделать её более удобной.

                        > тяжеловесности и тормознутости

                        Это плата за функционал и тяжелое наследие, к сожалению.

                        Notepad++ не тормозит, но и переименовать namespace в С++ в нем сложнее
                        Ответить
                  • > Правильно ли я понимаю, что ты считаешь хорошим инструментом "Microsoft Visual Studio"?
                    Совершенно верно, я считаю «Microsoft Visual Studio» прекрасным инструментом для своей задачи.
                    Собственно говоря, в мире больше не существует настолько же продвинутых IDE для «C++». Как самый банальный пример — «IntelliSense» умеет вычислять значение constexpr-переменных до компиляции, что весьма помогает при разработке метушни. Насколько я знаю, никакие другие средства разработки так не умеют.
                    Ответить
                      • Наведи, пожалуйста, курсор на переменную «c» и посмотри, чему она равна.
                        Ответить
                        • Прилетела птичка Обломинго
                          https://youtrack.jetbrains.com/issue/CPP-5064

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

                          Ну ок, факт отсоса силайна у студии зафиксирован ))

                          Странно, что они этого не сделали.
                          Ответить
                          • Могу предположить, что тот ворнинг у них рисует какая-то внутренняя закрытая подсистема типа встроенной «VDS-Studio», которой на вход подаются исходники и настройки, а на выходе из неё можно получить только ворнинги, но не сложную контекстную информацию. Соответственно, привязать её к сервису подсказок (как, кстати, он у жидов называется?) выходит слишком сложно/дорого/нерационально.
                            Ответить
                            • Нет, для «C++» не умеет. Для «C#» умеет, для «Basic» умеет, а кресты соснули.
                              Ответить
                            • я не понял, джейсон мне уже и в C++ насрал?
                              Ответить
                            • > "Вижуалстудия" так умеет?

                              Оно нахуй не надо. Я бы отключил эту херню и не писал такое говно.

                              Когда в структуре 1 поле и так всё понятно.

                              А когда 3 и больше, лучше писать имена явно, чтобы:
                              а) самому не путаться где какое поле
                              б) при рефакторинге не перепутать порядок
                              в) при просмотре кода обычным редактором (дифф в гите, ревью коммита в html) другим было понятно что происходит.
                              Ответить
                              • Именно по этому я за "vim" + "ectags".
                                Только таким макаром можно писать читаемый код.

                                А код, написанный в IDE, только в IDE под интерактивным дебагером и читаем
                                Ответить
                                • Причём на скрине какое-то уебанское, блевотное форматирование скобок.

                                  И самое смешное, если жавашки в интелижопе проебут, то хинты будут неправильные:
                                  > только тут баг в этих хинтах, если что
                                  Ответить
                                • Поддерживаю! Не скажу, что конкретно "vim" всем подойдёт, но редактор всегда лучше, чем анскильная IDE.

                                  В IDE пишут нечитаемое говно, код-пустышку, код-бюрократ, код-гной, код-пидор.

                                  Ещё мудачьё говорит "просто купи компьютер помощнее" и хвастается своими печками с 32ГБ памяти, последними процессорами №9 и блоками питания на киловатты, и всё равно время от времени жалуется, что новая вкладка в IDE долго открывается.
                                  Ответить
                                  • > В IDE пишут нечитаемое говно, код-пустышку, код-бюрократ, код-гной, код-пидор.

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

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

                                    Я бы на месте заказчиков такой код в сортирах топил бы спецом, и в навозные ямы, где-нибудь там возле ферм, скотобоен всяких, где говнища побольше, вот очистные крупных городов ещё тоже очень хорошее место.
                                    Ответить
                              • Эта штука пришла из «Java», где она используется для подсветки параметров вызовов функций: там нет именованных параметров (гуру поясняют, что если у вас так много параметров в функции, что можно и напутать, то лучше переписать всё на «builder» и течь с «foo().withBar(10).withBaz("hello")....» ). Но поскольку писать билдеры абстрактных фабрик на каждый чих интересно не всем — появилась такая вот эмуляция именованных параметров через подсказки IDE.
                                Ответить
                                • > что если у вас так много параметров в функции, что можно и напутать,
                                  > то лучше переписать всё на «builder» и течь с «foo().withBar(10).withBaz("hello")....»

                                  Подтверждаю. (я не гуру)

                                  > Но поскольку писать билдеры абстрактных фабрик на каждый чих
                                  @lombok.Builder
                                  public class SomeYagaShit {
                                     int bar;
                                     String baz;
                                  }
                                  
                                  //call
                                  foo ( 
                                       SomeYagaShit.builder().withBar(10).withBaz("hello").build()
                                  );

                                  Именно поэтому я за «Сишку»

                                  foo( (Pair){.bar=10, .baz = "hello"} );
                                  Ответить
                                • Можно объявлять функции с единственным параметром, в который передавать структуру.
                                  Ответить
                                  • > структуру

                                    Именованных инициализаторов в джаве тоже нету... Разве что создавать структуру и методично присваивать в неё по одному полю.

                                    З.Ы. В итоге что-нибудь забудешь заполнить.
                                    Ответить
                                    • > Именованных инициализаторов в джаве тоже нету...

                                      Есть хак через омонимные классы.
                                      Но это под капотом замыкание, которое хватает контекст (привет утечки!).

                                      Потому это наименьшее из говн:
                                      https://www.projectlombok.org/features/Builder
                                      Ответить
                                      • Котя, котенька, коток,
                                        Котя, серенький лобок,
                                        Приди, котя, ночевать,
                                        Нашу деточку качать.

                                        Уж тебе я, коту,
                                        За работу заплачу:
                                        Дам кусок пирога
                                        И кувшинчик молока.
                                        Ответить
                    • > «IntelliSense» умеет вычислять значение constexpr-переменных до компиляции, что весьма помогает при разработке метушни.

                      Учитывая что значение constexpr-переменной вычисляется Тьюринг-полной питушней, подсказка для такой фигни может идти сколь угодно долго.
                      Ответить
                      • А если малость задуматься, окажется что в самой IDE для поддержки такой хрени нужно встраивать огрызки компилятора, и тут уж возникает вопрос "как быстро и каким образом это работает?"

                        Допустим есть некая constexpr-метушня, которая раскрывается при компиляции минуту, допустим навел я мышкой на переменную, оно будет минуту мне в IDE считать? А потом оно будет мемоизировано, т.е. второй раз если навести, оно сразу ответ выдаст? А если я поменяю один символ в компилтайм-метушне, оно будет пересчитывать констэкспры в момент редактирования компилтайм-метушни, или в момент наведения на констэкспр для получения соотв. подсказки?
                        Ответить
                      • В «gcc» эта проблема решена при помощи -fconstexpr-depth, -fconstexpr-loop-limit и -fconstexpr-ops-limit. С учётом того, что никаких проблем с подсказками к constexpr-переменных у меня не было — в «Visual Studio» она тоже решена.
                        Ответить
                        • > В «gcc» эта проблема решена при помощи -fconstexpr-depth, -fconstexpr-loop-limit и -fconstexpr-ops-limit.

                          Тогда у тебя будет не всегда подсвечиваться подсказка к этим констэкспрам. А если не будет ограничения, подсказки могут зависнуть. Обычная ситуация с двумя стулами.

                          Можно еще навернуть какую-то сложную хуйню с мемоизацией результатов этих констэкспров и хранить некий кэш подсказок, лол
                          Ответить
                          • > с двумя стулами
                            «Нельзя сделать идеально для всех случаев — не будем делать вовсе».

                            Казалось бы, буквально пару дней назад guest6 разъёбывал программистов за такой ущербный подход — и вот, пожалуйста, опять.

                            Другие люди спокойно пользуются удобной фичей — программисты-перфекционисты грустно пускают слезу о невозможности её создания.

                            Да, кстати, если ограничения в сервисе подсказок соответствуют ограничениям в компиляторе, то подсказки будут работать для любых компилирующихся программ. Чем не победа перфекционизма?
                            Ответить
                            • > «Нельзя сделать идеально для всех случаев — не будем делать вовсе».

                              > Казалось бы, буквально пару дней назад guest6 разъёбывал программистов за такой ущербный подход — и вот, пожалуйста, опять.

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

                              > Да, кстати, если ограничения в сервисе подсказок соответствуют ограничениям в компиляторе, то подсказки будут работать для любых компилирующихся программ. Чем не победа перфекционизма?

                              А где гарантии такого соответствия? Сам стандарт описывает эти ограничения? Кстати, что насчет вычислений с плавучими питухами, гарантируется ли воспроизводимость результатов? https://govnokod.ru/27285 - реальный пример зависимости рантайм FPU-вычислений от флагов оптимизации. Как с этим в компилтайме?
                              Ответить
                              • > Кстати, что насчет вычислений с плавучими питухами, гарантируется ли воспроизводимость результатов?

                                Разве не выжжено в головах программистов, что плавающий питух может клюнуть в любой момент, и всё кроме тривиальщины вида 1./4. или 2.+3. будет вычислено с примененением больной вычислительной фантазии, и любые конкретные результаты - мираж?
                                Ответить
                                • Т.е. для плавучепитуховых констэкспров те подсказки вообще не работает, или там может подсказываться хуйня?
                                  Ответить
                                  • Я не знаю. У меня нет этих ваших "IDE" с тормозами.
                                    Просто предполагаю, что программист должен скептически относиться к плавтухам, и тогда никаких проблем нет. Программист знает, что плавтухи - мудаки, и это знание - его оружие.
                                    Ответить
                              • > В моем сообщении нигде нет утверждения "если задача не решается для всех случаев, ее не стоит решать вообще".
                                А как же твои саркастические кавычки вокруг слова «решена»?

                                > А где гарантии такого соответствия?
                                Мне на них похуй.

                                > Сам стандарт описывает эти ограничения?
                                Конечно: https://eel.is/c++draft/implimits#2.39.

                                > Кстати, что насчет вычислений с плавучими питухами, гарантируется ли воспроизводимость результатов?
                                Мне похуй.
                                Ответить
                                • > А как же твои саркастические кавычки вокруг слова «решена»?

                                  И что тебе не нравится в моих саркастических кавычках?

                                  > Мне похуй.

                                  Т.е. тебе похуй, что IDE может подсказывать хуйню? Ну ок.
                                  Ответить
                                  • > И что тебе не нравится в моих саркастических кавычках?
                                    Их саркастичность.

                                    > Т.е. тебе похуй, что IDE может подсказывать хуйню? Ну ок.
                                    А почему мне должно быть не похуй на унылые корнер-кейсы, с которыми в реальности я никогда не столкнусь? Ты можешь придумать хоть сотню питушни, которой в микроконтроллерах нет, — от этого подсказки с вычислением константных выражений менее удобным и полезным инструментом не станут.
                                    Ответить
                        • > в «Visual Studio» она тоже решена.

                          Эта проблема не может быть решена, она может быть только "решена".
                          Ответить
                    • > Собственно говоря, в мире больше не существует настолько же продвинутых IDE для «C++». Как самый банальный пример — «IntelliSense» умеет вычислять значение constexpr-переменных до компиляции, что весьма помогает при разработке метушни. Насколько я знаю, никакие другие средства разработки так не умеют.

                      Clangd умеет. Его можно использовать и в VSCodium например. Реальный пример https://i.imgur.com/8KEPLX8.png (это я взял свою компилтайм-сортировку пузырьком https://govnokod.ru/25130#comment458282 и решил реально проверить)

                      Используемый плагин "llvm-vs-code-extensions.vscode-clangd". Но этот "clangd" можно и к GNU Emacs присобачить наверняка.
                      Ответить
                      • И в целом я за то, чтобы подобные фичи были не намертво прибиты к какой-то работающей только в одной ОС тормозной проприетарной IDE, а были отделяемыми модулями, которые можно было бы цеплять к любой хуите при желании.
                        Ответить
                        • Я за то, чтобы весь софт был модульным.

                          Например, чтобы веб-браузер можно было собрать только из нужных компонентов: хочу — беру оболочку от «Хрома», не хочу её — беру от «Симанки»; хочу — беру парсер на «Webkit», не хочу его — беру на  «Gecko»; хочу — беру интерпретатор «Йажасцрипта» на «V8», не хочу его — беру «Splidermonkey». И так далее.
                          Ответить
                          • P.S. К слову о химерах. Один чувак, смешав исходники «Хромиума 49» и «Хромиума 54», собрал «Хромиум», который запускается в «Windows XP», но при этом поддерживает некоторые функции 54-го «Хрома»:
                            http://jeder.ru/?p=280

                            Это было бы смешно, но «Archive.org» посчитал этот проект настолько важным, что снял копию:
                            https://archive.org/details/advancedchromev54.20.6530.0
                            Ответить
                          • И тут обновляется интерфейс какого-нибудь «водноклассницах». Начинают лагать пункты меню (потому что там ЙАЖАскрипта на странице больше чем кода управления в МБР). Администрация на жалобы отвечает «купи комп не с помойки, лол». На форумах начинается срач о том, какие компоненты в каких сочетаниях дают больший пирфоманс. Находят сочетание, при котором меню появляется через секунду после наведения, а не через 3.

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

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

                            Чтобы это говно прикрутить к охуенно модульному браузеру, понадобится распидорасить весь охуенно стройный АПИ взаимодействия между модулями, и заставить модули либо имплементировать всю хуйню, даже которую они не юзают, либо модулям придётся договариваться о том, какие виды АПИ они могут использовать.
                            Ответить
                            • > интерфейс какого-нибудь «водноклассницах»
                              > Начинают лагать пункты меню (потому что там ЙАЖАскрипта на странице больше чем кода управления в МБР

                              А зачем посещать такие сцайты?
                              Ответить
                              • Кто за браузер платит — тот его и танцует.
                                Ответить
                              • Иногда приходится посещать такие сайты. Лагают сайты интернет-магазинов, банков, государственных учреждений.
                                Ответить
                                • > интернет-магазинов
                                  Тебе лень из дома выйти? Фу, неженка.

                                  > банков
                                  Зачем тебе банки? Ты что, кредиты берёшь?

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

                                    Весной 2020-го вынудили пользоваться этой ерундой.
                                    Ответить
                          • > Я за то, чтобы весь софт был модульным.
                            Поддержал.

                            Причём с возможностью вообще выкинуть какой-то компонент. Допустим браузер без интерпретатора «Йажасцрипта» или реализующий ограниченное его подмножество.
                            Ответить
                      • Ну вот, одну из множества фич «Visual Studio» своровали повторили.
                        А что насчёт, например, подсказок с полностью раскрытыми директивами препроцессора? Незаменимая фича для отладки препроцессороговна. А что насчёт встроенных дебаггеров: кто ещё может, например, делать снапшоты кучи с возможностью навигации по объектам и коду, который эти объекты создал? Или вот, к примеру, где ещё можно тыкнуть на шаблон, указать реальные примеры типов и наслаждаться его полным анализом до компиляции (https://devblogs.microsoft.com/cppblog/template-intellisense/)?

                        Так можно долго продолжать набрасывать. Факт остаётся фактом: для разработки крестоговна «Visual Studio» является наиболее мощной (e.g. насыщенной полезными фичами) IDE на рынке. Именно поэтому…

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

                        И да, реальная практика у меня есть: я программирую на «Python» в «VS Code» с расширениями. И какое же это говно… Вкладка «Pytest» отваливается, тесты молча не запускаются, процессы этой вкладки виснут и жрут по целому ядру, языковой сервер тоже иногда отваливается и перестаёт отвечать, а когда отвечает — гордо демонстрирует мне в подсказках полезную информацию, повторённую джва раза, причём изменение случайных настроек иногда отключает это двойное говно на день-другой, чтобы потом оно всё равно вернулось… Пиздец нахуй, я за монолиты.
                        Ответить
                        • > А что насчёт, например, подсказок с полностью раскрытыми директивами препроцессора?

                          Это Eclipse умеет. Clangd тоже препроцессорное говно умеет раскрывать https://i.imgur.com/voCsgCU.png (пример из https://govnokod.ru/27240 если что)
                          Ответить
                          • > https://i.imgur.com/voCsgCU.png
                            Нет, я про другое. «IntelliSense» умеет раскрывать любое макроговно в любой позиции, а не только считать константы: https://i.imgur.com/mhGpxld.png.

                            > надо делать другие IDE, в которых эти фичи будут. А микрософтовскую вин-онли отрыжку слать нахуй

                            Флаг в руки. А я и дальше буду использовать удобный и эффективный инструмент.
                            Ответить
                        • > Так можно долго продолжать набрасывать. Факт остаётся фактом: для разработки крестоговна «Visual Studio» является наиболее мощной (e.g. насыщенной полезными фичами) IDE на рынке. Именно поэтому…

                          ... надо делать другие IDE, в которых эти фичи будут. А микрософтовскую вин-онли отрыжку слать нахуй
                          Ответить
                          • Иногда в программах, прибитых к конкретной платформе, есть смысл. Их можно сделать быстрыми и маленькими, используя особенности конкретной системы, вызывая API ОС напрямую и не накручивая лишних уровней абстракции, лишних обобщений.

                            Правда, монстроподобные айсберги вроде «Visual Studio» к таким супероптимизированным программам не относятся. В «Студии» фреймворк на фреймворке и фреймворком погоняет.
                            Ответить
                            • > Иногда в программах, прибитых к конкретной платформе, есть смысл. Их можно сделать быстрыми и маленькими, используя особенности конкретной системы, вызывая API ОС напрямую и не накручивая лишних уровней абстракции, лишних обобщений.

                              Если речь идет о т.н. "Language Server" ( https://langserver.org/ ), который занимается подсказыванием-подсвечиванием всякой такой хуйни, то я не очень понимаю, каким образом прибивание "Language Server" к API конкретной OS сделает его быстрее.
                              Ответить
                • нормально ты пердаки пердолям поджёг

                  им теперь придётся три раза ядро пересобрать, чтобы остыло
                  Ответить
                  • Хорошо хоть, что не надо в очередной раз отбашлять заднеприводному владельцу твоей яблотехники денег за лицензию разработчика.
                    Ответить
                    • за меня фирма башляет

                      извини, забыл, что ты ещё не работал никогда
                      Ответить
                      • Хорошо, что с остальным ты согласен, а то бывают яблочники, которые считают технику эпл «своей»)
                        Ответить
                  • > им теперь придётся три раза ядро пересобрать, чтобы остыло

                    Борманд в соседнем треде уже собирает )))
                    Ответить
                    • только у Борманда не подгорало, не знаю, чо он отдувается
                      Ответить
                      • Борманд не прыщефанбой потому что, у него религиозной ненависти к MS нету
                        Ответить
                      • Мне просто нравится смотреть, как что-нибудь собирается.
                        Ответить
                        • Ну собери Xorg тогда, или хромиум какой-нить
                          Ответить
                          • В принципе можно, гуйню для LFS я никогда не пробовала добавлять.
                            Ответить
                            • Я собирал иксы, и это занимало вечность. Правда это было очень давно.

                              imake знашеь?:)
                              Ответить
                              • > и это занимало вечность

                                Qt из той же весовой категории, я думаю (там внутри вебкит).
                                Ответить
                • Виндой и студией пользовались все, а вот альтернативными системами — меньшинство. Много ли вы видели постов такого содержания: "visual studio? что это такое? я только acme под plan9 пользовался, надо бы глянуть на этот ваш видоуз"? Нет.
                  Поэтому, когда фанбой мелкомягких открывает рот — он спамит своими иррациональными конформистскими предубеждениями.
                  А вот когда линукс-хакер выдаёт взвешенную реплику — он делает public service announcement, доносит важную информацию до общества.

                  Точно так же: есть ли смысл расхваливать направо и налево последний голливудский блокбастер? Только если вы хотите сигнализировать свою принадлежность к интеллектуальному большинству. А вот рассказывать каждому встречному про арт-хаус режиссёра Ларпа фон Тридара — долг любого интеллигента.
                  Ответить
                  • s/А вот рассказывать каждому встречному про/Нести в массы знание про/
                    Ответить
                  • Какой багор )))

                    Нет, обсуждать популярную питушню нужно.
                    1. Если кто-то в вузе использовал условную MSVS2005, то это не значит, что он в курсе того, что в ней изменилось за 10-20 лет.
                    2. Не все следят за тенденциями. Человек может использовать свою редкую IDE по какой-то причине (её использовали в конторе, куда он пошёл работать), а про остальные знать только названия. Ему может пригодиться информация о MSVS.
                    3. Среди голосов фанбоев должны звучать голоса пользователей. И нет ничего такого, если пользователь хвалит хороший продукт. Мозг фильтрует маркетинговый шум вместе с голосами фанбоев. Без обсуждения и хвалебных речей пользователей о "MSVS" известно столько же, сколько про "acme под plan9".

                    То же с блокбастерами. Про анскильную питушню Лиспа фон Тридара я слышал кучу завываний альтернативно одарённых фанбоев-хипстеров, а про голливудские блокбастеры - только маркетинговый шум.
                    Ответить
          • > Если никакой, то поставь Винду, ведь...
            На моей рабочей станции у меня «Windows», да. Она мои задачи выполняет достаточно хорошо.

            > Не хорошо, а хуёво и неэффективно.
            Так вот в том-то вопрос и стоит: что в «systemd» хуёвого и неэффективного? Неэффективно хранить все юниты в одном месте? Неэффективно управлять системой через единый и унифицированный CL интерфейс, а не кучу говноутилит с разными наименованиями, аргументами и способами вызова? Хуёво иметь удобный интерфейс доступа к логам, который позволяет не рыться по всем директориям /var/logs как голодная собака в помойке? Жду конкретики.

            > В портянке говнокода на 500 строчек кода найти уязвимость заметно проще, чем в портянке говнокода на 500000 строк кода.
            Ergo, ядро «Линукса» не нужно.

            > А теперь хрюкни и обнови шиндошс, или что ты там делаешь обычно.
            По делу есть что сказать?
            Ответить
            • > На моей рабочей станции у меня «Windows», да. Она мои задачи выполняет достаточно хорошо.

              Зачем тебе тогда «Linux»? Сидел бы и дальше на виндуозе, раз он выполняет твои задачи. Машина без ремней безопасности тоже выполняет свои задачи, но я, пожалуй, на такой кататься не буду.

              > Так вот в том-то вопрос и стоит: что в «systemd» хуёвого и неэффективного

              Всё. Мистер глиномес погнался за всеми зайцами сразу и ни одного не догнал.

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

              > унифицированный

              Мифы про какую-то унификацию в системдэ просто смешны.

              > Ergo, ядро «Линукса» не нужно.

              Тебе же похуй на «ядро Линукса» и его чувства, раз ты оскверняешь его системдой, так что да, тебе оно не нужно.
              Ответить
    • Генерализируем проблему.

      Есть некоторая система, известная своей простотой. Простота позволяет легко понять систему, а значит и легко устранить возникшие проблемы.
      Эта система привлекает поборников простоты, которые изучают её устройство (инвестируя в это изучение некоторое количество времени) и потом там прекрасно живут.

      У большинства из них проблем никаких нет.

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

      В итоге получается Франкенштейн, где часть сделана по-старому, часть по новому (как если бы ты делал ``WriteConsole`` и std::cout << одновременно).


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

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

      Это вызвало ожидаемую реакцию.


      Вот если бы Линукс изначально был как AIX*, то всё было бы ок
      * https://ru.wikipedia.org/wiki/AIX
      Ответить
      • > Зато им ввели новую Абстракцию, сильно усложнив их систему, да параллельно еще и обнулив часть знаний.
        > Поборникам простоты говорят, что Абстракция решает массу проблем.
        > Но этих проблем у них не было.

        Подтверждаю.

        Реальный пример: https://govnokod.ru/26671#comment549703
        Ответить
  • Кстати, почему все так не любят «PHP»?
    Это же удобный, многофункциональный, консистентный и унифицированный инструмент, который позволяет эффективно решать распространённые проблемы.

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

    Разговоры про «красоту кода» и «мартинов фаулеров» лучше оставить прыщавым подросткам: это им приличествует разводить срачи о том, чьи скрипты православные, а чьи — ересь. Взрослым людям язык нужен для эффективного решения задач, а не для споров про философию и подход.
    Ответить
  • К вопросу о Systemd.

    Только что на debian рассылке

    ---------
    Hi,

    Suddenly I can no longer reboot or poweroff my up-to-date
    bullseye system:


    # reboot
    /usr/sbin/reboot: disabled in systemd-nspawn container


    Linux container share the kernel of the host system they are running on,
    there is no need to reboot just the container.

    However, please contact your system administrator to reboot this
    container from the host system.



    # poweroff
    /usr/sbin/poweroff: disabled in systemd-nspawn container
    ---------

    как на виндуосе ))
    Ответить
    • Чувак превратил свою ось в контейнер?

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

        systemd-nspawn is like the chroot command, but it is a chroot on steroids.

        systemd-nspawn limits access to various kernel interfaces in the container to read-only, such as /sys, /proc/sys or /sys/fs/selinux

        но сама ситуация какая, лол
        Ответить
  • > Да, последнюю неделю ловлю такие глюки.
    Наверняка это потому что какие-то петухи постоянно открывают огромные посты. Найти бы их…
    Ответить
  • > Может вам лучше куда-нибудь перекатиться, а то в этом говнокоде уже 852 (а с учетом этого - 853) комментария?

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

    Хотя, я спать пойду. С учётом того, что меня забанили на ГК, я всё ещё сижу на нём до 4 утра. Какой багор )))

    #MinGW #MSYS #MSYS2 #WSL2 #MD5 #OpenSSL #виндопердолинг #пердолинг
    Ответить
    • > Да, надо перекатываться, там уже тормозит

      А чем нарисованы эти таблички?
      system   | avg Mh/s | sqrt(disp Mh/s)
      ---------+----------+----------------
      MinGW 32 |    1.509 |           0.12
      WSL2  64 |    1.388 |           0.10
      Ответить
      • Руками, но с помощью редактирования сразу нескольких строк (Alt+Shift) в Notepad++.
        Ответить
          • var avg = xs => xs.reduce((a, x) => a+x, 0) / xs.length
            var err = xs => Math.sqrt((avg => xs.reduce((a, x) => a+(x-avg)**2, 0))(avg(xs)) / xs.length)

            Хотя, наверно в npm есть модуль для питушения статистики, но тут надо было посчитать пару чисел, одно из которых никто не будет смотреть, а второе - никто не будет смотреть.
            Ответить
            • Не, я за pretty print.

              pandas например использует:
              https://pypi.org/project/tabulate

              Там даже стили можно выбирать. pretty/psql очень похожи на таблицу выше
              >>> print(tabulate(table, headers, tablefmt="pretty"))
              +-------+-----+
              | item  | qty |
              +-------+-----+
              | spam  | 42  |
              | eggs  | 451 |
              | bacon |  0  |
              +-------+-----+
              Ответить
      • Интеловская питушня интересная. В зависимости от процессора может выбирать нужный модуль (без SSE и AVX либо с поддерживаемой версией SSE или AVX).

        Для сборки нужно уметь обращаться с autotools (autoconf, automake).

        Надо запомнить: подсовывать «nasm», а не «yasm». Текущая версия «yasm» некоторых инструкций не знает (об этом есть issue в хранилище «yasm» в «Гитхабе»).

        Ассемблерный код в библиотеке только 64-битный.
        Ответить
        • > нужно уметь обращаться с autotools

          configure надо генерить что ли? О_о

          Первый раз такую кривую либу вижу. Хотя может просто dev сборку выложили.
          Ответить
        • Под винубунту надо было сделать
          sudo apt-get install autoconf libtool nasm
          А дальше по мануалу из README:
          ./autogen.sh
          ./configure # я по совету автогена написал ./configure --prefix=/usr --libdir=/usr/lib
          make
          sudo make install


          make check выдал 25 из 25.
          Ответить
          • MSVC+NASM — тоже рабочая кобенация. Собирается через nmake. Для сборки тестов пирфоманса придётся поправить Makefile.nmake, чтобы указать пути к OpenSSL.
            Ответить
            • P.S. А нет, тест пирфоманса всё равно не соберётся. Нужно портировать функцию perf_start.
              Ответить
            • > MSVC
              Это ещё её устанавливать надо. Гигабайтам питушни на диске, купленном за свои кровные, скажем НЕТ!
              Ответить
              • Именно поэтому я против «MS SQL Server». Его конкуренты («MySQL», «PostgreSQL», «Firebird») не требуют десятка гигабайтиков места на диске.
                Ответить
                • не требуют, а в замен и не умеют нихуя, лол
                  Ответить
                  • Минусуют долбоёбы, чьи знания SQL ограничиваются "SELECT *FROM TOVARY".

                    Как там с materialized views в майсцыкуэлях? Как с adaptive joins?
                    Долбоёбы и слов-то таких не знают, зато кукарекают постоянно "зачем нам ваши мсскули и ораклы, кококо, у нас на php+mysql всё прекрасно работает"
                    Ответить
                    • > adaptive joins

                      Это говно.

                      > materialized views

                      Это хуйня.

                      > Долбоёбы и слов-то таких не знают

                      А он прав)
                      Ответить
                      • > Это говно.
                        > Это хуйня.
                        Почему?
                        Ответить
                        • Потом, что я не пользуюсь ни тем, ни другим. Да, мне хватает простых CRUD-операций. Как-то так получилось, что мне ни джойны, ни хуёйны, ни вьюс, ни хуюс особо не нужны.
                          Ответить
                        • > adaptive joins

                          Мелкомягкие говорят: вот этот алгоритм будет эффективнее на таком вот количестве говна, а вот этот уже на более другом количестве говна!!!!!!

                          И я сразу же вспоминаю про КОНТРОЛЛЕРЫ, битоёбство и прочее питушение. Так вот, это – оверинжиниринг и говно. Такая даза банных не нужна.

                          > Это хуйня.

                          Я передумал уже, это не хуйня.
                          Ответить
                      • Тогда это не хуйня, зато MS SQL Server соснул в очередной раз.
                        Ответить
                      • >Материализованные вьюхи есть в «Постгресе», например.
                        их уже не нужно вручную обновлять>?
                        Ответить
                    • > Долбоёбы и слов-то таких не знают
                      Действительно. Про adaptive joins даже не слышал.
                      Вроде тут понятно объясняют: http://www.queryprocessor.ru/adaptive-query-processing/

                      Это же космические технологии: алгоритм на ходу сам себя переписывает. Я джва года ждал такую фичу.
                      Ответить
                      • > SQL Server имеет три физических типа соединений Nested Loops Join, Hash Join и Merge Join. Каждый из них хорош при определенных условиях.


                        Я использую СУБД не для того, чтобы думать о физическом представлении данных. Если я захочу побайтоёбить, я возьму няшную или что-нибудь типа того.

                        create nonclustered columnstore index dummy on Sales.SalesOrderHeader(SalesOrderID) where SalesOrderID = -1 and SalesOrderID = -2;


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

                        Какое говно )))
                        Ответить
                        • То есть ``EXPLAIN``ом ты не пользуешься?

                          Ну наверное это типично для пользователя MySQL
                          Ответить
      • SEO-пост.

        Intel(R) Intelligent Storage Acceleration Library Crypto Version
        ISA-L_crypto is a collection of optimized low-level functions targeting storage applications. ISA-L_crypto includes:

        • Multi-buffer hashes - run multiple hash jobs together on one core for much better throughput than single-buffer versions.

        • • SHA1, SHA256, SHA512, MD5, SM3

        • Multi-hash - Get the performance of multi-buffer hashing with a single-buffer interface. Specification ref : Multi-Hash white paper

        • Multi-hash + murmur - run both together.

        • AES - block ciphers

        • • XTS, GCM, CBC

        • Rolling hash - Hash input in a window which moves through the input
        Ответить
      • Библиотека собралась. Проходит все тесты, кроме AES, почему-то.

        Тест пирфоманса: sha1 и sha256 в 2 раза быстрее, чем в OpenSSL, md5 — в 3 раза быстрее. Для sha512 разгон не получился. 1:1 с OpenSSL.

        Итого: с этой библиотекой есть шанс разогнать md5 в 3 раза. Не гигахэши, конечно.
        Ответить
        • А хэш-кот сколько выдаёт на твоей железке?

          З.Ы. Ты же multi-buffer режим юзаешь, как они и предлагают? Насколько помню, эти хеши не очень хорошо ложатся на SSE, зато можно параллельно несколько блоков считать чтобы свободные куски регистров забить. Или я туплю и это только про AES было...
          Ответить
          • Часть тестов для AES не прошла, потому что программа упала на инструкции VAESIMC. Значит, расширения для AES на том процессоре нету.
            Ответить
          • Хэш-кот на первом же примере вывел: «Not enough allocatable device memory for this attack». Надо разбираться с ним.
            Ответить
          • Научился считать хэши этой библиотекой.

            На одном буфере она работает медленнее, чем OpenSSL, на двух скорости сравниваются, дальше при увеличении количества буферов скорость растёт, а после 16 параллельных буферов прирост по сравнению с 16 незаметен. Разницу между реализацией на SSE и на AVX я не заметил.

            На моём железе на входных данных, равных по длине емейлам, получил прирост в два раза с копейками. Похоже, что больший прирост можно выжать только на больших данных (в интеловских тестах мегабайты, а типичный емейл весит байтов 20).

            Итого: ускорение раза в два на таких крошечных блоках выжать можно.

            Не знаю, может быть, на AVX-512 результат получше будет, но пока проверить не на чем.
            Ответить
            • P.S. Реальный пример кода:
              md5_ctx_mgr_init(&md5_mgr);        
                for (i = 0; i < TEST_BUFS; i++) {
                    hash_ctx_init(&md5_ctx[i]);
                }
              
                for (i = 0; i < TEST_BUFS; i++) {
                    md5_ctx_mgr_submit(&md5_mgr, &md5_ctx[i], email[i], length[i], HASH_ENTIRE);
                }
              
                while(NULL != md5_ctx_mgr_flush(&md5_mgr)) {} // ждём завершения вычисления
                // до завершения текущих вычислений контекст нельзя использовать для вычисления следующих хэшей
              
                for (i = 0; i < TEST_BUFS; i++) {
                  digest_buf = hash_ctx_digest(&md5_ctx[i]); // забираем результат вычисления каждого хэша из digest_buf
                }
              Ответить
              • Эта библиотека подходит для хэширования видеофайлов, архивов (на сайте «Интела» есть реальные примеры с ускорением в 9 раз), а на таких мелких данных как емейлы слишком много времени тратится на подготовительные работы.
                Ответить
              • Ещё одна мысль возникла. На больших данных можно провернуть такой трюк: посчитать частичную сумму от начала массива и не финализировать сразу, а расклонировать и финализировать с разными окончаниями. По идее должен быть выигрыш, потому что сумма от начала не вычисляется повторно.

                Но опять же на таких крошечных данных, как адреса почты, это не поможет.
                Ответить
                • Можно, но у md5 и sha такие ебические входные блоки (64 байта), что там вся почта целиком войдёт в один блок...

                  И профита от передачи кусками вообще не будет, имхо. Оно тупо забуферизует первый кусок и ничего не будет считать пока ты остаток не передашь.
                  Ответить
                  • Надо завести почту на домене abcdefghijklmnopqrstuvwxyzabcdefghijklmn opqrstuvwxyzabcdefghijk.com. Сейчас проверил — вроде закрыли этот сервис. На «ГК» я нашёл только одного юзера с такой почтой.
                    Ответить
                • З.Ы. Имхо, тебе тут надо пытаться вычистить вилкой весь оверхед вокруг вычислительного ядра. Чтобы осталась только подготовка набора буферов (4 вроде надо) с правильным паддингом и собственно ядро на асме/интринсиках, которое параллельно весь набор хеширует.
                  Ответить
                  • Если конкретно про задачу реверса граватара, то там много над чем можно подумать:

                    1. Алгоритм перебора. Не использовать конкатенацию, а писать поверх.

                    2. Алгоритм поиска вычисленного хэша в базе юзеров. Существует масса реализаций ассоциативных массивов. Для базы в 68к юзеров и ключа в 128 батов особой разницы между разными мапами не будет?
                    Ответить
                    • > особой разницы между разными мапами

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

                      Может быть вообще свои какие-то массивы вместо мапы попробовать стоит. База же фиксированная, можно один раз подготовить.
                      Ответить
                      • Кстати, ради интереса нужно посчитать, сколько будет коллизий на обрезанном хэше. База не такая большая. Есть шанс, что будет по одному юзеру на хэш (ну кроме полных дублей, которые я уже нашёл).
                        Ответить
                      • Да, Царь завещал использовать массив.

                        // инициализация
                        hashes.sort(by_first_two_bytes);
                        // готовим указатели
                        hash hmap[0x10001] = {}; // мапа
                        uint16_t index = 0;
                        hmap[index] = &hashes.front();
                        for (auto& h : hashes) {
                          const uint16_t i = *reinterpret_cast<uint16_t*>(h);
                          while (index < i) hmap[++index] = &h;
                        }
                        while (index < 0x10000) hmap[++index] = &hashes.back() + 1;
                        
                        
                        // используем
                        crack_loop {
                          auto calculated = md5(pituz);
                        
                          // лукавпим
                          const uint16_t index = *reinterpret_cast<uint16_t*>(calculated);
                          for (hash h=hmap[index]; h<hmap[index+1]; h++) {
                            if (!memcmp(h, calculated, md5_len)) std::cout << "found" << std::endl;
                          }
                        }
                        Ответить
                        • Патч. Т.к. массив на 0x10001, надо проверять на переполнение; поскольку сортировка не согласована с индейцами, лучше выковырять байты руками, иначе сортировка сортирует не то:
                          - while (index < 0x10000)
                          + while (index && index < 0x10000)
                          
                          - *reinterpret_cast<uint16_t*>(pitux)
                          + pitux[0] << CHAR_BIT | pitux[1]


                          Что интересно, такой код дал прирост по сравнению с использвоанием std::map. Я загнала хэши в такое хранилище, вставила лукап после подсчёта хэша и только при наличии совпадения (это 60к случаев из практически бесконечности) уже искала в настоящей std::map.

                          std::map: 1.4Мх/с
                          царский set: 3.6Мх/с

                          Что интересно, если использовать memcmp для реализации operator < для хэша, тоже начинает тормозить.

                          std::map + memcmp: 1.2Мх/с
                          std::map + наивный алгоритм сравнения: 1.4Мх/с

                          Однако, operator == для хэша, совмещённый с царским лукапом, преимуществ по сравнению с велосипедным сравнением не дал.

                          Генерация вореций просело сильнее. Раньше это было 5%, а теперь - уже 15% слива:

                          вореции: 3.0Мх/с
                          прямой подбор: 3.6Мх/с
                          Ответить
                          • Что интересно, в сравнении MinGW-32 vs WSL2-64 на этот раз победил WSL2 со счётом 3.85:3.64.
                            Ответить
                          • > *reinterpret_cast<uint16_t*>(pitux)
                            > pitux[0] << CHAR_BIT | pitux[1]

                            Отлично!

                            Осталось intrinsic с sse4/avx2 напетушить, чтобы пачками по 8-16 штук обрабатывало.

                            За Царя и Воречество! Ура!
                            Ответить
                          • Попробуйте заменить memcmp чем-то таким:
                            #include <smmintrin.h> //SSE4.1
                            #include <nmmintrin.h> //SSE4.2
                            #include <immintrin.h>  //AVX2
                            #ifdef __GNUC__
                            __attribute__ ((target ("avx2")))
                            #endif
                            int cmp_avx2 (const int16_t* const ref, const int16_t* const hash, const int n) {
                            
                                for (int i=0;i<n;i+=16) {
                                    __m256i pcmp = _mm256_cmpeq_epi32(*( __m256i* ) &ref[i], *( __m256i* ) &hash[i]);
                                    unsigned bitmask = _mm256_movemask_epi8(pcmp);
                                    if (bitmask == 0xffffffffU){
                                        return true;
                                    }
                                }
                                return false;
                            }


                            Из-за блядских auto и выкинутых кусков не совсем понятен тип.
                            Для 128-бит md5 можно по джва сразу сравнивать.

                            https://godbolt.org/z/865E8PeYf
                            Ответить
                          • Можно цикл выкинуть если сравнивается по одному 128 битному значению

                            static inline int m128_diff(const void* ref, const void* hash)
                            { 
                              return 0xFFFF ^ _mm_movemask_epi8(_mm_cmpeq_epi8(
                                 *( __m128i* ) ref, *( __m128i* ) hash
                              )); 
                            
                            }
                            
                            m128_diff(void const*, void const*):
                                    movdqa  xmm0, XMMWORD PTR [rdi] ; это по идее должно уже быть в регистрах
                                    pcmpeqb xmm0, XMMWORD PTR [rsi] ; инлайн уберёт тот movdqa
                                    pmovmskb        eax, xmm0
                                    xor     eax, 65535
                                    ret
                            Ответить
                            • >> это по идее

                              В регистрах оно было бы, если бы мы передавали структуру, а так будет копироваться из адреса в памяти.
                              Ответить
                              • P.S. Хотя если оптимизатор использует инлайн, то это жонглирование через ОЗУ может аннигилировать.
                                Ответить
                            • Там OpenSSL'евский unsigned char*.
                              А в комментарии с царским лукапом в некоторых местах псевдокод.

                              Заголовки про SSE не прошли из-за __m64, после их выключения с включённым только последним сравнение скомпилировалось под винубунтой (мингв не компилирует). Но заметный прирост или тормоза не наблюдаются.

                              Это надо как-то прикрутить ту царскую библиотеку для хэширования и оптимизировать генерацию нового слова, чтобы царское сравнение дало прирост. Ну либо откатиться на std::map, где куча сравнений.
                              Ответить
                              • Я вообще планировала написать псевдокод и пойти спать, но зачем-то решила проверить, насколько сильно его нужно изменить, чтобы заработал, и какой профит он даст.
                                Ответить
                                • > планировала
                                  > решила

                                  И ты туда же?
                                  Ответить
                                    • Я Настенька!

                                      1024-- бы не додумался до царского лукапа. Он сначала бездумно написал прототип под Node.js, а потом на крестах бездумно впердолил std::map.
                                      Ответить
                              • Царская библиотека для хэширования даёт прирост, когда одновременно считаются 16 хэшей или более. Нам нужно итерироваться по 26...40 символам. В принципе, адреса, отличающиеся одним символом, можно попрообовать похэшировать параллельно. Если 40 будет многовато, можно попробовать разбить на части (16+16+8).
                                Ответить
                              • Кстати, скачал твою программу и по-быстрому прикрутил царскую библиотеку для хеширования.

                                Заменил std::map на std::unordered_map. Итоговое ускорение 3 раза.
                                Ответить
                                • P.S. А царская библиотека в gcc в mingw всё-таки собралась. Возможно, pacman -Su помог.
                                  Ответить
                                • А если добавить царский лукап? Диктую патч:

                                  В setttings добавить #define TSAR_LOOKUP

                                  В struct digest_t - operator ==, например, как
                                  bool operator == (const digest_t& rhs) const {
                                      return memcmp(data, rhs.data, MD5_DIGEST_LENGTH) == 0;
                                  }


                                  После fi.close() добавить
                                  #ifdef TSAR_LOOKUP
                                    std::vector<digest_t> hashes;
                                    hashes.reserve(unknown_users.size());
                                    for (auto u : unknown_users) hashes.push_back(u.first);
                                    
                                    std::sort(hashes.begin(), hashes.end());
                                    digest_t* hmap[0x10001];
                                    uint16_t index = 0;
                                    hmap[index] = &hashes.front();
                                    for (auto& h : hashes) {
                                      const uint16_t i = h.data[0] << CHAR_BIT | h.data[1];
                                      while (index < i) hmap[++index] = &h;
                                    }
                                    while (index && index < 0x10000) hmap[++index] = &hashes.back() + 1;
                                  #endif


                                  Перед auto it = unknown_users.find
                                  #ifdef TSAR_LOOKUP
                                        bool found = false;
                                        const uint16_t index = digest.data[0] << CHAR_BIT | digest.data[1];
                                        for (digest_t* h=hmap[index]; h<hmap[index+1]; h++) {
                                          if (digest == *h) found = true;
                                        }
                                        if (found) {
                                  #endif

                                  Перед if (n == N)
                                  #ifdef TSAR_LOOKUP
                                        } // end if (found)
                                  #endif
                                  Ответить
                                  • Хотя, обновил сам репозиторий.
                                    Ответить
                                    • И ещё добавила фикс сравнения строк. Теперь не обязатяльно, чтобы домены начинались с собаки.
                                      Можно писать "+netux@mail.ru" вместо "@mail.ru".
                                      Ответить
                                • так map небось деревянный внутри, и потому логорифмический, а unordered хешовый, и потом константный?
                                  Ответить
                                • > Итоговое ускорение 3 раза.
                                  И ещё есть потенциал с Царским лукапом.

                                  Я попробовала вставить unordered_map с return *reinterpret_cast<const size_t*>(d.data); в теле std::hash<digest_t>::operator(). Варианты вида return d.data[0] << CHAR_BIT*3 | ... дают похожее значение, но на единицы процентов меньше.

                                  В итоге Царский лукап побеждает с отрывом:
                                  algorithm          | speed
                                  -------------------+---------
                                  std::map           | 1.19Mh/s
                                  std::unordered_map | 2.32Mh/s
                                  Tsar-style lookup  | 3.67Mh/s


                                  Если он с "медленным" OpenSSL накинул 50% пирфоманса, то что будет с Царской библиотекой, где доля времени лукапа увеличится.
                                  Ответить
                                  • Вчера погонял на семизначных логинах. Получилось так:
                                    std::map,           openssl              : 1,0 Mh/s
                                    std::map,           isal_crypto (16 bufs): 1,2 Mh/s
                                    std::unordered_map, openssl              : 1,6 Mh/s
                                    TSAR_LOOKUP,        openssl              : 2,2 Mh/s *
                                    std::unordered_map, isal_crypto (16 bufs): 2,7 Mh/s
                                    TSAR_LOOKUP,        isal_crypto (16 bufs): 3,7 Mh/s 
                                    
                                    TSAR_LOOKUP,        isal_crypto (1 buf)  : 1,3 Mh/s
                                    TSAR_LOOKUP,        isal_crypto (2 bufs) : 2,0 Mh/s
                                    TSAR_LOOKUP,        isal_crypto (4 bufs) : 2,7 Mh/s
                                    TSAR_LOOKUP,        isal_crypto (8 bufs) : 3,4 Mh/s
                                    TSAR_LOOKUP,        isal_crypto (16 bufs): 3,7 Mh/s
                                    TSAR_LOOKUP,        isal_crypto (32 bufs): 3,9 Mh/s
                                    TSAR_LOOKUP,        isal_crypto (64 bufs): 3,9 Mh/s


                                    Звёздочка означает, что на некоторых наборах данных программа падает (пока не изучал, почему).

                                    Похоже, что разгон зависит от процессора. У тебя будет быстрее.
                                    Ответить
                                    • А как треды юзаешь, кстати?

                                      Каждый тред берёт себе достаточно большой кусок пространства имён и работает над ним не общаясь с другими?

                                      З.Ы. Можно ещё попробовать убрать лишние аллокации, работу со строками и т.п. если они есть. По-хорошему все горячие данные должны влезать в L1.
                                      Ответить
                                      • Сейчас никак. Программа однопоточная.

                                        Надо алгоритм перебора емейлов доработать. В нём есть лишние операции.
                                        Ответить
                                        • Возможно ещё как-то хешмапу можно уплотнить, убрать из неё индирекции, чтобы вся корзинка в кешлайн влезала. У тебя же там немного коллизий?
                                          Ответить
                                            • Ну в общем я думаю надо избавляться от указателей в хешмапе.

                                              Доступ случайный, в L1 не входит,поэтому чем меньше обращений к L2 триггернет на каждую проверку -- тем лучше.
                                              Ответить
                                              • Про корзинки: пробовал разные хэш-функции для std::unordered_map. При длине от 16 бит (двух октетов) до 64 бит (восьми октетов) разница в скоросте незаметна. Если брать короче 16 бит, то начинает тормозить.
                                                Ответить
                                    • Дополнение:
                                      boost::container::flat_map, isal_crypto (16 bufs): 1,4 Mh/s


                                      flat_map оказался быстрее std::map, но медленнее std::unordered_map.
                                      Ответить
                                          • > Пока что std слил хвалёный flat_map.
                                            Так это просто потому что был нарушен главный принцип крестов: не плати за то, что не используешь. «flat_map» обеспечивает упорядоченность элементов, а это стоит процессорных денег. «std::map», обеспечивающий такой же набор услуг, «flat_map»-у сливает (за счёт того, что «flat_map» хранит всё дерево в одном массиве, а «std::map» — в разбросанных по всей памяти бакетах).
                                            Ответить
                                            • > не плати за то, что не используешь. «flat_map» обеспечивает упорядоченность элементов

                                              Логично.

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

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

                                              В robin-hood интересно придумали: хранить сдвиг от оптимального хеша.

                                              А при удалении не ложить пустого скипуха, а сдвигать элементы назад — ближе к исходной точке.
                                              Ответить
                                            • > А «кококос» интересный, но тяжёлый. Оставлю его на потом.

                                              Не надо. Мне просто название очень понравилось.

                                              Я бы предложил попробовать google::dense_hash_map (но меня не нужно слушать — я не настоящий крестоблядь, у меня даже анимешной девочки на аватаре нету.)
                                              Ответить
                                        • Спасибо. Попробую.

                                          Ещё у 1024-- таблица юзеров полностью в мапе. Я вынес таблицу юзеров в статический массив (в нём же всего 68к записей), а в мапе оставил только отображение md5 в индекс в этом массиве. С 2,7 Mh/s скорость поднялась до 2,9 MH/s. Как-то не очень заметно оказалось.
                                          Ответить
                                          • > отображение md5 в индекс

                                            А зачем тут мап, кстати? Предлагаю в горячем цикле оставить set, а мапать md5 в юзера уже в холодном коде, когда торопиться некуда.
                                            Ответить
                                            • Кажется, понял. Сначала в сете проверяем факт есть/нет, а только потом, если есть, ищем в мапе.
                                              Ответить
                                              • > Сначала в сете проверяем факт есть/нет

                                                Кстати, а попробуй вот такой вариант ещё.

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

                                                По идее 95% обращений к основной мапе должно срезать (т.е. только 60к битов из миллиона выставлены).
                                                Ответить
                                                • std::set и std::unordered_set тормозят, предвыборка по robin_hood::unordered_set или robin_hood::unordered_flat_set даёт копейки прироста скорости, а вот предвыборка по std::bitset по 20-битным числам немного ускоряет.

                                                  Возможно, есть смысл потюнинговать количество битов.
                                                  Ответить
                                                  • > предвыборка немного ускоряет

                                                    О! Ну тогда есть ещё смысл поиграться с фильтрами Блума, которые ISO ниже советует.
                                                    Ответить
                                                    • А тогда получается, что на 20 битах нужно 11 хеш-функций, на 19 — 6, на 18 — 3, потому что формула 0,7×pow(2,N)/68000.

                                                      Особенных изменений не видно.

                                                      Видимо, всё таки крутить нужно алгоритм перебора исходных слов.
                                                      Ответить
                                                    • Всё-таки у 1024-- перебор довольно быстрый (ну в рамках непараллельной архитектуры).

                                                      Интеловская библиотека с программой перебора помимо gcc собрались в MSVC и в clang. В MSVC профайлер ничего интересного не показал. Слишком большой main, придётся его рефакторить.

                                                      В clang профилировать я пока не умею. А у gcc в новых mingw, как я уже говорил, профайлер сломали. Он выводит пустую таблицу.
                                                      Ответить
                                                  • > предвыборка по std::bitset по 20-битным числам

                                                    М-м-м-м, bitset царская вещь.

                                                    > есть смысл потюнинговать количество битов.
                                                    Я бы бобробывал очевидные размеры: 16 и 24. И один неочевидный 16+3 =19 бит.

                                                    2²⁴ бит = 2 Mb, в кеш поместится.

                                                    Не знаю что у борманда за ЦПУ, но 128KB L1D это очень нетипично.(только новые Apple)

                                                    А 2¹⁹=64 KB (старые АМД). Типичный размер L1D — это 32KB.
                                                    Ответить
                                                    • > очень нетипично

                                                      Да самый обычный 8700k...

                                                      L1d cache: 192 KiB
                                                      L1i cache: 192 KiB
                                                      L2 cache: 1.5 MiB
                                                      L3 cache: 12 MiB

                                                      З.Ы. Тьфу блядь, я дура. Это 192 на 6 ядер. У каждого по 32. Ёбаные маркетологи.
                                                      Ответить
                                                        • > Так это на все ядра.

                                                          Да, я уже поняла ;(

                                                          Ёбаные маркетологи. В чём смысл писать суммарный L1, а не на каждое ядро. Он же не расшаренный...
                                                          Ответить
                                                          • Вспомнил ещё один наняк: ядра бывают с гипертредингом, а бывают без. Иногда ядра с гипертредингом считают за одно, а иногда за два.
                                                            Ответить
                                                            • Ну они где-то 1.5 в зависимости от качества кода.

                                                              Второй тред нужен просто чтобы поюзать остатки железа, которые не потратил первый.
                                                              Ответить
                                                              • То есть итоговый пирфоманс зависит от того, как раскидали задачи по ядрам? Значит, в одном ядре нужно кобенировать «тяжёлую» задачу с «лёгкой»?
                                                                Ответить
                                                                • По моему там так:

                                                                  Каждый "процессор" имеет свой набор регистров (ну на самом деле их много, мы же помним про станции резервирования Томасуло?) и свой APIC.

                                                                  Для ОС это как-бы отдельный процессор.

                                                                  Но всё остальное у них общее.

                                                                  Потому пока один процессор ждёт пока ему данные придут из памяти, другой может чото считать.

                                                                  Если писать "развязанный код" без зависимостей, то наверное будет профит. Но он и на обычном современном процессоре будет
                                                                  Ответить
                                                                  • Профит от гипертрединга, имхо, как раз когда код сильно связанный по данным. Такой код не может полноценно загрузить ядро, но при этом и уступить место другому не может: шедулер в операционке слишком грубый чтобы что-то с этим поделать.

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

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

                                                                    З.Ы. А идеальный код без лишних зависимостей сожрёт все ресурсы ядра сам, там соседям только крошки останутся.
                                                                    Ответить
                                                        • сумма температур по больнице
                                                          Ответить
                                                          • Кстати, при описании климата есть термин «сумма температур». Это сумма среднесуточных температур, что экивалентно средней температуре за период, умноженной на количество дней.
                                                            Ответить
                                                      • > L1d cache: 192 KiB
                                                        У Штеуда всю дорогу было по 32Kb L1D на ядро (только в Sunny Cove они решились увеличить до 48Kb).

                                                        У Амд со времён старых Атлонов по 64Кб кеша (не инклюзивного), но низкая ассоциативность.

                                                        В Zen они понизили L1D до 32Кб, увеличив ассоциативность.

                                                        Единственные ЦПУ где очень-очень-очень много L1 это свежие Яббл. Они со времён А12 просто с ума сошли.
                                                        Ответить
                                                        • > У Штеуда всю дорогу было по 32Kb

                                                          Ну вот я и слилась как анскилльная лалка, даже не в курсе сколько кеша у проца (((
                                                          Ответить
                                                    • 20 бит лучше всего, хотя размер L1D = 32KB.

                                                      Видимо, при более мелких размерах много ложных срабатываний, потому и медленнее.

                                                      По сравнению с неприкрытой robin_hash::unordered_flat_map прирост невелик.
                                                      Ответить
                                              • В этом случае можно попробовать заюзать https://ru.wikipedia.org/wiki/Фильтр_Блума / https://en.wikipedia.org/wiki/Bloom_filter. Сначала проверять вероятностно (подозреваю, можно уместиться в один кэшлайн и потечь), а потом уже спокойно и медленно отфильтровывать ложные срабатывания.
                                                Ответить
                                                • > Фильтр_Блума

                                                  Бля, вот как вы помните все эти умные названия?

                                                  Я идею то помню, а нагуглить ссылку на неё не смогла, пришлось своими словами описывать в комменте выше. А, у меня вырожденный случай с одним хешем получился.
                                                  Ответить
                                                    • Кстати, в нашем случае даже какие-то дополнительные хеши для Блума выдумывать не надо. Можно просто брать разные куски из md5.

                                                      Что-то в духе if (filter[md5[0]] | filter[md5[1]] | filter[md5[2]] | filter[md5[3]]) { ... }
                                                      Ответить
                                            • >> таблица юзеров полностью в мапе
                                              > А зачем тут мап
                                              Если задефайнить Царский Лукап, у Настеньки сначала смотрится в Царском сете, а потом, если вдруг нашлось - в std::map.
                                              Ответить
                                              • robin_hood::unordered_flat_map в одиночку выдаёт большую скорость, чем царский лукап + std::(unordered_)map.
                                                Ответить
                                        • Круто! 3,8 MH/s вместо 2,7MH/s без велосипедного царского поиска.

                                          И отдельно ничего ставить и компилировать не надо. Просто инклюдишь "robin_hood.h".
                                          Ответить
                                        • > robin_hood
                                          Изучаю дальше.

                                          Один .h файл без зависимостей — это плюс. Возможность работать как в режиме flat (без перепитушни) так и linked list нод (как в std) — ещё плюс.

                                          Кастомный царский аллокатор однотипных нод на массиве это ещё плюс.


                                          // Allocates bulks of memory for objects of type T. This deallocates the memory in the destructor,
                                          // and keeps a linked list of the allocated memory around.

                                          Ну и даже конкуренты подтверждают, что действительно сливает в хламину.
                                          Ответить
                                      • > std::map is a sorted associative container that contains key-value pairs with unique keys. Keys are sorted by using the comparison function Compare. Search, removal, and insertion operations have logarithmic complexity. Maps are usually implemented as red-black trees

                                        > unordered_map is an associative container that contains key-value pairs with unique keys. Search, insertion, and removal of elements have average constant-time complexity.

                                        > Internally, the elements are not sorted in any particular order, but organized into buckets. Which bucket an element is placed into depends entirely on the hash of its key.

                                        Хеш-мапа быстрее красно-чёрного дерева на алгоритме где выпадают практически рандомные хеши и не нужна сортировка. Логично.

                                        Проще пройти по прямому адресу в массив (пусть даже в рандомное место), чем делать десяток сравнений/ветвлений (branch predictor не обрадуется).
                                        Ответить
                      • Поискал коллизии.

                        Сначала почистил базу от дублей (которые я показывал).

                        На хэше, обрезанном до 32 бит (четырёх байтов), коллизий нет. Причём можно брать как старшие 32 бита, так и младшие.

                        На хэше, обрезанном до 16 бит (двух байтов), есть коллизии. И тут самое интересное. Лидеры по количеству коллизий — нумерные петухи и антибагры (до семи юзеров на хэш). Можно искать файки, тупо отсортировав базу по хэшу. Работает и со старшими 16 битами, и со младшими. А говорили, что криптографические хэш-функции обеспечивают конфиденциальность...
                        Ответить
                        • P.S. Про поиск фаек я пошутил. Там слишком много случайных коллизий. Некоторые мои петухи начинают совпадать с петухами других юзеров. Просто нумерных много, вот они и вылезают.

                          Если хэш обрезать до 24 бит (трёх байтов), то получается не более двух юзеров на хэш, причём второй чаще всего — нумерной петух.
                          Ответить
                          • > причём второй чаще всего — нумерной петух.
                            С учётом того, что нумерные петухи составляют чуть меньше джвух третьих всей пользовательской базы «ГК» — это не очень удивляет.
                            Ответить
                    • > Для базы в 68к юзеров и ключа в 128 батов особой разницы между разными мапами не будет?
                      Будет. STL-говно точно отсосёт по пирфомансу из-за большого количества индирекций, рекомендую смотреть в сторону boost::flatmap или даже кастомных (бит-)массивов*.
                      Ответить
            • То ли тоже присоединиться к вашей специальной олимпиаде...
              Ответить