1. Куча / Говнокод #27996

    0

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

    #115: https://govnokod.ru/27665 https://govnokod.xyz/_27665
    #116: https://govnokod.ru/27671 https://govnokod.xyz/_27671
    #117: https://govnokod.ru/27675 https://govnokod.xyz/_27675
    #118: https://govnokod.ru/27685 https://govnokod.xyz/_27685
    #119: https://govnokod.ru/27701 https://govnokod.xyz/_27701
    #120: https://govnokod.ru/27703 https://govnokod.xyz/_27703
    #121: https://govnokod.ru/27710 https://govnokod.xyz/_27710
    #122: https://govnokod.ru/27728 https://govnokod.xyz/_27728
    #123: https://govnokod.ru/27729 https://govnokod.xyz/_27729
    #124: https://govnokod.ru/27730 https://govnokod.xyz/_27730
    #125: https://govnokod.ru/27732 https://govnokod.xyz/_27732
    #126: https://govnokod.ru/27733 https://govnokod.xyz/_27733
    #127: https://govnokod.ru/27737 https://govnokod.xyz/_27737
    #128: https://govnokod.ru/27742 https://govnokod.xyz/_27742
    #129: https://govnokod.ru/27747 https://govnokod.xyz/_27747
    #130: https://govnokod.ru/27755 https://govnokod.xyz/_27755
    #131: https://govnokod.ru/27766 https://govnokod.xyz/_27766
    #132: https://govnokod.ru/27790 https://govnokod.xyz/_27790
    #133: https://govnokod.ru/27828 https://govnokod.xyz/_27828
    #134: https://govnokod.ru/27834 https://govnokod.xyz/_27834
    #135: https://govnokod.ru/27839 https://govnokod.xyz/_27839
    #136: https://govnokod.ru/27845 https://govnokod.xyz/_27845
    #137: https://govnokod.ru/27857 https://govnokod.xyz/_27857
    #138: https://govnokod.ru/27867 https://govnokod.xyz/_27867
    #139: https://govnokod.ru/27887 https://govnokod.xyz/_27887
    #140: https://govnokod.ru/27900 https://govnokod.xyz/_27900
    #141: https://govnokod.ru/27914 https://govnokod.xyz/_27914
    #142: https://govnokod.ru/27942 https://govnokod.xyz/_27942
    #143: https://govnokod.ru/27960 https://govnokod.xyz/_27960
    #144: https://govnokod.ru/27972 https://govnokod.xyz/_27972

    Запостил: nepeKamHblu_nemyx, 06 Февраля 2022

    Комментарии (562) 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://www.wired.com/2015/11/null/
      https://www.wired.com/story/null-license-plate-landed-one-hacker-ticket-hell/

      свжк кнчн н чт пдлть
      Ответить
      • Все забагованные штрафы на себя собрал?
        Ответить
      • Мы это вроде уже обсуждали много лет назад. Сошлись на том, что долбоёбов, которые не различают "NULL" и NULL нужно стерилизовывать.
        Ответить
    • Писатели-фантасты: роботы отнимут у людей работу, люди перестанут работать руками.

      Реальность: роботы подгоняют людей, чтобы люди быстрее работали.

      https://pbs.twimg.com/media/FKxFk8tWQAEfyEC.jpg
      Ответить
      • Какой киберпанк )))

        З.Ы. Почему номер, а не QR код? Сложнее ведь распознавать.
        Ответить
        • Чтобы Василий Игнатьевич, начальник отдела развития мог смотреть в отчет и тыкать пальцем в нужного работника на экране.
          Ответить
        • Я бы автоматизировал как раз через QR код.

          Если кто-то плохо работает, то робот щипцами берет нарушителя за башку, и выкидывает в такой вот мусоропровод специальный, а в HR автоматически открывается вакансия
          Ответить
          • Какое-то смузихлёбское решение. Какие-то ``AI'', ``QR-коды''... Вот у этого чувака ничего этого нет: https://odysee.com/@ElectroBOOM:9/extreme-workout-for-extreme-weight-loss:c
            Ответить
            • video append of 62037b failed for segment #0 in playlist 1-v1.m3u8
              Ответить
              • Это вам месть за ссылки на ``imgur'' которые у меня не работают.
                Ответить
              • А разгадка проста:
                https://isitblockedinrussia.com/?host=lbry.org
                https://isitblockedinrussia.com/?host=odysee.com
                Ответить
            • https://youtu.be/A0314QOklz8

              Интересное начинается с 1:30.
              Ответить
            • Это Адриано Челентано?
              Ответить
      • А подвигов стахановцев, когда отработавший норму меняет шапочку со своим номером на шапочку с номером сына начальника цеха, ещё не было?
        Ответить
    • В 2021 году GitHub получил и обработал 26 правительственных запросов на удаление информации соответствии с национальными законами — из России, Китая и Гонконга. Эти привело к блокировке 69 проектов. Для сравнения, в 2020 году сервис обработал 44 запроса по 44 проектам — все из России.

      В 2021 году GitHub получил 335 запросов на раскрытие информации о пользователях (на два запроса больше, чем в 2020 году). Из них 195 были связаны с повестками в суд (в 183 уголовных и 12 гражданских делах), 94 — обусловлены судебными постановлениями и 22 — ордерами на обыск. Подавляющее большинство (96,4%) этих запросов поступило от правоохранительных органов, оставшиеся 3,6% — от гражданских истцов, желающих получить информацию о другой стороне.


      Из 335 запросов GitHub раскрыл информацию по 269 из них (178 повесток, 64 судебных постановления, 22 ордера на обыск и 5 запросов, сделанных в чрезвычайных обстоятельствах). Из 269 случаев сервис уведомил пользователей только 9 раз: в 255 других случаев на это был судебный запрет.

      GitHub также 1828 раз удалил контент в соответствии с американским Законом об авторском праве в цифровую эпоху (Digital Millennium Copyright Act, DMCA). Кроме того, платформа также стала ограничивать материлы, связанные с насилием, и скрыла 4585 учётных записей в 2021 году.

      https://roskomsvoboda.org/post/github-transparency-report-2021/
      Ответить
      • У нас код оф кондакт! Мы за свободу и инклюзивность! За право человека считать себя them/they! За право каждого иметь свое мнение! За право любого диктатора требовать от нас удаление любого контента, который диктатору не нравится! Свобода, равенство, диктатура!
        Ответить
      • Ордер на обыск гитхаба? Лолшто. Там же и так все видно?
        Ответить
        • Видимо, ментам нужны логи айпишников, чтобы потом запросить информацию у интернет-провайдеров и сопоставить личность.
          Ответить
      • Интересно, а если появится страна, в которой национальная религия запрещает писать на РНР, то можно будет выпилить всё РНР с гитхаба?
        Ответить
        • Когда я стану перзидентом Грузии, я обязательно издам такой закон, и всех пыхапешников посажу в тюрьму, а гитхаб мне в этом поможет, вот увидите.

          А пидарасмуса вообще в интелоп объявлю в розыск
          Ответить
      • It's fun to live in the DMCA!
        It's fun to live in the DMCA!
        Ответить
    • Могу ли я считаться ООПблядью, если я не использую полиморфизм вообще, то есть у меня нет виртуальных методов, и классы только для инкапсуляции?
      Ответить
      • Да.
        Ответить
      • Мне на ГК сказали, что наследование не нужно, а без наследования виртуальные методы теряют смысл.
        Ответить
        • Наследовать пелементацию не нужно, а интерфейсы — разрешаем.
          Ответить
          • А как же условное приватное множественное наследование от шаблонных параметров для потенциальной экономии от одного до 8 байт посредством EBO в крестах?
            Ответить
            • Это когда даже пустой класс минимум 1 байт весит (чтобы иметь свой адрес) а если от него наследоваться, то он ничего не весит (потому что весит потомок), и потому наследованее выгоднее делегирования?

              Ладно, это кал конечно
              Ответить
            • Лучше бы разрешили структуры нулевой длины.
              Ответить
              • no_unique_address ?
                Ответить
              • guest6 опередил.
                #include <cstddef>
                #include <cstdint>
                #include <iostream>
                
                struct Foo {};
                struct Bar {};
                
                struct Baz {
                    [[no_unique_address]] Foo a;
                    int64_t b;
                    [[no_unique_address]] Bar c;
                    [[no_unique_address]] Foo d;
                    int64_t e;
                };
                
                int main()
                {
                    std::cout
                        << "Bar::a at " << offsetof(Baz, a) << std::endl
                        << "Bar::b at " << offsetof(Baz, b) << std::endl
                        << "Bar::c at " << offsetof(Baz, c) << std::endl
                        << "Bar::d at " << offsetof(Baz, d) << std::endl
                        << "Bar::e at " << offsetof(Baz, e) << std::endl;
                        
                    return EXIT_SUCCESS;
                }
                
                /* Вывод:
                Bar::a at 0
                Bar::b at 0
                Bar::c at 0
                Bar::d at 8
                Bar::e at 8
                */


                https://wandbox.org/permlink/z00vbHWAYlSGbAGu
                Ответить
                • А как теперь взять указатель на "c"?
                  Ответить
                  • > C++ attribute: no_unique_address (since C++20)
                    > Indicates that this data member need not have an address distinct from all other non-static data members of its class.
                    Ответить
                • Что это за говно и зачем это нужно?

                  И почему у d и e оффсет одинаковый, а у c и d разный?
                  Ответить
                  • А чтобы это понять, нужно почитать стандарт С++. Нужная информация находится где-то в 6.7. Memory and objects
                    Ответить
                    • Я ещё не настолько поехавший, чтобы читать стандарт "C++".
                      Ответить
                      • Перед сном.
                        Ответить
                      • А как же всё в жизни попробовать?
                        Путешествия автостопом, ночёвка на вписках, случайный секс в клубе, легкие наркотики, стандарт С++.
                        Ответить
                        • Ну как, попробовал?
                          Ответить
                          • Конечно. Как можешь догадаться из предыдущих сообщений, минимум до главы 6.7 Стандарта С++ я дочитал.
                            Ответить
                        • PHP.
                          Ответить
                          • Нет, ПХП не надо пробовать.

                            Есть вещи, с которыми лучше никогда не сталкиваться.
                            Ответить
                      • >Я ещё не настолько поехавший, чтобы читать стандарт "C++".


                        удивительное дело! Люди гордятся тем, что чего-то не знают, чего-то не читали..
                        Ответить
                  • Подсказка: у a и d не может быть одинакового оффсета.
                    Ответить
                    • Лан, я погуглил. Поля одного типа не могут иметь одинаковый оффсет. По нулевому оффсету уже есть a, потому d разместили вместе с e.
                      Ответить
                  • ты бы тред почитал сначала
                    Ответить
      • > для инкапсуляции
        Из всей тёмной триады ООП ты выбрал самую злую фичу, поздравляю.
        Ответить
        • По моему самая злая это, как раз, наследование
          Ответить
          • Наследование не позволяет дизайнить код так, чтобы его юзеры навсегда забыли о thread safety, из-за того, что любой* метод может неизвестно что неизвестно где неизвестно как мутировать, и они by design не должны об этом узнать. Неправильное наследование создаёт проблемы в основном разработчику классов, а не их пользователю, так что хуй бы с ним.

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

              И вот если вызову одновременно метод с двух потоков, то могу соснуть карамель.

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

              Кстати, как по классу понять, безопасен ли он потоково?
              Ответить
              • > Я могу менять внутренее состояниее походу работы метода, и это не будет нарушением const, потому что const про внешнее состояние же.

                Давно не пишу ничего не крестах, но вроде гарантирует:

                https://en.cppreference.com/w/cpp/language/member_functions

                > In the body of a cv-qualified function, *this is cv-qualified, e.g. in a const member function, only other const member functions may be called normally. (A non-const member function may still be called if const_cast is applied or through an access path that does not involve this.)
                Ответить
                • Проблема в том, что в это время в соседнем треде с тем же объектом могут работать не const методы. Т.е. const к потокобезопасности имеет чуть менее чем никакое отношение. Равно как и volatile.
                  Ответить
                  • s/потокобезопасность/иммутабельность/. Последнее имеет опосредованное отношение к первому.
                    Ответить
                    • Хорошо, такой вопрос.


                      У меня внутри класса приватное поле с деревом. Это дерево снаружи переодически читают.

                      Все методы const, потому что его только читают: не правят.

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

                      Должен ли я метод "searchInTree" сделать НЕ const?

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

                      То есть снаружи, семантически, я как-бы const, а внутри не const.

                      Впорос: иммутабелен ли мой класс?
                      Ответить
                      • Ну подопрёшь внутренней лочкой чтобы закосплеить иммутабельность... Или локфри говно какое-нибудь там сделаешь.
                        Ответить
                        • Лочка не бесплатна.

                          Почему я обязан что-то подпирать? Разве я обещал потокобезопасность?

                          Собссно, вопрос был в том, можно ли считать мой класс иммутабельнвм
                          Ответить
                          • > разве я обещал

                            Откуда я знаю? Я поэтому и пишу в соседнем комменте, что если все const то есть ВЕРОЯТНОСТЬ что все иммутабельно. Но дальше надо лезть в доку или код.
                            Ответить
                      • >Впорос: иммутабелен ли мой класс?

                        Нет. Т.к. его внутренний стейт меняется.
                        Но мне, как пользователю, вообще лолжно быть похуй.

                        Борманд выше верно сказал: оберни лочкой или пометь что твоё говно непотокобезопасное.
                        Ответить
                      • Вы меня неправильно поняли про потокобезопасность, разверну мысль. Мой поинт был в том, что заставлять программиста явно работать с состоянием позволяет с большей вероятностью её достичь. А не то, что какое-то ключевое слово её как-то магически гарантирует.
                        Поэтому в ФП чуть сложнее обосраться с ней, т.к. стейт очень явный и его нядо постоянно ручками массировать.
                        Инкапсуляция же — это своего рода анти-ФП, т.к. она буквально ставит перед собой противоположную задачу, всячески скрывая стейт.

                        > То есть снаружи, семантически, я как-бы const, а внутри не const.

                        Типичные охуительные ООП истории про какую-то семантику... Если состояние меняется чисто "синтаксически", значит не const, вот и вся наука.
                        Ответить
                        • >сли состояние меняется чисто "синтаксически", значит не const, вот и вся наука.


                          То есть у меня был обычный const метод, потом я решил сделать свой хак внутри класса, и вынужден снять const поменяв его интфейс и порушив API?
                          Ответить
                          • > То есть у меня был обычный const метод, потом я решил сделать свой хак внутри класса, и вынужден снять const поменяв его интфейс и порушив API?

                            Не ломай API, а помещай свою охуенную балансировку в новый метод myTree_real_fast_search_in_tree.
                            Ответить
                          • Да делай, делай. Только сохрани семантику полностью, чтобы никому ничего не сломать. Включая тех, кто по наивности посчитал твой класс за иммутабельный и у них всё работало.
                            Ответить
                            • Поэтому код нужно делать таким, чтобы незаявленные фичи сразу не работали. Читаешь объект с двух потоков, хотя он не объявлен как потокобезопасный? На тебе exit(EXIT_FAULURE) и патч Бармина вдогонку.

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

                                  Но проблема, когда ты думаешь, что «делаем Х, а потом, когда сделаем Z, переделываем на Y для пирфомансу, поведение не изменится», а потом оказывается, что переделать не получится, так как питухи уже полагаются на незадокументированное поведение, стоит остро.
                                  И затем с одного стула кричат, что код непирфомансный, с другого кричат чтобы им код не ломали.
                                  Ответить
                                • Можешь просто заранее заявить, что класс не потокобезопасен.

                                  А потом с чистой совестью обоссать каждого, кто юзает его из джвух тредов.
                                  Ответить
                                  • В Java проблему потокобезопасности решили раз и навсегда, кстати: https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html
                                    Нет потоков — нет проблемы. Зато всё семантически инкапсулировано.
                                    Ответить
                                    • Кресты тоже могут эту проблему решить в будущем:
                                      https://en.cppreference.com/w/cpp/language/transactional_memory#Synchronized_blocks
                                      Ответить
                                      • Ключевое слово desynchronized уже ввели, или оставили до следующего стандарта?
                                        Ответить
                                      • Кстати synchronized в «Йажа», вопреки кудахнанью сектантов-оопухов на корню херит эту самую инкапсуляцию, потому что неявной лочкой выступает this.

                                        Если на этом объекте решится синхронизироваться кто-то другой будет беда.
                                        Ответить
                                    • > В Java проблему потокобезопасности решили раз и навсегда

                                      > Нет потоков — нет проблемы

                                      Йажа — хуй-ня. С таким паттерном в программе легко могут возникать дедлоки.

                                      Именно поэтому я за «PHP», где эту проблему даже не создавали.
                                      Ответить
                                  • > заявить, что класс не потокобезопасен.

                                    А потом куча лалок не читая доку, «оптимизируют» SimpleDateFormat в статическое поле, форматируя им YYYY-MM-dd.
                                    Ответить
                        • >Инкапсуляция же — это своего рода анти-ФП, т.к. она буквально ставит перед собой противоположную задачу, всячески скрывая стейт.

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

                          Выходит что в Сишке зайчатки Ъ ФП, потому что там стейт всегда открыт.
                          Ответить
                          • > Разве мудульность это плохо?

                            Модульность тут совершенно ортонональна. Инкапсуляция, как мы видим, подсказывает guest'ы охуенные идеи про "засунуть лочку в lookup", которые мне убьют перфоманс на параллельные lookup'ы.
                            Ответить
                            • > про "засунуть лочку в lookup", которые мне убьют перфоманс на параллельные lookup'ы

                              Если в процессе lookupa происходит внутренняя мутация дерева, то без лочки/спинлока параллельные lookup'ы просто развалят дерево.
                              Ответить
                              • > Если в процессе lookupa происходит внутренняя мутация дерева, то без лочки/спинлока параллельные lookup'ы просто развалят дерево.

                                О чём я и говорю. Такой мудабельный лукап в ФП стиле будет выглядеть либо как

                                {Val, T'} = lookup_and_rebalance(T)

                                , если структура иммутабельна, либо как

                                lookup_and_rebalance :: tree -> ST tree val

                                если она мутабельна, и тогда для получения r/o ссылки, которую можно раздать по потоками, мне нужно явно взять лочку. А инканусация призывает все эти тонкости замести под ковёр, и не дай бог юзер их увидит.
                                Ответить
                                • >мудабельный лукап в ФП стиле будет выглядеть либо как
                                  > {Val, T'} = lookup_and_rebalance(T)

                                  Короче, COW.
                                  В принципе в ООП мире пишут и так.
                                  Ответить
                                  • > Короче, COW.

                                    Не, тут, насколько я понимаю, суть не в COW, а в том, что стейт или явно возвращается или его мутабельность подчёркивается монадой. В обоих случаях видно, что функция его патчит и можно задуматься о пирфомансе и тредах.

                                    В случае с ООП эту фишку пытаются скрыть и тормоза/краши вылезают неожиданно.
                                    Ответить
                                    • >а в том, что стейт или явно возвращается
                                      В ООП это подчёркивается интерфейсом методов, которые при мутации возвращают новое значение.

                                      T mutate(T old);

                                      Но в случае ООП благодаря инкапсуляции возможен ряд оптимизаций, когда COW может иногда возвращать this, если объект не поменялся.
                                      Или ранее аллоцированное значение из пула, или подстроку/подсписок.

                                      > В случае с ООП эту фишку пытаются скрыть и тормоза/краши вылезают неожиданно.

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

                                        >T mutate(T old);
                                        выяглидт как chain/
                                        Ответить
                                      • > Но в случае ООП благодаря инкапсуляции возможен ряд оптимизаций, когда COW может иногда возвращать this, если объект не поменялся.

                                        Где здесь COW, 3.14159265? Изменение термов в ФП делается тупо путём манипуляций со ссылками.

                                        > когда пытаются скрыть его ленивость.

                                        У меня в ФП нет никакой ленивости. Если не захочу, конечно.
                                        Ответить
                                        • > Где здесь COW, 3.14159265?

                                          Ну а что такое T и T'? Приняли на вход, один объект (T), вернули результат поиска и мудифицированную копию объекта (T').

                                          > Изменение термов в ФП делается тупо путём манипуляций со ссылками.

                                          Поясните мысль.
                                          Ответить
                                          • в фп нет стека, очевидно же
                                            Ответить
                                          • > Ну а что такое T и T'? Приняли на вход, один объект (T), вернули результат поиска и мудифицированную копию объекта (T').

                                            Давай начнём с того, что такое COW.

                                            Foo foo = ...;
                                            Foo bar = foo.copy(); // Мы _якобы_ копируем foo в bar, но на самом деле 
                                                                  // создаём ссылку, а копирование откладывается 
                                            bar.read(1);          // Всё ещё читаем по ссылке
                                            bar.write(1, 5);      // А вот теперь для сохранения сёмантики мы должны 
                                                                  // выполнить отложенное копирование, и потом записать в копию


                                            Т.е. вся эта коровушня имеет смысл только для мутабельных переменных.
                                            В ФП большинство вещей иммутабельны, следовательно ссылки остаются ссылками, и никакого копирования нет. Код вида
                                            T' = foo(T)

                                            не меняет Т, а просто создаёт новый терм, который (возможно) содержит ссылку на T, либо на какой-то иной терм, на который ссылается Т.
                                            Ответить
                                            • > T' = foo(T)
                                              > не меняет Т, а просто создаёт новый терм, который (возможно)

                                              Ну я так и написал точно то же.
                                              >T mutate(T old);

                                              Foo foo = ...;
                                              bar.read(1);          // Всё ещё читаем по ссылке
                                              bar = bar.withSomething(1, 5);   //копирование здесь

                                              Никаких явных foo.copy().
                                              Ответить
                                              • > Ну я так и написал точно то же.

                                                Лол, то есть ты постоянно набрасываешь haskell, даже примерно не представляя, как он работает? Нет, не то же самое.
                                                Во втором примере нет ни изменения, ни копирования.
                                                Представь, что в нём T и T' — односвязные списки, а функция foo добавляет к T одну cons-ячейку. Т при этом не копируется и не изменяется, а T' — новый объект с какими-то новыми данными (не копией T), который в каком-то месте содержит указатель на Т. Всё.
                                                Ответить
                                                • > Лол, то есть ты постоянно набрасываешь haskell, даже примерно не представляя, как он работает

                                                  Да!

                                                  > Т при этом не копируется и не изменяется, а T' — новый объект с какими-то новыми данными

                                                  Ну так и исходный bar в моём примере тоже не изменяется.
                                                  withSomething создаёт его копию (или не создаёт, если там уже есть такие данные) и возвращает обратно...
                                                  Потому и bar =
                                                  Ответить
                                                • > то есть ты постоянно набрасываешь на $FOO, даже примерно не представляя, как он работает?


                                                  Вроде бы 90% всех набросов в Интернете ровно так и устроены
                                                  Ответить
                                                • Расскажи про шеллоу и дип копирование.

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

                                                    А вот это грамотный подход к троллингу функциональщиков, сразу с козырей. Массивов-то у них нормальных нет именно из-за этой ссылочной прозрачности.
                                                    Ответить
                        • > Инкапсуляция же — это своего рода анти-ФП

                          Именно поэтому я особенно угораю со Скалки, которая пытается объединить ООП (aka анти-ФП) с ФП. Это как пытаться объединить солёные огурцы с молоком.
                          Ответить
                          • Я ел с молоком и солёные огурцы, и свежие. Мне норм, расстройства пищеварения не было.

                            Не понимаю, почему другие так боятся такого сочетания.
                            Ответить
                            • > Я ел с молоком и солёные огурцы, и свежие.
                              Зачем?
                              Ответить
                            • > Я ел с молоком и солёные огурцы, и свежие. Мне норм, расстройства пищеварения не было.

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

                              Но «Scala» всё-равно уродливый и крайне неуклюжий франкенштейн. Ни уму, ни перцу.
                              Ответить
                          • Кстати, у болгар есть блюдо «таратор» — холодный суп типа окрошки, только состоит из огурцов, залитых кефиром.
                            Ответить
                            • Окрошка кстати на кефире или сыворотке или на квасу?
                              Ответить
                            • Звучит как говно. В окрошку поприличнее винегрет идет, а огурцы это просто вода.
                              Ответить
                • Ну и да, const cast и mutable.
                  Ответить
                • Во-первых есть
                  mutable - permits modification of the class member declared mutable even if the containing object is declared const.

                  Во-вторых что такое "const функция"? Имею ли я право в ней записать что-то в файл?
                  Ответить
                  • > что такое const функция

                    Всего лишь способ прикрутить const к неявному аргументу this... Больше никакой магии в нём нет.
                    Ответить
                    • Именно.

                      И ничто не мешает мне в из этой функции записать что-то в файл, например. Или отправить пакет по сокету.

                      И что будет, если я в один и тот же файл начну в два потока писать?

                      Ну то есть const-то я const, а вот что такое "константность" это уже вопрос семантики. Хочу -- буду файл считать частью своего состояния. Хочу -- не буду.


                      То есть даже вызывая чисто константные методы у объекта я не могу быть уверенным, что могу это с десяти потоков делать
                      Ответить
                      • Ну я у обёрток над файлом write обычно делаю не const. Да и read. Т.к. хоть циферка хендла и не меняется, но буфер и курсор внутри хендла меняются, т.е. состояние объекта другое.
                        Ответить
                        • Если мой класс умеет слать по сети пакет, то const ли метод "send"?

                          Хоть циферка хендла сокета и не меняется, но буфер и курсор внутри сокета меняются, т.е. состояние объекта другое.
                          Ответить
                          • Нет. Как мне кажется, "активные" методы вообще никогда не const.

                            Тем более там обычно один хрен что-то обновляется в состоянии.
                            Ответить
                            • То есть const это аксессоры/геттеры и всякие "чистые" функции?
                              Ответить
                              • Мне кажется да. Но есть и другие мнения.
                                Ответить
                                • Понятно.
                                  А что думаешь про
                                  https://govnokod.xyz/_27996/#comment-796966
                                  ?
                                  Ответить
                              • Не в тему, но давно интересовал вопрос - нахуй нужны "аксессоры/геттеры"? Почему нельзя тупо взять и изменить/прочесть само свойство класса? Зачем раздувать оный на несколько экранов функциями ни о чём?
                                Ответить
                                • Вот именно поэтому.

                                  Говорится что в теории, схема хранения внутренней питушни класса может поменяться, и вместо тривиального
                                  гетигп фоо;
                                  там может появиться необходимость добавить какие-то лочки, битовую магию, логгирование итд.

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

                                  Однако *на практике* за много лет я такое почти не встречал.

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

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

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


                                      Кажется, в современном ЯПе это бы должно решаться инструментированием кода, а не ручным впиндюриванием логинга.

                                      Была же когда-то идея аспектов. Но потом кто-то сказал, что аспекты это плохо, и поскольку в Java мире иметь своего мнения не принято, а принято повторять мнение Гуру, то все джавушки тоже сказали "аспекты это плохо" и врчную пишут логирование в геттерах
                                      Ответить
              • > как по классу понять

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

                А в целом только по документации или коду, конечно.
                Ответить
              • > Кстати, как по классу понять, безопасен ли он потоково?
                Я больше скажу: нельзя даже пытаться «понять», потокобезопасен ли класс.

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

                Использовать класс в не потокобезопасном контексте можно только тогда, когда в документации явно написано, что класс потокобезопасен. Не написано явно — ставь лочки, благо что времена, когда лишняя критическая секция ТОРМОЗИЛА, давным-давно прошли.
                Ответить
                • > благо что времена, когда лишняя критическая секция ТОРМОЗИЛА, давным-давно прошли.

                  Это смеловатое заявление. Если у меня 64 ядра, а я выполняюсь в один поток, то может быть теряю увесистую дозу перформанса, не?
                  Ответить
                  • Если у тебя параллельность всего алгоритма зависит от единственного класса, про который явно не сказано, что он потокобезопасный, то у тебя очень большие проблемы: твоя программа точно разъебётся, когда авторы либы сделают класс потокоопасным. Не надо так делать.

                    Ну и в первую очередь я всё же имел в виду оверхед, который боялись сто лет назад.
                    Ответить
            • >любой метод может неизвестно что неизвестно где неизвестно как мутировать, и они by design не должны об этом узнать
              В принципе можно все поля на каждом уровне наследования выносить в private, а работать через акцессоры/мутаторы обёрнутые в лочки.
              Но тогда какой смысл в мудификаторах вроде friend и protected?

              > constыли
              Синтаксиально!
              Ответить
      • ООП это вообще хер знает что, так что можешь как хочешь считать. Вот с ФП более-менее понятно, что это о том, что есть функции, которые не имеют побочных эффектов, и что можно делать какие-то там блядь рекурсивные схемы. (ФП это не про хитровыебанные типы, если что. Программирование через типы и ФП это разные вещи. Но в функциональной хуйне без сайд-эффектов нахуярить сложных и полезных типов (чтоб через них еще что-то доказывалось) можно намного легче, чем в императивщине)
        А ООП это какая-то ебаная неведомая херня с кучей баззвордов, полиморфизм-поихуизм какой-то, абстракции-абасракции, наследования-хуедования, классы какие-то блядь
        Ответить
    • Как напомнило ведомство, министр Блащак в феврале 2019 года утвердил «Концепцию организации и функционирования Войск обороны киберпространства». Они «предназначены для ведения всего спектра действий в киберпространстве — обороны, разведки и активно наступательных действий», информировало Минобороны.

      -----------



      Что это такое, как будет работать? Это солдаты будут защищать тылы добавляя в код mysql_real_escape и закрывая ssh на 22-м порту с admin/admin?
      Ответить
    • Почитал ваши срачи, и понял, что хорошо тому живется, у кого нету никаокго ООП.

      со структурами всё просто и понятно. Вот тупые структуры, вот функции для работы с ними. Ниакой тебе "семантики" структуры
      Ответить
      • >Почитал ваши срачи
        https://gcode.space/#!/search?q=ООП&user=superhackkiller1997

        Читай Царя-батюшку.

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

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


        ООП-мразь заминусовала.
        Ответить
    • давно не видел
      https://youtu.be/37SodCJn9Co
      Ответить
    • Есть у нас фронт-энд говно на втором ангуляре. Мне было велено высосать список всех библиотек и их лицух, чтобы опубликовать на сайте, дескать мы используем такие-то либы и их лицензии.

      Ангуляр сделал это за меня (он вообще самостоятельный парень), насосал порядка трех сотен либ с лицензиями (в основнмо MIT и BSD клаус 3), но когда я увидел там "pad-left", со мной случился припадок
      Ответить
      • > но когда я увидел там "pad-left", со мной случился припадок

        Это ещё ничего.
        Если бы там был isTen от pethu...
        Ответить
    • Не помню, было или нет:
      C:\Users\putyh>nslookup ya.ru
      ╤хЁтхЁ:  UnKnown
      Address:  192.168.43.170
      
      Не заслуживающий доверия ответ:
      ╚ь :     ya.ru
      Addresses:  2a02:6b8::2:242
                87.250.250.242
      Ответить
      • — Нет
        — Не заслуживающий доверия ответ!
        Ответить
        • хЁтхЁ
          Ответить
          • Томас Хетхе родился в 1964 году в Трайсе недалеко от Гисена. Изучал немецкий язык и литературу, философию и кинематограф в университете имени Иоганна Вольфганга Гёте во Франкфурте-на-Майне, где в 1999 году получил степень доктора философии. Путь Хетхе до признанного представителя литературного авангарда был стремительным. Тема телесности, насилия и языка объединяет его произведения, среди которых романы,
            Ответить
      • Авторитетный ответ -- это когда сам хозяин зоны отвечает?
        Ответить
      • Кодировка зависит от номера билда Windows и от установленных обновлений. От версии утилиты, короче. В некоторых нормально, а некоторые сломаны.

        Если сделать chcp 65001, она напишет по-английски или вообще вместо локализованного текста выведет пробелы.
        Ответить
        • Не используйте русский виндуос пожалуйста никогда
          Ответить
    • https://en.wikipedia.org/wiki/Recursive_islands_and_lakes

      Contents:
      1 Recursive islands
      1.1 Islands in lakes
      1.2 Islands in lakes on islands
      1.3 Islands in lakes on islands in lakes
      1.4 Islands in lakes on islands in lakes on islands
      1.5 Islands in lakes on islands in lakes on islands in lakes
      2 Recursive lakes
      2.1 Lakes on islands
      2.2 Lakes on islands in lakes
      2.3 Lakes on islands in lakes on islands
      2.4 Lakes on islands in lakes on islands in lakes
      Ответить
      • Море
        На море остров
        На острове пальма
        На пальме клоп сидит, и видит
        Море
        на море остров
        На ос
        Ответить
      • Прикольно. В Канаде куча таких озёр-островов.
        Ответить
      • Штеуду взять на заметку.
        Ответить
    • Роскосмос представил макет антропоморфного робота «Теледроид»:

      https://youtu.be/J6rWoPzXI7Y

      Официальный канал «Роскосмоса». ТАСС и РИА «Новости» репостнули эту хуету.

      У меня есть вопросы к авторам видео. И вы, вероятно, догадываетесь, какие.
      Ответить
      • Да, крутой робот.

        А что за белую хреновину он крутит?
        Ответить
        • Ну что, никто не знает?
          Ответить
          • Похоже на кучку сантехнических и воздухопроводных труб, скрученных саморезами.
            Ответить
      • раньше-то роботы сами двигались
        https://www.youtube.com/watch?v=gwfo4yK0siE

        а теперь без человека не могут
        Ответить
      • Бля, у них что приводы планируется располагать в предплечье? Тогда понятно, почему нужна специально обученная обезьяна.
        Ответить
      • Чуть более продвинутый робот, чем у Илона Маска: https://www.youtube.com/watch?v=rmkFrv80b7Y
        У этого мимика есть и лицо.
        Ответить
      • Это, кстати, уже второй раз.

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

      Если открытый рекурсивный DNS поднять, через меня же ддосить кого-нибудь начнут?
      Ответить
      • Какие-то конкретные DNS запросы, или запросы про любой домен?
        Ты даже примерно не знаешь IP клиентов? Сеть может быть? Поднять IPSec на них можешь?

        Если ты сделаешь очередной 8.8.8.8, то конечно тебя будут абъюзить. Вот прямо класть тебя DDoSом смысла нет: бабла с этого не поднимешь, а хакер нычне меркантильный, но всё равно зачем тебе обслуживать чужие немытые запросы каких-то незнакомых людей?
        Ответить
        • Надо свой домен юзать с мобилки и рекурсия чтоб остальной инет не поломать, а "немытые запросы от каких-то незнакомых людей" не хочется обслуживать.
          Ответить
          • Почему не поднять честный DNS только для своего домена? Ты этот домен не покупал, что ли?

            На мобилке можешь поднять VPN
            Ответить
        • ЗЫ. гк опять в эксепшоны что-то падает
          Ответить
      • По-моему всем пофиг на DNS... Какой профит из него можно извлечь?
        Ответить
        • Можно позадавать ему запросы типа "что-нить.local" и попытаться поискать локалку. Можно посувать туда всяких команд для передачи зоны. В конце концов его можно попытаться поломать, и сделать RCE от его имени. Я бы в любом случае не хотел, чтобы моим сервисом кто-то без разрешения пользовался.
          Ответить
          • Но хотя правда поднятие своего DNS от всего этого не спасет.. Но можно арендовать его у провайдера
            Ответить
          • Ну тогда как и советуют -- VPN до сервака.
            Ответить
          • И запросами .arpa проверить на спецпроект ЦРУ.
            Ответить
    • Это в "хрюкни"?

      Россиянин убил женщину, и бросил её тело на съедение свиньям
      Ответить
      • Будет забавно, если это два разных случая

        https://govnokod.ru/27870#comment761052
        Ответить
    • кокококо скала такая удобная кокококо лишена всех проблем джавы и сделана для людей кокококо val из коробки

      реальность:

      https://docs.scala-lang.org/tutorials/FAQ/initialization-order.html

      WHY IS MY ... VAL NULL?

      That's it, вы можете сделать val x: String = "x", и при обращении к нему словить null. В языке, который nullability типа не признает.

      Дальше еще лучше:

      final val x3 = "goodbye"


      final val,
      final val,
      final val.

      upd. lazy val решает проблему. Конструкция, которая должна только усложнить ситуацию, на самом деле её нивелирует. Фантастика.
      Ответить
      • То есть, я могу сделать класс, проинициализировать поля, запустить код во время инициализации, который будет от этих полей зависеть, и всё будет работать.

        Потом кто-то унаследуется и перегрузит значение поля, и после этого мой _оригинальный_ код будет использовать не новое значение, не старое, а просто навернётся с null pointer exception?

        И эти люди будут что-то мне говорить про инициализацию объектов в крестах.
        Ответить
        • В джаве проблема с нуллом при циклической иняциализации всегда была, емнип. Скалка просто унаследовала.
          Ответить
          • В джаве при указании final-проперти такой хуйни не будет, она будет обязана иметь значение. Там даже компилятор запрещает всякую хурму типа объявления зависимой константы до её зависимости или вызова родительского/соседнего конструктора не первым стейтментом в методе.
            Ответить
            • У меня вполне получалось на статик файналах петлю сделать, емнип. Да, видно было как файнал сначала нулл, а потом принимает значение.
              Ответить
              • у тебя другая джава просто
                Ответить
              • Но тут ведь не статики, с которыми у многих языков проблемы. Тут сраные константы в сраном классе, которые заногго инициализируются при создании каждого сраного объекта.

                В Джаве такой хуйни нет (там тупо перегрузить поле нельзя, нужно менять значение в конструкторе)
                Ответить
                • Побег из конструктора в джаве ещё был. Так что файналы никогда не были файналами.
                  Ответить
                  • Он был в условиях многопоточности, нет?
                    Ответить
                  • Это когда ссылку на this передаётся наружи и её начинают дёргать другие потоки?

                    Но тут однопоточный код, где код перестаёт работать, потому что "оптимизация инициализации" просто выкидывает значение, с которым успешно работали до этого.
                    Ответить
                    • /* package whatever; // don't place package name! */
                       
                      import java.util.*;
                      import java.lang.*;
                      import java.io.*;
                      public class Main {
                          private final String foo;
                       
                          public Main(String foo) {
                              doAll(this);
                              this.foo = foo;
                          }
                       
                          public String getFoo() {
                              return foo;
                          }
                          static void doAll(Main leakOfThis) {
                              System.out.println(leakOfThis.getFoo().toLowerCase());
                          }
                          public static void main(String[] args) {
                              new Main("hello");
                          }
                      }

                      https://ideone.com/C0YrlR
                      Ответить
                      • Это же просто обращение к полю до присваивания ему значения. В принципе логичное поведение.

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

                          Но есть еще один прикол, про который говорил иканус
                          class Parent {
                              protected final String foo;
                          
                              public Parent(String foo) {
                                  init();
                                  this.foo = foo;
                              }
                              protected void init() {
                                  
                              }
                          }
                          
                          public class Main extends Parent {
                          
                              public Main(String foo) {
                                  super(foo);
                              }
                          
                              @Override
                              protected void init() {
                                  System.out.println(this.foo.toLowerCase());
                              }
                          
                              public static void main(String[] args) {
                                  new Main("a");
                              }
                          }

                          https://ideone.com/qgZZKY
                          Ответить
            • > В джаве при указании final-проперти такой хуйни не будет

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

              Сделал NPE на стасик финалах:
              https://ideone.com/h9Akn1
              class Ideone
              {
                  final static Ideone BUGOR = new Ideone();
                  final String s="";
                  final static String lalka=null;
              
               
                  public String concat() {
                      return lalka.trim()+s;
                  }
               
                  public static void main(String[] args) {
                      System.out.println(BUGOR.concat());
                  } 
              }
              Ответить
              • Так ты ж в null самостоятельно инициалзируешь. Тут же вся беда в том, что инциализируешь не нуллом, а получаешь всё равно нулл.
                Ответить
                • Пардон, хотел упростить а получилась хуйня.
                  class Kakoi 
                  {
                      final static Ideone fuck = new Ideone();
                      
                      public enum Bagor 
                      {
                          ___(fuck);
                          Bagor(Ideone l) { }
                      }
                  
                      public static class Lalka 
                      {
                          final Bagor shock;
                  
                          Lalka(Bagor b) {
                            this.shock = b;
                          }
                      }
                  
                      final static Lalka JAVA = new Lalka(Kakoi.Bagor.___);
                  }
                  
                  class Ideone 
                  {
                      public static void main(String[] args) 
                      {
                          System.out.println(Kakoi.Bagor.___);
                          System.out.println(Kakoi.JAVA.shock.toString());
                      }
                  }
                  https://ideone.com/2Wor3s
                  Ответить
        • Мякотка в том, что у меня и вовсе вызывался метод, пытающийся обратиться к val, а не прямо как у них здесь, в теле класса. Скорее всего, так или иначе это была фаза инициализации (скажем так, я писал адаптер, который наследует какую-то хуйню, о которой я и знать не хочу, и за счет этого является энтрипоинтом/аналогом main). Любой адекватный язык вообще не позволит в единственном треде вызвать метод до инициализации полей.
          Ответить
          • Я когда-то очень давно, когда ещё изучал Йажу, сделал код и долго не мог понять в чём же ошибка.

            Обращался к полю родителя из конструктора потомка до инициализации этого поля в super().

            И тоже было NPE.

            В Йажа на самом деле несколько способов сломать final.
            Ответить
          • Вот, реальный пример NPE на final:
            import java.util.*;
            import java.lang.*;
            import java.io.*;
            
            class A
            {
            	public A()
            	{
            		System.out.println(getVal().toString());
            	}
            	Integer getVal() { return 12;}
            	
            }
            class B extends A
            {
            	final Integer i;	
            	public B()
            	{
            	    super();
            	    i=42;
            	}
            	Integer getVal(){ return i;}
            
            }
            class Ideone
            {
            	public static void main (String[] args)
            	{
            		new B();
            	}
            }
            
            https://ideone.com/l9dxHL

            Господи, какой заедушный язык.
            Ответить
            • В Йаже все методы виртуальные, поэтому super() вызовет getVal не из A, а из B, а к моменту вызова поле i ещё не инициализировано. Так?
              Ответить
              • Да.

                В оригинальном коде было что-то вроде:
                T abstract  doSomething();

                Который я пытался вызывать из родительского конструктора.

                Но самый пиздец не в этом. А в том, что Fike говорит что компилятор *мешает* ошибиться. Запрещает инициализацию до вызова super.

                > В джаве при указании final-проперти такой хуйни не будет, она будет обязана иметь значение.
                > Там даже компилятор запрещает всякую хурму типа объявления зависимой константы до её зависимости или вызова родительского


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

                Так если бы я мог поменять местами вызов super и присваивание, всё было ок.
                У меня было бы инициализированное i к моменту вызова метода:
                public B()
                {
                	    i=42;
                	    super();
                }

                Но кек мы все знаем из рекламных буклетов "умный" компилятор Java, предотвращает ошибки ещё на этапе компиляции.

                И не даёт прогаммисту написать неправильный код. Потому отлаживая программы на Java разработчик тратит на 37% меньше времени.
                Ответить
                • Инетресно кстати, что крестокомпилятор требует ЛИБО инициализации всех полей ДО вызова конструктора либо НЕ инициализации их вовсе (и тогда он сам)

                  Нельзя сделать

                  doAll(this);
                  this->petuh = 12;

                  если petuh const


                  Это не позволяет делать leak of this в крестах)
                  Ответить
                  • Позволяет. В условиях многопоточности передача this наружу — практически гарантированное UB, потому что возможно обращение к объекту до окончания инициализации.

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

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

                          В коко даже завезли сахар типа
                          val petuh = Petuh().apply {
                            kuratnik += this
                          }
                          Ответить
                        • Ну воспроизведение менее стабильное с тредами, да.

                          Но бага то в протекании this из конструктора, а не в тредах.
                          Ответить
                          • Поэтому нельзя передавать this из консруктора.
                            Если хочется передать, сначала создавай, потом передавай.
                            Фабрики для кого придумали?
                            Ответить
                            • ГК -- это место, где люди с одинаковым мнением могут поспорить друг с другом.
                              Ответить
                • Вызов виртуальных методов в конструкторе/деструкторе... Ну такое.

                  В крестах это иногда вообще печально заканчивается pure virtual function call'ом.
                  Ответить
                  • В джавке вызов pure virtual не скомпилица, к щастью.

                    Вообще есть правило: в конструкторе вызваать только final методы
                    Ответить
                    • В крестах напрямую он тоже не компилится. Но косвенно через другой метод вполне так падает. Я думаю в джаве тоже?
                      Ответить
                      • Наскока я понимаю, в крестах проблема в том, что во время работы конструктора родителя, у тебя еще нет доступа к методам, реализованным в потомке, потому что потомок еще не создан, и если запутать компилятор, то можно получить дупу. Типа так
                        class Parent
                        {
                        public:
                        	Parent();
                        	void Foo()
                        	{
                        		this->Bar();
                        	}
                        	virtual void Bar() = 0;
                        };
                        
                        Parent::Parent()
                        {
                        	this->Foo();
                        }
                        
                        
                        class Child: public Parent
                        {
                        public:
                        
                        
                        	void Bar() override
                        	{
                        		
                        	}
                        };
                        
                        int main()
                        {
                        	Child c;
                        }


                        В джавке же у тебя вызовется метод потомка, что конечно тоже тупо, потому что потомок еще не инициализирван
                        abstract class  Parent {
                            Parent() {
                                foo();
                            }
                            abstract void foo();
                            void bar() {
                                foo();
                            }
                        }
                        
                        public class Main extends Parent {
                        
                            private final String name;
                            Main() {
                                    this.name = "AAA";
                            }
                        
                            @Override
                            void foo() {
                                System.out.println(this.name.toLowerCase());
                            }
                        
                            public static void main(String[] args) {
                                new Main();
                            }
                        }


                        Оба хуже.

                        Потому что наследование реализации -- кал
                        Ответить
                        • А всё дело в наседовании. Это — говно.

                          Золотые, бессмертные строки Вилли Токарева как нельзя лучше подходят к моменту:
                          The syntax might seem much sweeter
                          Where objects and subtypes play
                          But frills like inheritance
                          Will only get in the way!
                          
                          Admire C's simple landscape
                          Efficiently dangerous
                          No templates or fancy pitfalls
                          ...like Java and C++
                          Ответить
                        • А, понятно, джавка vmt не апгрейдит по ходу создания объекта. Он сразу рождается с полным типом.
                          Ответить
                          • Я вообще не знаю к стыду сказать, как vtable реализован в JVM.

                            В крестах там сначала vtable на папу показывает, потом на сына, верно?

                            Вероятно, в jvm она всегда показывает на сына
                            Ответить
                            • > В крестах там сначала vtable на папу показывает, потом на сына, верно?

                              Это детали реализации, зависящие от компилятора.

                              https://alschwalm.com/blog/static/2016/12/17/reversing-c-virtual-functions/
                              > Most virtual function implementation details are not standardized and can vary from compiler to compiler.
                              Ответить
                              • Надо поискать в стандарте пункт, который описывает именно это поведение: при работе конструктора родителя методы потомка еще недоступны.

                                Оно довольно интуитивное, но наверняка есть пункт
                                Ответить
                              • Да, но конкретно этот момент "виртуальный вызов из конструктора/деструктора приземляется на метод текущего объекта, а не финального потомка", имхо, должен быть в стандарте.

                                Может быть там и не будет про vmt, но сам принцип надо поискать.
                                Ответить
                                • 11.9.5/4
                                  Member functions, including virtual functions ([class.virtual]), can be called during construction or destruction ([class.base.init]).
                                  When a virtual function is called directly or indirectly from a constructor or from a destructor, including during the construction or destruction of the class's non-static data members, and the object to which the call applies is the object (call it x) under construction or destruction, the function called is the final overrider in the constructor's or destructor's class and not one overriding it in a more-derived class.
                                  Ответить
                                  • >the function called is the final overrider in the constructor's or destructor's class and not one overriding it in a more-derived class.

                                    пасибо
                                    Ответить
                        • Именно поэтом я за Си - там нет никаких "классов", "методов" и "конструкторов".
                          Ответить
                          • Против «Си» может быть только уж совсем клинический идиот или заведомый подлец.
                            Ответить
                          • На Си писать скучно. Не нужно думать про виртуальные деструкторы, diamond problem, выбирать между паттерном "визитор" и RTTI.. Не программирование, а сплошной примитив
                            Ответить
                            • > скучно

                              Тебе там мало UB'ов?
                              Ответить
                              • UB есть и в крестах тоже. Но количество сущностей в крестах в много раз больше, разве нет?
                                Ответить
                            • > думать про виртуальные деструкторы, diamond problem, выбирать между паттерном "визитор" и RTTI

                              C++ — довольно таки примитивное, но монстровое поделие, полное исторически сложившихся нелепых нагромождений.
                              Человек, который хорошо в нем ориентируется — это хорошее зубрилко, а не хороший программист.
                              Умение героически преодолевать трудности, которые создает твой собственный инструмент, вместо того, чтобы решать непосредственно прикладную задачу, в современном мире ценится разве что только среди прыщавых сосок.
                              Работодатель же это сомнительное умение не ценит, и совершенно справедливо.
                              Ответить
                            • На С есть подход «сделай сам». Намакроёбь «методы», «наследование», напиши DSL, по которому будут генерироваться «виртуальные» функции...
                              А потом, когда это всё сломается, можно будет пирдолиться.
                              Ответить
                              • Ну это же вообще трейдофф известный.

                                Сначала все орут: давайте сделаем умную систему, которая будет делать всё сама! Смотрите, какой у нас получился XML/XSL/XPath/XQuery/IBM WebSphere/DCOM+/MS Bizztalk/SOA/WF

                                Потом оказывается, что для изучения системы нужно семь лет жизни, ее выкидывают в мусорку, и орут: смотрите, какой у нас отличный скрипт на PHP получился в три строки, главное mysql_real_escape не забыть.

                                Потом оказывается, что в системе миллион костылей, и все надо делать вручную, и колесо сансары проворачивается вновь
                                Ответить
                                • Принцип, известный как осциллятор Снаута: https://gcode.space/#!/27828#comment740214
                                  Каждая декларативная питушня рано или поздно начнёт реализовывать внутри себя императивный язык, потом кто-то придёт и заменит её на императивную реализацию, потом для неё приделают декларативную конфу, и так далее.
                                  Ответить
                              • > Намакроёбь «методы», «наследование»

                                "Методы" это всего лишь функции, которые принимают указатель на некоторое говно и что-то с ним делают (хотя иногда это тупо обычные функции, которым никакие "члены класса" не нужны). А "наследование" это вообще ненужная херня какая-то.
                                Ответить
        • > Потом кто-то унаследуется и перегрузит значение поля, и после этого мой _оригинальный_ код будет использовать не новое значение, не старое, а просто навернётся с null pointer exception?

          Может быть ещё хуже, программа не будет валиться с ошибкой.
          Она будет спокойно работать с ошибкой, из-за порядка инициализации:
          import java.util.*;
          import java.lang.*;
          import java.io.*;
          
          class Ideone
          {
              static final Ideone BUGOR = new Ideone();
              final int i;
              static final int b = 42;
          
              Ideone() {
                  i = b - 25;
              }
          
              public int suuka() {
                  return b;
              }
          
              public static void main(String[] args) {
                  System.out.println(BUGOR.suuka());
              } 
          }
          https://ideone.com/8z5z45
          Ответить
      • > final val

        Зачем? Зачем?
        val же сам по себе подразумевает final.

        > кокококо скала такая удобная кокококо лишена всех проблем джавы и сделана для людей кокококо val из коробки

        Сектантская пропаганда, сер.
        В реальности в Скале есть *все* проблемы Йажи вдовесок к проблемам создаваемым новыми фичами языка.
        Ответить
    • Хорошо, с наследованием разобрались. А как вам такое?

      import java.util.*;
      import java.lang.*;
      import java.io.*;
      
      class Ideone
      {
          static final Ideone BUGOR = new Ideone();
          
          final int i;
          final int j;
          
          static final int b = java.util.Calendar.getInstance().get(Calendar.YEAR);    
          static final int a = 42;    
      
          Ideone() {
              i = a;
              j = b;
          }
      
          public int print() {
              System.out.println(i);
              System.out.println(j);
              return 0;
          }
      
          public static void main(String[] args) {
              BUGOR.print();
          } 
      }
      https://ideone.com/HFnuPw
      Success	#stdin #stdout 0.16s 55188KB
      
      42
      0


      В одном случае переменная инициализируется. В другом нет.
      Порядок не имеет значения.
      Никаких circual dependency. И всё днопоточно.
      Ответить
      • Какие-то проблемы внутри стандартной либы, раз календарь битый получается?
        Ответить
      • Т.е. в джавке тоже есть фазы инициализации, как и в крестах? И простые компайлтайм значения попадают в глобалки раньше, чем те где надо вызвать функцию?
        Ответить
        • A variable of primitive type or type String, that is final and initialized with a compile-time constant expression (§15.28), is called a constant variable.

          Whether a variable is a constant variable or not may have implications with respect to class initialization (§12.4.1), binary compatibility (§13.1, §13.4.9) and definite assignment (§16).
          Ответить
          • Java -- простой и понятный язык.
            Ответить
          • > A variable of primitive type or type String, that is final and initialized with a compile-time constant expression

            Блин, а я думаю почему у меня примеры со строками не получались.
            Ответить
            • Какой constexpr )))
              Ответить
              • А отгадайте вот так сразу: есть класс
                public class Foo {
                  public static final int i = 42;
                }

                им пользуеца метод в другом классе.

                Имеет ли он право его заинлайнить?

                И сразу вопрос: чем в C# отличаются const и readonly
                Ответить
                • > const
                  Как в крестах const?

                  > readonly
                  Как в Йаже final?

                  Это без доки, по памяти.
                  Edit: а поиск показывает что const в C# это compile time constexpr.
                  Ответить
                  • В C# нет семантики const "как в крестах", к сожалению.

                    Да, вроде бы const можно заинлайнить, а так нет
                    Ответить
        • > И простые компайлтайм значения попадают в глобалки раньше, чем те где надо вызвать функцию?
          Да. Поскольку есть порядок класс-лоадинга.
          Пока мы подгружаем класс Ideone, java.util.Calendar ещё не загружен.
          static final Ideone BUGOR = new Ideone();
          Эта строка — часть процесса инициализации класса Ideone, ибо статические пельменные пришиты к классу.

          И тут всё честно. Никакой отложенной инициализации finalов. Никаких потоков и утечки this. Обсёр фактически на ровном месте.

          И тем не менее в final-переменной мы наблюдаем неинициализированное значение.

          А Файка пропаганда убедила что:
          > В джаве при указании final-проперти такой хуйни не будет, она будет обязана иметь значение.
          Ответить
    • Лигу без Интернета (ЛГБТ ЛБИ), основанную Малофеевым, покинули вообще все участники.
      Ответить
      • Mission accomplished
        Ответить
      • Даже он сам? Видимо создали что-то ещё более забористое?
        Ответить
        • Свято место не бывает в пустоте.

          Я тоже боюсь, что для нас готовят что-то более забористое. Пока тишина.
          Ответить
          • Следующий логический шаг — лига безопасного чебурнета.
            Ответить
      • Она не нужна, потому что скоро будет Чебурнет.

        Чебурнет кстати реально сделают, и очень просто:

        Провайдеров обязали сделать бесплатным траффик до "социально значемых сервисов" типа VK и mail.ru.

        Провайдерам как отбить деньги? Они сделают платным доступ ко всему остальному Интернету. Ну а чтобы люди случайно не насидели на кучу денег, нужно будет явно включать такую услугу: "Доступ к Интернету" по 3000 рублей за гигабайт.

        96% россиян скажет: "нахуй мне деньги платить, когда VK и так бесплатен?"

        Вжжжух, и 96% россиян добровольно откажется от Интернета в пользу VK.

        А власть не виновата, это чисто коммерческие заморочки, и добровольное решение людей.

        Запомните этот твит!
        Ответить
        • Невидимая рука рынка.
          Ответить
          • Минутка занудства: если кого-то обязали предоставлять услуги бесплатно, это не рука рынка.
            Real free market has never been tried!
            Ответить
        • И вот зачем им хорошие идеи подкидывать?

          Пусть сами думают.
          Ответить
          • ИА «Панорама» доигралось: часть шуточных прогнозов начала сбываться.
            Ответить
    • https://github.com/microsoft/vscode/issues/32405
      Ответить
      • Monkey-style development. Тыкай по случайным кнопкам, бросайся говном, когда что-то идёт не так.
        Ответить
        • Ну там реально странная идея: смешать изменённые файлы и незареганные в гите файлы в одном списке. А потом дать мартышкам кнопку, которая удаляет и то и другое. По сути хард резет + полная очистка.

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

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

                А вообще не используй русской пиривод
                Ответить
                • > не используй русской пиривод

                  Ну да, я обычно не юзаю ни перевод ни хром.
                  Ответить
            • радуйся что там нет кнопок "да" "нет" "не знаю"
              Ответить
            • И сразу становится понятно сколько двойных отрицаний в коде за этим диалогом.
              Шкодливые игрунки они такие
              Ответить
      • Сабмиттер исчез с лица гитхаба, которым владеет M$. Совпадение?
        Ответить
      • Попробуем долнить нейросеткой.

        I had just downloaded vscode as an alternative and I was just playing with the source control option, seeing how it wanted to stage FIVE THOUSAND FILES I clicked discard... AND IT DELETED ALL MY FILES, ALL OF THEM, PERMANENTLY!

        HOW THE FUCK IS THIS SHIT POSSIBLE, WHO THE HELL IS THE DUMBFUCK WHO MADE THE OPTION TO PERMANENTLY DELETE ALL THE FILES ON A PROJECT BY ACCIDENT EVEN POSSIBLE?? CANNOT EVEN FIND THEM IN THE RECYCLE BIN!!!! I DIDN'T EVEN THOUGHT THAT WAS POSSIBLE ON WINDOWS!!!

        FUCK THIS FUCKING EDITOR AND FUCK WHOEVER IMPLEMENTED THIS OPTION. I WISH YOU THE WORST.

        I'M PERMANENTLY STAYING AWAY FROM EVERY WINDOWS DEVELOPMENT SOFTWARE FROM NOW ON AND TO THE GENIUS WHO IMPLEMENTED THIS:


        I HAVE NOTHING TO SAY TO YOU OTHER THAN

        YOU'RE FUCKING INSANE, YOU'RE A FUCKING IDIOT, AND I AM SO SICK OF THIS TYPE OF PEOPLE THAT MAKE MYSELF AND EVERYONE SICK.

        FUCK YOU BILLY ELLIOT. FUCK YOU.

        I'M DONE WITH YOU BILLY ELLIOT.

        I AM GOING TO BEGAN LOOKING FOR ANOTHER EDITOR, LIKE NOTEPAD, NOTEPAD EDITOR, ETC. FINDING ONE AND THEN DELETING THIS WONDERFUL SOFTWARE!
        Ответить
        • >BILLY ELLIOT.
          :)
          Ответить
          • Мне кажется, он другого Билла имел в виду.
            Ответить
            • https://www.youtube.com/watch?v=89Z63pw2p6k

              ой, блядь, Боб, а не Билл

              ну не важно
              Ответить
        • I had just learned bash as an alternative and I was just playing with the dd command, seeing how it wanted to copy FIVE THOUSAND BLOCKS 
          I typed some dd clicked enter... AND IT DELETED ALL MY FILES, ALL OF THEM, PERMANENTLY!
          
          HOW THE FUCK IS THIS SHIT POSSIBLE, WHO THE HELL IS THE DUMBFUCK WHO MADE THE COMMAND TO PERMANENTLY DELETE ALL THE FILES ON A DISK BY ACCIDENT EVEN POSSIBLE??
          CANNOT EVEN FIND THEM IN THE RECYCLE BIN!!!! I DIDN'T EVEN THOUGHT THAT WAS POSSIBLE!!!
          
          I'M PERMANENTLY STAYING AWAY FROM EVERY GPL LICENSE SOFTWARE FROM NOW ON AND TO THE GENIUS WHO IMPLEMENTED THIS:
          FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU 
          
          $ dd --version
          dd (coreutils) 8.30
          Copyright (C) 2018 Free Software Foundation, Inc.
          License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
          This is free software: you are free to change and redistribute it.
          
          $ uname -iso
          Linux unknown GNU/Linux
          Ответить
          • I had just learned how to build PC and I was just playing with random wires connecting them to random parts.

            HOW THE FUCK IS THIS SHIT POSSIBLE, WHO THE HELL IS THE DUMBFUCK WHO MADE THE WIRE TO PERMANENTLY BREAK ALL THE PARTS OF MY PC BY ACCIDENT EVEN POSSIBLE??
            CANNOT EVEN FIX THEM WITH BLUE TAPE!!!! I DIDN'T EVEN THOUGHT THAT WAS POSSIBLE!!!
            Ответить
        • Вот ещё, реальный жизненный пример:
          I had just learned relational dbs as an alternative and I was just playing with the TRUNCATE command, seeing how fast it wanted to drop FIVE BILLION ROWS
          
          I typed some TRUNCATE TABLE clicked enter... AND IT DELETED ALL MY ROWS, ALL OF THEM, PERMANENTLY! 
          
          HOW THE FUCK IS THIS SHIT POSSIBLE, WHO THE HELL IS THE DUMBFUCK WHO MADE THE COMMAND TO PERMANENTLY DELETE ALL THE ROWS ON A TABLE BY ACCIDENT EVEN POSSIBLE?? 
          
          AND REPLICATION HAS FALLEN APART. CANNOT EVEN FIND THEM IN THE TRANSACTION LOG!!!! I DIDN'T EVEN THOUGHT THAT WAS POSSIBLE!!!
          
          I'M PERMANENTLY STAYING AWAY FROM EVERY RDBMS SOFTWARE FROM NOW ON AND TO THE GENIUS WHO IMPLEMENTED THIS:
          
          FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU 
          FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU
          FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU
          FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU
          FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU
          FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU
          FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU
          Ответить
    • https://hsto.org/r/w1560/getpro/habr/upload_files/6dd/fad/51d/6ddfad51df694da6b5fc3deb75200501.jpg
      Ответить
    • Oднажды у Гeнри Kиссинджера cпpоcили:
      - Что такоe "чeлночная диплoматия"?

      Kиccинджер ответил:

      - О! Это унивеpсaльный еврeйский метoд! Пояcню на пpимeре:
      Вы хотитe метoдом челнoчнoй дипломaтии выдaть дочь Pокфеллеpа зaмyж за пpостого паpня из русcкой дepeвни.

      - Kaким oбрaзом?

      - Oчeнь пpоcто. Я еду в руcскую дepeвню, наxoжу там пpостогo паpня и cпpашивaю:
      - Xочешь женитьcя нa амepикaнскoй евpeйке?
      Oн мне: - Haхрeна?! У нaс и своиx дeвчонок полнo.

      Я eму: - Дa. Нo она - дочка миллиаpдepa!
      Он: - О! Этo меняeт делo...

      ... Тoгда я едy в Швейцарию, на заседaниe правления бaнка и спрaшиваю:
      - Bы хoтите иметь пpeзидeнтом сибиpcкoгo мyжикa?
      - Фу, - говорят мнe в бaнке.
      - А eсли он, при этом, бyдeт зятем Рoкфеллeрa?
      - О! Этo кoнeчно меняeт дeло!..

      И тaки-дa, я едy домой к Рокфeллeрy и cпрaшиваю:
      - Xотите иметь зятeм pyсcкoго мyжикa?
      Он мнe:
      - Что вы такoе говоpитe, у нac в семье всe - финaнcиcты!
      Я ему:
      - А он, как рaз, - пpезидент пpавлeния Швeйцарcкoгo банка!
      Он:
      - О! Этo меняeт дeлo! Cюзи! Пойди cюдa. Mистep Киcсинджер нaшел тебе женихa.

      Этo прeзидент Швeйцаpcкoго банкa!
      Сюзи:
      - Фи... Вce эти финaнcисты - дoxляки или педики!
      A я ей:
      - Да! Но этот - здopовенный сибирский мyжик!
      Она:
      - O-о-о! Этo меняет дело!
      Ответить
    • введите меня в курс дела... что тут происходит :)
      Ответить
    • В канал внутреннего фреймворка пришел коллега и предлагает по умолчанию рандомный UUID делать из обычного рандома, потому что дефолтный делается из SecureRandom. А там типа синхронизация и может не хватить энтропии, жадные потоки будут сидеть и ждать. Латенси у запросов из-за этого значит увеличивается.

      Чет я сгорел аж пиздец.
      Ответить
      • А нужен ли вам настоящий секурный рендом? Зависит от задачи же
        Ответить
        • Это дефолтный метод, который дергается вообще всеми сервисами, когда нужен рандомный ууид. Нет, в большинстве случаев точно не нужен. Просто у меня есть ощущение, что пока на дэшбордах графики в миллисекундах и даже сотнях микросекунд, никто этого изменения не заметит.
          Ответить
          • > ощущение

            Замерь. Тогда сможешь с чистой совестью тыкать их мордочкой в графики.
            Ответить
          • Да, возможно это некоторый премаче оптимизейшен, если вы не создаете миллион объектов в секунду
            Ответить
        • > А нужен ли вам настоящий секурный рендом?

          Нужен. Не знаю какой рандом в используемом ими языке, но в той же сишке запросто могло оказаться говнище с 16(!)-битным сидом. Охуенные UUID'ы получатся из такого генератора.
          Ответить
          • > SecureRandom

            Java?

            В доке написано, что используется 48 бит сида. Т.е. из-за парадокса дней рождения уже на десятом-другом миллионе полезут коллизии. Проверь.
            Ответить
            • Там ты вообще не знаешь конкретную имплементацию до рантайма. Но даже дефолтный NativePRNG читает сразу двадцать байт https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/sun/security/provider/SecureRandom.java#L227
              Ответить
              • 48 бит -- это про несекьюрный Random(), конечно.
                Ответить
          • Удобно генерировать LM пароли
            Ответить
      • > синхронизация

        Ну пусть каждый тред возьмёт себе немного энтропии при старте и крутит свой локальный CPRNG, периодически подсыпая в него энтропию. Лочка на главный генератор будет намного реже браться.
        Ответить
        • Консервировать случайные числа надо!
          Ответить
          • Запасать на чёрный день, а то вдруг случится что?
            Ответить
          • - Мама, давай купим %случайное число%
            - Нет, у нас есть %случайное число% дома
            Ответить
      • > Чет я сгорел аж пиздец.

        А вот риалли, сгенери миллионов 30-40 UUID'ов их "обычным рандомом" и посмотри, не выпало ли одинаковых. Если выпало -- можешь показать чувакам и гореть начнёт у них.
        Ответить
        • А они возьмут Ryzen 3000 , и запустят там его реальный генератор, и
          Ответить
          • Ось всё-таки из кучи мест сидится, а не только из rdrand.
            Ответить
            • еп


              Newer version of Windows are able to use a variety of entropy sources:

              ** TPM if available and enabled on motherboard
              ** Entropy from UEFI interface (if booted from UEFI)[15]
              ** RDRAND CPU instruction if available
              ** Hardware system clock (RTC)
              ** OEM0 ACPI table content
              ** Interrupt timings

              Ксатит, как вам такое

              Windows's CNG uses the binary registry key HKEY_LOCAL_MACHINE\SYSTEM\RNG\Seed to store a seeded value.
              Ответить
              • > Ксатит, как вам такое

                > Windows's CNG uses the binary registry key HKEY_LOCAL_MACHINE\SYSTEM\RNG\Seed to store a seeded value.

                https://govnokod.ru/27959#comment758294
                Ответить
              • > Ксатит, как вам такое

                А линукс в файле. Что тут такого? Лучше иметь хоть какую-то энтропию на старте системы, чем вообще никакой.
                Ответить
                • Не понимаю, почему нельзя ее при старте надыбать, если там есть как пишут даже в UEFI что то?

                  Я с диска твоего спижжу сид, и угадаю чото
                  Ответить
                  • > с диска твоего спижжу сид

                    При рутовом/физическом доступе к тачке ей и так пиздец.

                    А состояние генератора рано или поздно станет непредсказуемым за счёт свежей энтропии. Так что долго ты спизженный сид юзать не сможешь.
                    Ответить
                    • зачем мне энтропия на диске? почему я не могу в момент загрузки насосать чутка энтропии?
                      Ответить
                      • Откуда? TPM, UEFI и RDRAND -- относительно недавно появились. В RTC рандома считай что нету. Если сеть молчит, а юзера рядом нет -- прерываний тоже почти не будет.

                        Для серваков и эмбеддед это особенно актуально было.
                        Ответить
                        • >TPM, UEFI и RDRAND -- относительно недавно появились.

                          да. RDRAND всего десять лет назад появился
                          Ответить
    • > Запасать на чёрный день, а то вдруг случится что?

      https://arstechnica.com/gadgets/2019/10/how-a-months-old-amd-microcode-bug-destroyed-my-weekend/
      All of this is supposed to be fairly failsafe. There's
      a CPUID function call that checks for the availability
      of RDRAND, and there's also a "carry bit" in the return
      value from a call to RDRAND that's supposed to let the
      calling application know if the CPU's RNG was unable to
      generate a sufficiently random number. Unfortunately,
      unpatched Ryzen 3000 says "yes" to the CPUID 01H call,
      sets the carry bit indicating it has successfully created
      the most artisanal, organic high-quality random number
      possible... and gives you a 0xFFFFFFFF for the "random" number, every single time.
      Ответить
      • Именно поэтому уважающие себя крипто-либы должны проверять TRNG на такую хуйню при старте и во время работы.
        Ответить
        • Как проверять? Сгенерировать N рендовом и провеприть, что они не все одинакове?
          Ответить
          • Ну да, вот в доке по генератору stm'ки пишут, что надо сравнивать вытащенное из TRNG число с предыдущим (там по 32 бита генерится). И если они совпали -- надо их выбросить и попробовать заново.

            Это простейший тест, но так хотя бы отвал генератора увидишь.
            Ответить
            • > надо сравнивать вытащенное из TRNG число с предыдущим (там по 32 бита генерится).

              Тогда это тоже будет неправильный рандом - в нем будет нулевая вероятность выпадения подряд идущих одинаковых 32-битных числа. В реальном рандоме такая вероятность есть.
              Ответить
              • Но есть же шанс, что прилетит из космоса частица, и для двух одинаковых чисел случайно вылезет false при сравнеии, потому что частица пролетит в этот момент через процессор или через память
                Ответить
                • Надо процессор и память построить на релейной логике (биты оперативки и ПЗУ хранить в бистабильных реле), чтобы никакая частица не могла на него заметно повлиять
                  Ответить
                  • И на релейную логику найдётся свой метеорит.
                    Ответить
                    • Скорее какое-то пролетающее рядом насекомое.
                      Ответить
                      • Насекомых можно всех потравить каким-нибудь мощным ядом, или вообще радиацией. Контроллеру на релюхах на радиацию будет примерно насрать.

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

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

                Но она достаточно мала, один раз на 4 миллиарда тестов. Надо очень долго дрючить генератор чтобы гипотеза об отсутствии подряд идущих одинаковых чисел стала статистически значимой.
                Ответить
                • > там по 32 бита генерится
                  > один раз на 4 миллиарда тестов
                  Birthday paradox
                  Ответить
                  • Нихуя. Тут ведь сравнение только с предыдущим, а не со всей накопленной выборкой.
                    Ответить
                    • Пардон, прочитал в стоке вне конь-текста.

                      > гипотеза об отсутствии одинаковых чисел
                      Ответить
                    • Почти ошибка игрока
                      Ответить
      • xkcd_про_42


        Расскажите, как работает RDRAND в процессорах. Она что берет? Температуру? Или там шумы какие-то слушает?
        Ответить
        • Давно читал где-то, что это такой PRNG, засиденный якобы истинными шумами (девочка-электроник bormand про всякий тепловой шум лучше расскажет).
          Ответить
          • Станет ли PRNG TRNG если его засидить истинно случайным семенем?

            Интересно вообще, можно ли такое хакнуть
            Ответить
            • Ноу. У нево же период есть какой-то.
              Ответить
              • И в любом PRNG числа хоть как-то зависимы
                Ответить
                • Дан RNG, генерирующий 16-ти битное число. Известно, что он или TRNG, или PRNG сидированный 128-ми битным числом.

                  Сколько тебе нужно чисел из него высосать, что бы понять, P он или T?
                  Ответить
                  • Наверняка это в любом случае сделать не получится — если ты не имеешь доступа к реализации, конечно.
                    Ответить
                  • Сомневаюсь, что это можно однозначно выяснить. Есть вероятность, что TRNG может выдать последовательность как у какого-нибудь PRNG, либо PRNG не известен и даёт хороший рандом что его трудно вычислить.
                    Ответить
                    • К сожалению хороший CPRNG проходит почти все статистические тесты кроме совсем безумных в духе вычитывания всех чисел.
                      Ответить
              • То есть если я бесконечное число раз его проверну, то он начнет повторяца, да?

                Тогда как же гост читал, что RDRAND это PRNG когда там питуз пишет, что это TRNG?
                Ответить
            • > Станет ли PRNG TRNG

              Нет, конечно. Но это и нинужно.

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

              Как раз поэтому сидить один раз в начале -- недостаточно.
              Ответить
              • Если у меня есть PRNG, который я сидю заново энтропией каждое второе число. Он не становится от этого TRNG. А если каждое первое число, то всё равно не становится?

                PRNG в этом случае просто глупая функция для превращения энтропии в случайное число
                Ответить
                • Не надо так делать. TRNG должен быть максимально простым и честным, чтобы можно было с него статистику собирать и оценивать его качество.

                  А PRNG должен быть детерминированным, чтобы его легко было проверить.

                  Вот тогда из них можно составить секьюрную систему. Но мешать их в кучу не надо, это только затрудняет исследование.
                  Ответить
                  • Я не делаю RNG, честно слово) Мне просто было интересно понять определение.
                    Ответить
                    • Да я тоже сварщица не настоящая, могу наврать...
                      Ответить
                • > каждое первое число

                  И вот так делать очень плохо, кстати. Энтропию надо копить и вбрасывать достаточно большими пачками. Иначе злоумышленник, спиздивший стейт, сможет угадать вброшенную тобой энтропию и продолжить предсказывать числа.
                  Ответить
        • Классическая реализация (на тех же stm'ках) -- кольцевой осциллятор. У него частота плавает от температуры. Поэтому, если его семплить со стабильного кварца, получается неплохой рандом.

          У интела какая-то своя хуйня с "подбрасыванием" метастабильного триггера + за каким-то хреном PRNG фронтенд, чтобы качество рандома никто не мог оценить.
          Ответить
          • Скорее всего чтобы спрятать деталь реализации, и потом поменять, если что.

            Понятно, спасибо
            Ответить
            • На самом деле скорее всего всё проще: с аппаратного ГСЧ много энтропии не снимешь, они медленные. Из них в лучшем случае единицы мегабит можно выдавить.
              Есть, конечно, адские железяки с кусками урана внутри за сто тыщщь нефти, которые могут давать рандом со скоростью /dev/urandom, но в процессор их не вставишь.
              Ответить
              • Была отдельная плата сопроцессора для плавающего питуха, запихнули в процессор.
                Была отдельная плата физического ускорителя, запихнули в видеокарту.
                Нужно выпустить плату аппаратного генератора случайных чисел. Продавать под лозунгом, «теперь лут будет падать действительно случайно»
                Ответить
                • > Была отдельная плата физического ускорителя, запихнули в видеокарту.

                  Её кстати потом тоже в процессор запихнули.
                  Ответить
                • > Нужно выпустить плату аппаратного генератора случайных чисел.
                  Такие штуки сто лет в обед выпускают.
                  d: «TrueRNG V3» (USB), «Quantis QRNG PCIe», тысячи их.
                  Ответить
                  • Достаточно организовать чтение LSB с микрофона
                    Ответить
                • Видюху тоже сунули в процессор. А еще контроллер памяти. Звуковуху тоже сунули в известном смысле. HDA же просто аналоговая часть снаружи..
                  Ответить
      • Всё правильно, процессор генерирует только числа из списка сертифицированных случайных чисел.
        https://imgs.xkcd.com/comics/random_number.png
        Ответить
      • О, я помню эту хуйню.

        Из-за неё Кукурузены не грузили Луникс.

        ПРЫЩЕБЛЯДИ СОСНУЛИ

        Просто сравните:
        > Windows users couldn't successfully launch Destiny 2
        > and Linux users in many cases couldn't even get their system to boot
        Ответить
      • И вдогонку немножко пропаганды ([u]https://stackoverflow.com/a/26781934/u]):
        >>> RDRAND is not just a PRNG. It is a whitened TRNG that is FIPS compliant.

        > and gives you a 0xFFFFFFFF for the "random" number, every single time
        > and gives you a 0xFFFFFFFF for the "random" number, every single time
        > and gives you a 0xFFFFFFFF for the "random" number, every single time
        Ответить
        • > whitened TRNG

          Вот тут-то всё говно этих "TRNG" и таится... Даже если оно на выходе выдаёт не 0xFFFFFFFF, откуда ты знаешь, что оно им не сидилось?

          Честный TRNG должен давать мне честный доступ к его потоку энтропии, чтобы на нём можно было провести статистические тесты. А не пропущенное через мясорубку говно.
          Ответить
          • Именно потому некоторые либы просят юзера подвигать мышкой
            Ответить
          • Это правда.
            На самом деле никакой ошибки нет, а то, что у людей нагенерировались 0xFFFFFFFF — это просто совпадение.
            Ответить
        • > whitened

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

            Засудят ведь если лутбоксы с кривым рандомом.
            Ответить
            • For Sale Original Honey RANDU 1KG ll Original Honey Pure Necttar RANDU And MULTIFLORA APIS MELIFERA Guaranteed
              Ответить
    • Как вам тортик?

      https://pbs.twimg.com/media/FLVAC4cWUAAjRNN.jpg

      Знакомая шкала, да?
      Ответить
      • В ресторане "Бристоль" такой тортик подают
        Ответить
    • https://i.postimg.cc/XY1vZXM7/image.png
      Ответить
      • Выражение «залить глаза» принимает буквальный смысл.
        Ответить
    • 
      remove AVX and AVX512 code from Calc
      
      It's been a source of numerous problems since the beginning.
      Poor separation of C++ code causing the compiler to emit some generic
      code as CPU-specific, compiler optimizations moving CPU-specific
      code out of #ifdef to unguarded static initialization, etc.
      
      And it doesn't seem to even particularly improve performance,
      on my Ryzen2500U for one full column (1m cells) sumArray() takes
      about 1.6ms with AVX, 1.9ms with SSE2 and 4.6ms with generic code.
      So SSE2 code is perhaps worth it, especially given that SSE2 is our
      baseline requirement on x86_64 everywhere and x86 on Windows,
      but AVX+ is nowhere near worth the trouble.
      
      So this code removes all AVX+ code from Calc, and makes SSE2
      a hardcoded option on where it's guaranteed. If we raise the baseline
      to AVX, the SSE2 code may be replaced by the one removed by this
      commit. Generic code is there for other platforms, if other platforms
      add CPU-specific code, they should preferably follow the same rules.

      https://cgit.freedesktop.org/libreoffice/core/commit/?id=2d36e7f5186ba5215f2b228b98c24520bd4f 2882

      Князь, как обычно, зрит в корень.

      https://www.youtube.com/watch?v=1IAwkEdRZZw

      Инструкции-хуюкции. Я выходил на улицу, я ко всем подходил, к каждому бомжу подходил и спрашивал:
      Что тебе, сука, ёбанная, дали AVX-инструкции?
      И все. Каждый сука блоггер.  
      AVX-инструкции, AVX-инструкции, AVX-ИНСТРУКЦИИ, AVX-ИНСТРУКЦИИ, AVX-инструкции.
      ГДЕ АVX?? ПОКАЖИ, ТКНИ!!! Открой блять любую программу, открой любую игру.
      Покажи мне AVX, где его не хватает, сучка. Пиздец.
      Ответить
      • > compiler optimizations moving CPU-specific code out of #ifdef

        О_о. Пиздец у них там конпеляторы охуевшие. Оптимизирующий препроцессор -- это сильно.
        Ответить
      • Помню, мы считали MD5. У кода на AVX1 пирфоманс оказался, как у кода на SSE (версию не помню). Код на AVX2 оказался быстрее (но у меня не оказалось под рукой техники с AVX2, поэтому пришлось верить Борманду на слово).

        А AVX512 я даже не знаю, где используется.

        В играх AVX не используется, видимо, потому что игры используют GPU.
        Ответить
        • Ну да, в том и проблема. Если задача настолько хорошо параллелится, что может полноценно утилизировать AVX, то... это задачка для видюхи.
          Ответить
        • В моем любимом хеше жэе

          AVX512 support

          A new vector instruction set is supported, thanks to @gzm55 : AVX512. It can be applied on XXH3 and XXH128, using some of the most recent Intel cpus, such as IceLake on laptop. It typically offers +50% more performance compared to AVX2.

          https://github.com/Cyan4973/xxHash/releases
          Ответить
          • AVX512 это хуйня, которую настолько никто понять не может, что его даже интел у себя выпиливает в микрокоде

            https://blog.cloudflare.com/on-the-dangers-of-intels-frequency-scaling/
            https://www.tomshardware.com/news/intel-reportedly-kills-avx-512-alder-lake-cpus
            Ответить
            • Верно. Деды как-то обходились ISA 8088, а MS-DOS написали
              Ответить
              • Недавно мы заметили, что в ISA 6502 даже умножения и деления не было, а на нём как-то построили «Apple ][», «Агат», «NES»/«Dendy», «Commodore 64», «Atari» и ещё кучу техники той эпохи.
                Ответить
                • В нём даже регистров почти не было...
                  Ответить
                  • Ага, аккумулятор, указатель текущей инструкции, указатель стека, флаги и два ненужных регистра.
                    Ответить
                  • У нас в JVM и CLR нет никаких "регистров"
                    Ответить
                    • У нас в JVM и value-типов нет
                      Ответить
                      • Есть конечно. Примитивы
                        Ответить
                        • Это только до первого дженерика
                          Ответить
                          • Да, тут джава пососала писун, причем не только у крестошаблонов, но даже у шапреев.

                            Удивительное просто говно, и костыль для его поедания
                            https://fastutil.di.unimi.it/docs/it/unimi/dsi/fastutil/ints/IntList.html
                            Ответить
                            • Во время введения стримов (еще времена восьмой джавы) люди вслух удивлялись, мол что, мы будем делать отдельные стримы под примитивы?

                              Стримы эти до сих пор существуют и все ещё необходимы, конечно.
                              Ответить
              • > Деды как-то обходились ISA 8088, а MS-DOS написали

                Сарказм конечно хорошо. Но Fike кидает архиправильные ссылки.

                Проблема в том что увеличение размеров регистров 64-128-256-512 приводит к убывающим результатам.

                Если при переходе MMX (64) - SSE (128) скорость увеличивалась в 1.5-2 раза.
                То при переходе SSE(128)-AVX2(256) мы видим увеличение IPC в 1.2-1.4 раза.
                При переходе AVX2-AVX512 выигрыш большинства алгоритмов 1.05-1.1

                При этом поддеркжа этих инструкций жрёт экспоненциальное число транзисторов.

                А в случае AVX-512 процессоры сбрасывают частоту, в итоге прирост IPC не компенсирует даунклоакинг и зачастую наблюдается даже падение пирфоманса.
                Т.к. падение частоты 20%-40%, а прирост IPC *для большинства* алгоритмов 5-10%.

                On some processors AVX-512 instructions cause a frequency throttling even greater than its predecessors, causing a penalty for mixed workloads.
                The additional downclocking is triggered by the 512-bit width of vectors and depend on the nature of instructions being executed, 
                and using the 128 or 256-bit part of AVX-512 (AVX-512VL) does not trigger it.
                As a result, gcc and clang default to prefer using the 256-bit vectors.
                
                On Skylake and its derivatives, the throttling is divided into three levels:
                
                    L0 (100%): The normal turbo boost limit.
                    L1 (~85%): The "AVX boost" limit. Soft-triggered by 256-bit "heavy" (floating-point unit: FP math and integer multiplication) instructions. Hard-triggered by "light" (all other) 512-bit instructions.
                    L2 (~60%): The "AVX-512 boost" limit. Soft-triggered by 512-bit heavy instructions.
                Ответить
                • > А в случае AVX-512 процессоры сбрасывают частоту
                  Так это не какое-то принципиальное ограничение «AVX-512», это просто в «Intel» по-крупному обосрались с теплораспределением и въебали анскильный костыль с троттлингом. У меня в «AMD» такой хуйни нет!
                  Ответить
                  • > У меня в «AMD» такой хуйни нет!

                    Он просто всегда работает медленее.

                    Можно и без зелёного, наверное. AVX по-любому выделяет больше тепла, чем более простые инструкции. И если охлаждение справляется с AVX на какой-то частоте, то с простыми инструкциями оно справится и на большей. Т.е. "не троттлить AVX" можно прочитать как "не получать буст для остальных инструкций".
                    Ответить
                    • З.Ы. Другое дело, что троттлить надо бы по температуре, а не тупо по наличию инструкции в потоке.
                      Ответить
                      • Блядь, как всё сложно. Именно поэтому я за «PDP-11».
                        Ответить
                      • > З.Ы. Другое дело, что троттлить надо бы по температуре, а не тупо по наличию инструкции в потоке.
                        Вот именно. И даже не по температуре, а по энергопотреблению — но, видимо, такие нанотехнологии инженерам из «Интела» недоступны.

                        P. S. Моя рязань под полной загрузкой всех ядер AVX говном (см. «CPUID Powermax») накаляется до 72 градусов, а вот SSE-говно нагревает её только до 65. Обычные же рабочие нагрузки редко когда вызывают нагрев выше шести десятков.
                        Ответить
                        • > по энергопотреблению

                          Ну нее... Тогда более крутое охлаждение перестанет давать профит.
                          Ответить
                          • Почему? Понятное дело, что троттлить по максимальной температуре всё равно надо. Просто более крутое охлаждение сможет отвести все максимально допустимые N ватт тепла, отсосный вентилятор сможет отвести только (N - M) ватт и вынудит процессор затроттлиться по температуре.
                            Ответить
                            • Потому что разрабы проца не знают сколько ватт допустимо для всей системы в целом. Разве что регулятор прикрутить чтобы вручную можно было добавить газу.

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

                                Возвращение кнопки «Турбо»
                                Ответить
                              • Зачем для всей системы? Я про потребление конкретно процессора. Уж вычислить, сколько ватт тепла процессор может передать на крышку и не расплавиться, разработчики явно могут.

                                У меня видеокарта, например, вполне себе умеет замерять свою мощность и по ней же троттлиться. Даже ползунок в ПО имеется, позволяющий этот троттлинг подкручивать. С тех пор, как выкрутил ползунок на минимум — до 53% от TDP — просто нарадоваться не могу: за счёт единиц процентов потери производительности получил абсолютно тихую и холодную карточку.
                                Именно поэтому я за «троттлинг по мощности».
                                Ответить
                  • > просто в «Intel» по-крупному обосрались с теплораспределением и въебали анскильный костыль с троттлингом
                    > У меня в «AMD» такой хуйни нет!

                    Да, действительно в процессорах от «AMD» такой хуйни как «AVX-512» просто нет.
                    Ответить
                    • У Вас устаревшая информация: «AVX-512» есть в «Zen 4».
                      Ответить
                      • > «AVX-512» есть в «Zen 4».

                        А есть ли «Zen 4»?
                        Ответить
                        • Покажите мне «Zen 4»! Где используется «Zen 4»? Где? Покажите!
                          Ответить
                        • Вы сомневаетесь в его существовании?
                          Ответить
                          • «Процессоры AMD Ryzen 7000 Zen 4 могут представить уже летом».

                            Могу копать, могу не копать.
                            Ответить
      • > ГДЕ АVX?? ПОКАЖИ, ТКНИ!!!

        У меня в контроллерах нет никаких "AVX"
        Ответить
        • Контроллеры с neon'ом уже не труъ?
          Ответить
          • А блин, у cortex m4 там всего лишь простенькое FPU, даже без синусов. Неонка уже у "настоящих" arm'ов.
            Ответить
            • Не, вообще там есть некоторая SIMD хуйня:

              https://developer.arm.com/architectures/instruction-sets/dsp-extensions/dsp-for-cortex-m
              > DSP and SIMD instructions
              >
              > The Cortex-M4, Cortex-M7, Cortex-M33, Cortex-M35P, and Cortex-M55 processors provide SIMD instructions that operate on 8-or 16-bit integers. All registers are still 32-bits wide, but the SIMD instructions operate on 2 x 16-bit values or 4 x 8-bit values at the same time within a 32-bit register.
              >
              > Instructions that work on 8- or 16-bit data types are useful for processing data such as video or audio, as they do not require full 32-bit precision. The SIMD instructions allow these 2x16-bit o r4x8-bit operations to be performed in parallel.

              Но весьма ограниченная, и не для FPU
              Ответить
              • А, они даже не в расширениях, а прям в основном наборе описаны...

                SHADD8: add each byte of the first operand to the corresponding byte of the second operand and shift each result by one bit to the right.

                Прикольно. Вот для софтварного рисования мне в своё время такой хуйни реально не хватало. А MMX казался каким-то неудобным оверкиллом.
                Ответить
                • А Бессель есть?

                  >. Вот для софтварного рисования мне в
                  не понял. Спрайты что ли делать?
                  Ответить
                  • Инструкия Бесселя? Это интересно, надо интелу подкинуть такую идею
                    Ответить
    • С чем у вас ассоциируется название компании «Yoyodyne»?
      Ответить
      • Copacabana
        Ответить
      • С йодом и Терминатором.
        Ответить
        • У меня почему-то с GPL2.

          Оказывается, это название всплывало в нескольких местах:

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

          А ещё из этой статьи есть ссылка на ACME:

          https://en.wikipedia.org/wiki/Acme_Corporation
          Ответить
    • Скучно тут сегодня. Пойду посру, пожалуй
      Ответить
    • Купили бы тут квартиру: https://dvaholma.ru/ ??
      Ответить
      • Фу, какая дискриминация! Их нужно отменить!
        Ответить
      • Не могу зайти. Сайт пишет, что мне «доступ запрещен».
        Ответить
      • Кто-то всерьёз решил взяться за проблему "собрать бы всех фемок в одном месте и огородить забором"?
        Ответить
        • > взяться за проблему "собрать бы всех фемок в одном месте и огородить забором"

          Какой женский монастырь )))
          Ответить
      • Двач, я покекал
        https://dvaholma.ru/assets/images/advantages/item-2.webp
        Ответить
      • Кстати, название сайта хуемразь придумала. Два холма — это же намёк на две сиськи.
        Ответить
        • Это скрытая реклама одноимённого нового российского сериала. Там тоже про женщин в экопоселении.
          Ответить
          • [quote]
            Что будет, если в результате биологической войны почти все мужское население вымрет? Женщины погорюют (недолго), а потом объединятся и создадут новый лучший мир — с экогородками, возобновляемой энергией, возможностями заниматься чем захочется, хоть наукой и биохакингом, хоть йогой и саморазвитием.
            [/quote]

            Какой дурак решил, что женщины более соевые, чем мужики? Женщины прекрасно умеют ненавидеть, воевать, и убивать.
            Ответить
            • Y:\The Last Man\*.mkv

              https://rezka.cc/p/2096-y-posledniy-muzhchina-2021-hdrezka-studio
              Ответить
              • https://kg-portal.ru/anime/shuumatsunoharem/
                Ответить
                • > Anime News Network
                  Эээ, это перебор уже.
                  Ответить
                • я так понимаю, для анимешника единственный способ поебаца, это остаться единственным мужчиной во вселенной?
                  Ответить
                  • Это определенно «‎лучший комментарий за сегодня»‎
                    Ответить
                  • > это остаться единственным мужчиной во вселенной

                    Но тут надо не перестараться и не остаться единственным человеком во вселенной. Прецеденты были.
                    Ответить
                    • ну тогда cat is fine too
                      Ответить
                      • Не поможет. Там был настолько сферический неудачник в вакууме, что ему дали рутовый доступ ко вселенной и возможность её перестроить с нуля. А он так нихуя и не сделал.
                        Ответить
                        • Похоже на жанр "попаданцы".
                          Ответить
                          • Попаданцы обычно стоят на другой стороне бристольской шкалы.
                            Ответить
                        • По моему это вообще распостранненная тема у фантастов: человеку дается возможность ВСЁ исправить, а они делают только хуже
                          Ответить
                  • Скорее "для того подмножества анимешников, которые смотрят гаремники"
                    Ответить
              • https://www.kinopoisk.ru/film/66171/
                Ответить
              • А также недавний противоположный (в первой половине) https://en.wikipedia.org/wiki/Chaos_Walking_(film)
                Ответить
                • > young adult
                  Откуда вы такое берете? Тут мейнсримный - лютейшее говно, а это судя по всему категория B
                  Ответить
                  • Скорее откуда ты это взял, потому что по ссылке фраза есть только в референсах :3

                    IMDB кажется порекомендовал. Сам фильм не то чтобы мегаинтересный, но посмотреть можно. А мейнстримный марвел нахуй не нужен.
                    Ответить
                    • Там в абсракте написано, что по книге, а книга про планету жопоёбов оказалась вот такая.
                      Ответить
                • > which causes everyone to see and hear each other's thoughts

                  Если бы люди видели мои мысли, то со мной буквально все перестали бы общаться\
                  Ответить
                  • Что-то мне нямекает, что ты бы с ними тоже...
                    Ответить
            • А размножаться они как планируют?
              Ответить
              • Почкованием
                Ответить
              • С помощью науки. Роль самца преувеличена. Какая разница от кого брать генетический материал.
                Ответить
                • Нуу, если бы разницы не было, то эволюция дальше одноклеточных бы не ушла. Всё-таки генетическая инвормация любят жить вечно, а для этого ей нужно создать качественный мясной автомобиль.
                  Ответить
                  • Два пола было создано для эволюции, чтобы выживали сльнейшие. Если ты вялый импотнет, не способный завалить маманта, то тебе и тян не дадут, и помтоства ты не оставишь.

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

                      А как надо?
                      Ответить
                      • Ну надо как было примерно до 19 века. Хиляк? С корабля жизни -- хуяк, и синь небес, закрывшихся за ним. Выживают самые сильные
                        Ответить
                        • Крайне пещерное понимание эволюции. Марш читать Докинза с Марковым, и потом имплементацией генетического алгоритма закрепить.
                          Эволюция оптимизирует вероятность сохранения генетического материала, путём тюнинга вообще всех параметров в многомерном пространстве, а не только гена турникмества.
                          Ответить
                          • Веса у параметров тоже есть, и в условиях отсутствия антибиотиков и с медициной на уровне кровопускания крепкое здоровье становится необходимым (хотя и не достаточным) условием прожить хотя бы лет тридцать
                            Ответить
                            • > прожить хотя бы лет тридцать
                              При чём здесь это вообще? После того, как ты передал гены, эволюция в принципе не может работать напрямую. Долголетие разве что косвенно может на неё влиять. Короче, ты не сечёшь матчасть.
                              Ответить
                              • Ты не можешь передать гены, если ты не дожил до половой ебли. Младенцы не ебуца.

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

                                Сейчас эта штука не работает.
                                Ответить
                                • То есть про r и k стратегии ты тоже не знаешь.
                                  Ответить
                                  • То есть по твоему человек использовал r стратегию, как мухи?
                                    Ответить
                                  • А так же про естественный отбор vs. половой отбор.
                                    Ответить
                                • > Ты не можешь передать гены, если ты не дожил до половой ебли.
                                  Начались манёвры. Если бы ты это изначально имел в виду, то говорил бы про "возраст фертильности", а не "лет тридцать".
                                  Ответить
                                • > Сейчас эта штука не работает.

                                  Сейчас есть страны, где это всё ещё работает, дальнейшие выводы делай сам.
                                  Ответить
                                  • > Сейчас есть страны, где это всё ещё работает

                                    Idiocracy 2006. Уже IRL.
                                    Ответить
                              • Короче, просуммирую мой поинт: социальный дарвинизм геста — это настольно примитивное понимание эволюции, что оно фактически граничит с неверным. Поскольку в его понимании, эволюция оптимизирует один единственный параметр: здоровости и розовощёкости.
                                В реальности же она оптимизирует в бесконечномерном пространстве, где "правильное" направление предсказать нельзя. Алгоритм этой оптимизации более-менее прост, его ещё в XIX веке открыли, но входные данные для него принципиально неизвестны. Поэтому делать громкие заявления об остановке этого алгоритма на основании только одного измерения — глупость.
                                Т.е. ситуация тут примерно как с уравнением Навье-Стокса: с виду очень простое, а решать его по-нормальному никто не умеет. Только у жидкости всего три измерения, а у биологического вида — бесконечно много.
                                Ответить
                                • Эволюция пробует вообще всё. Но она очень инерционна.

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

                                  Понятно что через какое-то длительное время происходит адаптация.

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

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

                                  Короче. Идиократия во все поля.
                                  Ответить
                    • > Если ты вялый импотнет, не способный завалить маманта, то тебе и тян не дадут, и помтоства ты не оставишь.

                      Есть мнение, что эволюцию современного человека в основном направляло социоблядство, а не мамонты. Поскольку здоровый головной мозг крайне невыгоден, должен быть крайне весомый профит, чтобы он появился. Быть умнее мамонта просто, а вот быть умнее соплеменника — уже сложнее. Т.е. социоблядство запустило петлю положительной обратной связи увеличения IСQ. Чего-чего, а социоблядства сейчас полно, так что тиктокеры будут эволюционировать.
                      Ответить
                      • ну мозг изначально был нужен чтобы делать стрелы и охотиться на мамонта тоже, затем чтобы коз разводить, итд
                        Ответить
                        • Путаешь следствие и причину.
                          Ответить
                          • Охуясе. Антропологи спорят о причинах появления такого мозга именно у человека, рассматривают разные теории, например что приматам он был нужен изначально чтобы прыгать по деревьям, пытаются понять, зачем например мозги слонам, которые неестественно умные для травоядных, а тут Снаут пришел, и всё объяснил
                            Ответить
                            • "Труд сделал из обезьяны человека" — раздался пронзительный голос со стороны филфака. Но evolutionary development биологи, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять?
                              Антропология — не наука, и ей предстояла тяжёлая ночь.
                              Ответить
                            • На самом деле артроподлоги зря спорят, толчок развитию мозга дало выращивание свёклы как апгрейд собирательства, а конкретнее - успешное решение задачи "сколько можно сожрать/сколько надо оставить на развод", что позволило осесть и жрать больше глюкозы и больше думать в петле обратной связи.
                              Ответить
              • Партеногенез. Но получаются только самки.
                Ответить
            • И в деле освобождения мужчит от гнёта матриархата помогут геи-нигеры из далёкого космоса!

              https://en.wikipedia.org/wiki/Gayniggers_from_Outer_Space
              Ответить
            • Ну с одной стороны среди девушек-программисток культистов C++ почти нет, если не считать нейросети 1024--
              Ответить
          • > нового российского сериала
            Пораженчество.
            Ответить
            • Нормально. Россияне научились делать клюкву уровня америки. Выглядит это обычно очень смешно, потому что американская клюква не так сильно режет глаз -- мы не живем в америке, а когда нам показывают российскую глубинку, которая выглядит как сан-франциско, и там живут простые русские учительницы в пятикомнатных квартирах с евроремонтом, и после работы в школе занимаются йогой, вот это смешно
              Ответить
              • Н-но... если появилось время высматривать что-то там в рашкосериалах, то явно что-то не так со свободным временем.
                Ответить
        • Нужно экопоселение "Качан и два яйца"
          Ответить
          • На территории поселения запрещены смузи и вегетарианство. Можно кушать только водку с пельменями, и запрещены все телепередачи кроме футбола и бокса
            Ответить
      • > Согласно договору, продавать и сдавать квартиры в аренду можно будет только женщинам
        То есть квартиры там не покупают (иначе ограничений не наложить) а берут в бессрочную аренду, я правильно понимаю?
        В ипотеку не взять, потому что ни один банк в такую хуйню не полезет, по наследству не передашь.
        Ответить
        • Апартаменты поди вместо квартир?
          Ответить
          • > До старта строительства осталось 276 заявок

            > Готовый объект может отличаться от представленных визуализаций.

            Это вообще выглядит как типичная наёбка. Никаких реквизитов.
            Ответить
          • Скорее "нихуя вместо квартир"
            Ответить
      • Домен зарегистрирован 9 февраля сего года.

        Подозрительня.
        Ответить
        • Гест хочет получить фидбэк по верстке, но стесняется спросить напрямую
          Ответить
      • В первый же день там начнётся гражданская война на почве TERF. Многие падут.
        Ответить
        • Херасе, оказывается Роулинг - герой TERF.
          Ответить
        • Я TERFосрачи видал в интернетах, да.

          Транс: Я женщина
          Фемка: А по-моему ты говно
          Ответить
          • > Фемка: А по-моему ты говно

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

        Максим Горький. Воспоминания. Лев Толстой.
        Ответить
    • https://i.postimg.cc/c6yGtfpz/image.png
      Ответить
    • Перекат!

      https://govnokod.ru/28008
      https://govnokod.xyz/_28008/
      Ответить
    • One of us recalls producing a «random» plot with only 11 planes, and being told by his computer center’s programming consultant that he had misused the random number generator: «We guarantee that each number is random individually, but we don’t guarantee that more than one of them is random». Figure that out

      —– Ваш рандом — говно!
      –— Вы просто его неправильно используете.

      Какой багор )))
      Ответить
      • > we don’t guarantee that more than one of them is random

        Одноразовый генератор случайных чисел?
        Ответить
      • З.Ы. А первое число поди вообще функция от таймера? Т.е. случайных чисел там вообще нет.
        Ответить
        • Это про IBM RANDU
          Ответить
          • Угу, это говно много лет было в большинстве компиляторов и библиотек. В 32-битном вореанте точки лежали уже на 15 плоскостях.

            Взяли самый простой мультипликативно-конгруэнтный генеретор, да ещё и константы неудачные выбрали)
            Ответить
            • Дык там поди при любых коэффициентах плоскости будут? Зависимость ведь слишком простая.
              Ответить
      • Вот этот анекдодт я где-то казуально прочитал и смутно его помню, а найти не смог.
        Ответить
    • хотел скачать винамп. захожу через гугл и что же я вижу: https://www.winamp.com/
      пиздец петушни наделали.
      благо сам винамп все еще заебись.
      Ответить
      • У меня от этого сайта браузер умер, пришлось добить, чтобы не мучался.
        Ответить
        • У меня в контроллерах нет никаких "браузеров"
          Ответить
        • А ведь каких-то джвадцать лет назад точно такую же хуйню, как на фоне этого дерьмосайта, этот же «Winamp» умел рисовать практически не загружая процессоры — те, что порядка на четыре медленнее современных…

          Какая великолепная демонстрация тотальной дегенерации ПО.
          Ответить
      • Именно поэтому я за ``foobar2000''.
        Ответить
      • Шiпатр уже не ТОРТ. Из него делают очередную платформу для прослушивания музыки.
        Ответить
      • Ты провалился в девяностые? Купи мне там долларов, деньги отдам.

        Ссуть свинампа в том, что там был нестондартный декодер Нетронь, который говнякал скачанные Напсером 128kbps мрз ради пирфоманса. Больше ничего за этим хайпом не стоит, томущо фрау Нгофер раздавала декодеры бесплатно и можно было делать свой helloworld2000 с mciSendCommand и тиками.
        Ответить
    • Я сьогодні серфив в Інтернеті більше 3 годин, але жодної цікавої статті, подібної до вашої, я так і не знайшов. А це досить цінно для мене. На мій погляд Особисто на мій погляд, якщо всі власники сайтів та блогери будуть створювати хороший контент, як і ви, всесвітня мережа буде набагато кориснішою, ніж будь-коли раніше.
      Ответить
    • Жавайте хрюкатб и какать
      Ответить
      • Девушки, которые увлекаются веганами, рожают только девушек
        Ответить
        • В данном случае, он едва ли веган. Тут намешано всякой мути, в том числе инцест и интоксикация после моих шалостей.
          Ответить
    • У меня пара учёток «Яндекса» улетела.

      «Ко-ко-ко, Ваш аккаунт в опасности. Введите ответ на кококококонтрольный вопрос, куд-кудах-тах-тах!»

      А я ебу, что я писал в качестве ответа? Я вводил случайную строку, которую трудно подобрать, чтобы мою учётку не взломали.

      Пидоры.
      Ответить
      • Это ещё что, гугл у меня как-то увёл почту под предлогом "пароль вы знаете, секретный вопрос тоже, однако залогинтесь из той страны, где регистрировались". Ладно хоть токен остался в почтовике, успела всё перенести.
        Ответить
        • Для восстановления нужно арендовать VPS той страны?
          Ответить
          • VPS элементарно детектятся по AS.
            Ответить
            • Понял. Сразу посчитает ботом.

              Нужно, чтобы кто-нибудь с белым айпишником у «домашнего» провайдера прокси поднял...
              Ответить
              • Большинство ``Residential Proxy'' тоже посчитаны.
                Ответить
                • То есть для входа в учётку нужно арендовать хату, да ещё подбирать на помойке старый комп?
                  Ответить
            • Что такое AS?
              Ответить
              • Autonomous System
                Ответить
              • Интернеты состоят из AS и IX.

                AS — маленькие паутинки.

                IX — узлы, которые их связывают в большую сеть.

                Если хочешь, чтобы «Интернет» разбился на локалки, бомби IX.
                Ответить
        • Для восстановления залогиньтесь с айпи-адреса и с устройства, с которого регистрировались.
          Ответить
        • P.S. Какой-нибудь питух в гугле за внедрение этого искусственного идиота небось премию получил.
          Ответить
          • Я ещё вспомнил публикацию о том, как «Фейсбук» забанил целую семью за «множественную регистрацию с одного айпи-адреса».

            То есть по мнению менеджеров «Фейсбука» у каждого члена семьи должен быть свой интернет-канал.
            Ответить
            • У меня в контроллерах не никакого "Фейсбука"
              Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • #на правах оффтопа
      Ответить
    • [color=whirw]x0Ox6Jv8Ct9Fz4Wh7Ms6Hw3Te1Wr0Tq3Df8Hd7Dr 9Jy5Rr6Vl2Yx3Xp8Np5Ao4Mp2Hw2Ez2Tf5Hg6Kx5 Zv0Zi1Aq1Jc2Uk3Qg9Mt[/color]
      Ответить
    • [color=whirw]f5Uc5Uk5Ia0Ym7Qz0Bv5Ah3Yp9Xp4Vw2Ds2Tc0Nx 6Fo7Px5Zl2Wb4Qj1Ab2Gk8Yz7Pk6Ss5Bp0Qv7Dt4 Ee2Bg9Re9Db7Sj6Cg4Mi[/color]
      Ответить

    Добавить комментарий