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

    0

    1. 1
    Просто оффтоп #9

    #1: https://govnokod.ru/20162 https://govnokod.xyz/_20162
    #2: https://govnokod.ru/25329 https://govnokod.xyz/_25329
    #3: https://govnokod.ru/25415 https://govnokod.xyz/_25415
    #4: (vanished) https://govnokod.xyz/_25472
    #5: https://govnokod.ru/25693 https://govnokod.xyz/_25693
    #6: (vanished) https://govnokod.xyz/_26649
    #7: https://govnokod.ru/26672 https://govnokod.xyz/_26672
    #8: https://govnokod.ru/26924 https://govnokod.xyz/_26924

    Запостил: nepeKamHblu_nemyx, 30 Октября 2020

    Комментарии (422) 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://2ch.hk/b/arch/2020-10-24/res/231628646.html

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

      Эти два червя, собранные из вечной мерзлоты в Арктике, были среди 300 размороженных для анализа в 2018 году

      После оттаивания два червя начали двигаться и есть. Одному 32 000 лет, а другому 41 700 лет.


      Почему двач? Вот почему, там смешнявка:

      По новым сведениям динозавры вообще не были ящерами, а были пернатыми. Короче это просто очень большие петухи. Зачем тебе очень большие петухи? Ты петух?
      Ответить
      • > Одному 32 000 лет, а другому 41 700 лет.

        Ну то есть даже третьего перла не видели, да?
        Ответить
    • vanished
      Ответить
      • За виндовый, наверное. Кеш на уровне файлухи более точный, может хинты от приложух учитывать.
        Ответить
      • Попытаюсь разобраться в терминологии. К дискам обычно произвольный доступ, можно запросить любой блок, они «сикабельные». Из последовательного порта можно читать только последовательно, seek не работает.

        Значит, «сикабельность» не имеет отношения к блочности, и могут быть блочные устройства без seek и символьные с seek?
        Ответить
        • Ну блочное без seek это что-то совсем странное... Вряд ли такое в природе есть.
          Ответить
        • vanished
          Ответить
          • Кстати, были стримеры без seek (когда подключался внешний обычный магнитофон, нужно было вручную перемотать на начало записи и вручную нажать клавишу «PLAY»; хотя точно мотать было не нужно, драйвер сам пропустит лишние блоки по заголовкам) и стримеры с seek (это уже специальные устройства, на которых перемотка включалась программно).
            Ответить
            • vanished
              Ответить
              • А помнишь цифровые видеокассеты форматов DV и miniDV? Они появились после VHS и использовались в основном в видеокамерах, плееров для DV было не достать. Так вот фирмы «Сони» и «Панасоник» придумали свои варианты кассеты с микросхемкой (несовместимые друг с другом), в которую можно было записать табличку расположения фильмов (время начала фильма от начала кассеты). Можно было автоматически найти нужный фильм по его номеру, но для этого магнитофон должен был предварительно «откалибровать» кассету: отмотать её на самое начало и отсчитать ленту от начала кассеты.
                Ответить
                • vanished
                  Ответить
                  • Стандартов было вообще море. У «Сони» ещё была аналоговая кассета «Video8» и цифровая «Digital8», которые в продукции других фирм не использовались. И карта памяти у них была «Memory Stick», которая тоже больше нигде не использовалась...

                    Я обратил внимание на интересное расширение уже существующего формата: они к кассете DV добавили микросхемку, запоминающую позицию ленты. Это упрощает поиск, хотя seek всё равно дорогой.

                    Про «Арвид» слышал. Вроде предел ёмкости трёхчасовой VHS-кассеты около четырёх гигов. «Арвид» хранил один гигабайт, чтобы обеспечить сохранность данных на затёртой ленте. По тем временам даже это казалось очень много.
                    Ответить
    • а
      Ответить
    • vanished
      Ответить
    • vanished
      Ответить
      • Не вижу причин так не делать, кроме одной. Лучше всё-таки запилить фабрику инстансов, а то потом захочешь вместо консоли писать в файл, а значит нужно будет другой хендл получать.

        Кстати, а как такую фабрику написать? Через вспомогательную анскильную функцию createKoko(KokoType t), в которую можно, в принципе, и темплейтов добавить, чтобы было скилльно, или с помощью дружественного класса, а в исходном сделать приватными конструкторы?

        Или, может быть, в самом классе для этого сделать статический метод (тоже с приватными конструкторами)?
        Ответить
      • Да можно, раз хочется.
        Ответить
    • vanished
      Ответить
      • vanished
        Ответить
      • Пиздец )))

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

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

        В общем, написание «квази-питуха» – это кмк анскил и говнокод, я бы так не сделал )))

        Но и в инт я бы не кастил, а то потом программу будет сложно перенести с 16-битной системы на 32-х битную.
        Ответить
        • «It is not often useful to forward-declare a class in a source file, but it can be useful in a header file. In particular it's common to forward-declare a class in a library's public header file and use pointers to that type as opaque handles. The class definition remains private to the library but user code can pass around pointers to objects of that class without ever knowing what the class's implementation looks like. This works particularly well when the pointers are smart pointers»

          Нифига себе! Век живи, век учись (постом выше дезинфа).
          Ответить
        • > в int

          Не в int, а в uintptr_t.
          Ответить
      • Да стандартный приём, и в qt и в std юзается.
        Ответить
    • vanished
      Ответить
      • > почему "inline specifier is redundant on a global static function"?

        А откуда ты взял это? Почему это вдруг redundant?
        Ответить
        • vanished
          Ответить
          • Просто ReSharper - говно. Я могу привести реальный пример, когда разница в сгенерированном между static inline и просто static функцией будет.
            https://godbolt.org/z/eK39nT - для "ICC". На компиляторе "GCC" и "Clang" я реального примера не нашел.
            Ответить
            • vanished
              Ответить
              • А хуй знает, с вижуалстудией я не работаю, но там разница тоже теоретически может быть на каких-то примерах и с какой-то комбинацией флагов. Это у авторов MSVC надо узнавать, как конкретно их компилятор реагирует на такую хуйню

                Но из той же вижуалстудии (как IDE) вполне можно компилировать каким-то другим компилятором, например тем же ICC. Или этот решарпер как-то особо настраивается на какой-то конкретный компилятор?
                Ответить
            • > -Os

              На O2 норм.

              Оптимизация по размеру - странная хуйня. У меня в msvc иногда почему-то при оптимизации по скорости бинарь получался меньше.

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

        static в крестах означает "только в этой единице трансляции". Ты можешь иметь разные одноименные статики в разных единицах трансляции. В каждой будет своя копия (если все вызовы проинлайнились - не будет). Некоторые крестобляди считают что статик не нужен т.к. есть анонимные неймспейсы.

        inline в крестах означает... нет, не просьбу заинлайнить. А указание, что одноименные функции с inline линкер может смержить в одну. Её реализация во всех единицах трансляции обязана быть одинаковой. Иначе нарушение ODR и UB (линкер выберет случайную из них). Методы классов автоматом получают inline, поэтому с ними нет проблем в хедерах. Свободные функции с телом в хедере надо пометить самому.

        Инлайнить конпелятор может все что ему вздумается (если ты не юзаешь расширение noinline).

        А static inline для крестов - это какая-то неведомая хуйня. Я даже не скажу, что должно получиться в итоге. Скорее всего статик победит и функция не дойдет до линкера, поэтому инлайн заигнорится.

        З.Ы. В няшной другие правила про инлайн.
        Ответить
        • vanished
          Ответить
          • Нормальный конпелятор сам справится. Х.з. что там у icc крышу снесло.
            Ответить
            • vanished
              Ответить
              • Ну инлайн вроде и идут в комдаты.

                Кстати, начиная с с++17 можно инлайн переменные мутить (да, звучит как бред, кресты такие кресты).
                Ответить
                • > можно инлайн переменные мутить

                  Зачем нам придумывать новые ключевые слова, ведь от этого может поломаться код? Кто-то мог таким именем назвать какую-нибудь переменную или еще какую-то хуйню! Лучше возьмем уже известное ключевое слово, и чтоб оно делало какую-то хуйню для какой-то другой хуйни, где оно раньше не имело смысла. Давно уже пора неймспейсы для ключевых слов запилить.
                  Ответить
        • > А static inline для крестов - это какая-то неведомая хуйня. Я даже не скажу, что должно получиться в итоге. Скорее всего статик победит и функция не дойдет до линкера, поэтому инлайн заигнорится.

          Разница между static inline и просто static может интерпретироваться компилятором как подсказка типа "ты попробуй по возможности заинлайнить эту функцию". Чтобы более детально разобраться, можно попробовать проштудировать стандарт крестоговна и там найти про то, как static и inline взаимодействуют для функции (правда может оказаться, что там нихуя нет про это), но вряд ли там будет написано "если у вас static функция, то если добавить еще и inline, то нихуя не изменится, и компилятор обязательно сгенерирует точно такой же код, как и просто static". Так что эта жалоба от ReSharper - «'inline' specifier is redundant on a global static function» является хуйней. Разница вполне может быть.
          Ответить
          • А inline как хинт для инлайна вообще описан в стандарте?
            Ответить
            • Внезапно, но да. Я-то думал, что это из новых крестов выпилили, ан нет.
              Ответить
            • http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf
              10.1.6 The inline specifier

              > The inline specifier indicates to the implementation that inline substitution of the function body at the point of call is to be preferred to the usual function call mechanism.
              Ответить
          • Кста-а-а-а-ти, а ведь «cppreference» нас всех (включая «Решарпер») наебали. Вот открываю я свежий драфт и вижу:
            A function declaration (9.3.3.5, 11.4.1, 11.9.3) with an inline specifier declares an inline function. The
            inline specifier indicates to the implementation that inline substitution of the function body at the point of
            call is to be preferred to the usual function call mechanism. An implementation is not required to perform
            this inline substitution at the point of call; however, even if this inline substitution is omitted, the other rules
            for inline functions specified in this subclause shall still be respected. [Note: The inline keyword has no
            effect on the linkage of a function. —end note]

            § 9.2.7/2, N4842
            Так что да, «static inline» может отличаться от «static».
            Ответить
            • Какой багор )))
              Ответить
              • А почему у тебя на аватарке все четыре входа — x1?
                Ответить
                • Какая копипаста )))

                  И все выходы тоже х1. Может это просто ширина шин? Типа х1, х8, х16?
                  Ответить
                  • И даже небо x1, и даже Аллах x1.
                    Ответить
                    • Интересно, а эта схема самовозбудится от своей гомоиконности или придёт к какому-то состоянию?
                      Ответить
                • Это значит что там один "бит" в каждом входе. В Logisim можно делать чтоб там было много, и делать один провод с кучей битиков - https://i.stack.imgur.com/qTYHp.png
                  Ответить
                  • Какой скилл )))
                    Ответить
                  • Это какой-то старый логисим? У меня там прям значения битов видно в этих квадратиках и кружочках.
                    Ответить
                    • Попробуй экспортировать изображение.
                      Ответить
                      • Ага, точно. Галочка "printer view" при экспорте так делает.
                        Ответить
            • > Кста-а-а-а-ти, а ведь «cppreference» нас всех (включая «Решарпер») наебали.

              Только вот меня не наебали. Я сразу заподозрил, что это хуйня какая-то.
              Ответить
              • Мне вчера мой друг принёс гидравлический насос
                И сказал, что это ландыши
                Но меня не наебешь – насос на ландыш не похож
                Насос большой, а ландыш маленький
                Ответить
                • vanished
                  Ответить
                • Он скуп на слова, как де Ниро;
                  С ним спорит только больной.
                  Его не проведешь на мякине,
                  Он знает ходы под землей.
                  Небо рухнет на землю,
                  Перестанет расти трава –
                  Он придет и молча поправит все,
                  Человек из Кемерова.
                  Ответить
    • vanished
      Ответить
    • Багой какор )))

      https://ibb.co/TK4dVFc


      Номер и дата основания для внесения в реестр | Орган, принявший решение о внесении в реестр | Ограничение доступа
      2020-10-26-2801 от 29.10.2020 | МВД | ограничивается к странице
      Ответить
      • https://isitblockedinrussia.com/?host=govnokod.ru
        Попал под раздачу.
        Ответить
        • не заметил блока
          Ответить
          • Повезло с провайдером. Или не повезло, если он через DPI SNI блочит.
            Ответить
        • https://blocklist.rkn.gov.ru/#anchor

          А тут говнокода нет... Вернее, говнокод наверняка есть, но информации про сайт «govnokod.ru» там нет.
          Ответить
      • Напоминаю, что у нас есть Matrix chat, на чёрный день https://app.element.io/#/room/#govnokod:matrix.org
        Ответить
        • На случай, если после блока страйко станет мухожуком.
          Ответить
        • vanished
          Ответить
        • Ещё один чатик с тредами и подсветкой кода: https://govnokod.zulipchat.com
          Ответить
      • Это у какого провайдера такие замечательные тёмные паттерны?
        Ответить
      • vanished
        Ответить
        • А какую страничку заблочили?
          Ответить
          • Ответить
          • govnokod.ru/3, там guest8 спамил закладками. Хм, после рефреша только айпишники по ссылке госта.
            Ответить
            • P.S. https://reestr.rublacklist.net/search/?q=govnokod.ru
              Ответить
              • Пипец. Это что получается, сегодня говнокод официально забанили, а завтра он уже будет недоступен? Какой багор )))

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

                  И в этом я с ней согласен.
                  Ответить
            • vanished
              Ответить
              • Мне пишет, что не найдена такая страница.

                А https на говнокоде нет в принципе.
                Ответить
                • Заблочили /3, а не /32.
                  Ответить
                  • vanished
                    Ответить
                  • vanished
                    Ответить
                    • vanished
                      Ответить
                      • Значит, твой провайдер — долбоёб. Обратись в техподдержку.

                        Кстати, попробуй http://govnokod.ru./3 открыть.
                        Ответить
                        • vanished
                          Ответить
                          • vanished
                            Ответить
                            • vanished
                              Ответить
                            • Почему для другого? Точка в конце — это просто канонический вид домена, про который криворукие уебаны (разработчики «DPI») не знают. Разработчики «Youtube», кстати, тоже: на домене «youtube.com.» не показывается реклама.
                              Ответить
                            • Добавил точку в конце домена через F12->Application->Storage->Cookies и смачно потёк.
                              Ответить
                    • Нет, префикс там по звёздочке должен быть (ну и для https блокируется домен в случае SNI и IP в случае отсутствия).
                      Ответить
        • КАКОЙ БАГОР ))))))))))))))))))))))))

          А за что заблояили выяснили?
          Ответить
          • Т.к. заблокировали по инициативе МВД, то это значит, что на сайте было что-то про изготовление или приобретение наркотиков. Видимо, спам гуеста про гидру и какие-то телеграм каналы был причиной.
            Ответить
      • русня соснула?
        Ответить
    • https://www.securitylab.ru/blog/personal/80na20/340731.php

      Какая-то криптохуйня называется «УЁБА» (UEBA) )))
      Ответить
    • Кстати, а ведь качалка ютуба, которую удалили с гитхаба, уцелела в его арктическом бекапе?
      Ответить
      • А ещё она сохранилась в
        https://github.com/github/dmca/tree/416da574ec0df3388f652e44f7fe71b1e3a4701f
        стараниями какого-то гитомага. Какой багор )))
        Ответить
        • У них поди одно хранилище на все репы? Чтобы дедупликация форков работала.
          Ответить
    • Ого, у меня говнокод тоже отвалился. Оперативно провайдер подсуетился )))
      Ответить
      • Ага, у меня тоже теперь.
        Ответить
        • vanished
          Ответить
          • Весь на хттп и хттпс.
            Ответить
            • vanished
              Ответить
              • Потому что в реестр запрещённых сайтов внесли только /3.
                Ответить
                • vanished
                  Ответить
                  • Потому что провайдеру лень блокировать только /3.
                    Ответить
                    • vanished
                      Ответить
                      • Этой хуйне с блокировками уже семь лет. Неужели для тебя это новость?
                        Ответить
                        • Уже отпустило, кстати. Походу кто-то из провайдера сидит на ГК )))
                          Ответить
                          • Мобильный мегафно пускает, а проводной Билайн режет наглухо, без масок.

                            Upd: мобильный мегафно и /3 открывает
                            Ответить
                        • vanished
                          Ответить
                • Когда мельком увидел «/3», подумал: «Ну нифига себе, одну восьмую адресного пространства заблокировали!»

                  Потом понял, что «/3» — это URL говнокода, а не маска подсети.
                  Ответить
              • А за что /3 заблочили? За то, что уёбок проспамил рекламой запрещённых веществ?
                Ответить
                • vanished
                  Ответить
                  • ...Сказал юзер, который наспамил.
                    Ответить
                  • > vanished
                    > -999

                    Какой багор )))

                    guest8 was ejected.
                    Ответить
                    • Кара небесная.

                      Судя по изменившемуся хэшу граватара — ejected с концами.
                      Ответить
                      • Помянем.

                        Кстати, сможешь на ngk показывать предыдущую версию комментов до ваниша?
                        Ответить
                        • Дампы всех загруженных страниц есть, нужно их распарсить и табличку со старыми версиями запилить… Передали в инженерный отдел.
                          Ответить
                    • > -999
                      Кстати, фиктивные -999: любой голос их обнуляет. Ослабел Дух Говнокода со времён жёстких +100500, ослабел.
                      Ответить
                      • Есть версии как можно было так обосраться?
                        Ответить
                        • Возможно с тех пор поменялась логика апдейта циферок: реальный пересчёт вместо просто инкремента/декремента. Надо бы проверить на древних заминусованных комментах.
                          Ответить
                          • всё равно же анскильно
                            реальный пересчет может осуществляться с учетом статичной базы
                            где 0 для обычных постов, и -999 для необычных
                            Ответить
                        • Есть.
                          Нужно быть PHP программистом, который использует MySQL (это важно)!

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

                          Страйко поменял значение только в той колонке, где хранился результат.
                          Ответить
                          • Я наговнокодил почти так, как ты сказал, только сумма и кто проголосовал считаются и хранятся независимо. Поэтому если поправить сумму, а потом кто-то проголосует, то она инкрементнится/декрементнится.
                            Ответить
                            • ну и правильно. Дублирование информации, денормализация, и вытекающая из всего этого неконсистентность -- важная часть культуры проектов на СУБД MySQL.
                              Ответить
                          • >>>"Такой программист в одной табличке хранит конкретные голоса в виде отдельных записей, а в другой их сумму. Каждый раз при голосовании он пересчитывает сумму, и сохраняет получившееся значение в колонке."

                            Грязная клевета. Я бы никогда до такого не додумался. Я всегда использую что-то вроде:
                            echo mysql_result(mysql_query("SELECT COUNT(id)
                            FROM votes WHERE comment_id=".$comment_id), 0, 0);
                            Ответить
                    • Интересно, а может ли syoma сослаться на GDPR и заебать страйкера, чтобы тот таким же образом потёр его персональные данные, как у гуеста?

                      Вроде бы, кто-то пытался с ВК бодаться таким образом, но закономерно соснул.
                      Ответить
                • vanished
                  Ответить
                  • Я смотрю на http://isitblockedinrussia.com/
                    Ответить
                    • vanished
                      Ответить
                      • Этот сайт дописывает от себя, какие URL могут быть затронуты («affected» = «затронуто» в данном случае). Если РКГ блокирует URL, то «isitblockedinrussia» на всякий случай показывает айпишник и домен. Если РКГ блокирует айпишник, то «isitblockedinrussia» на всякий случай показывает известные ему домены.
                        Ответить
    • vanished
      Ответить
      • vanished
        Ответить
      • 1. std::optional.
        2. out-parameters.
        3. Тупл <Petuh, bool>.
        4. Кинуть исключение, но даже я так не сделал бы.
        Ответить
      • vanished
        Ответить
        • Можно, конечно, и просто инт возвращать, а потом кастить в энум, но предварительно проверять, например, что инт не равен -1 (пусть это будет код ошибки).

          Но такой вариант мне тоже не нравится.
          Ответить
          • vanished
            Ответить
            • Я сам, кстати, зассал так делать как-то раз, поэтому в проекте у меня были две функции со свищами, которые энумы переводили в инты и наоборот )))
              Ответить
            • vanished
              Ответить
              • Кстати, мы, вроде бы, это уже когда-то обсасывали. Что-то типа, «кастить энумы в инты и обратно не безопасно, но все известные компиляторы делают это без UB».

                Но у тебя тут точно УБ, потому что у тебя в энуме два элемента (0 и 100), а 42 нет, так что это багор.

                Но если ты подразумеваешь, что у тебя там от 0 до 100 значений, то тут см. начало комментария.
                Ответить
              • Да.
                A value of integral or enumeration type can be explicitly converted to a complete enumeration type. If the
                enumeration type has a fixed underlying type, the value is first converted to that type by integral conversion,
                if necessary, and then to the enumeration type. If the enumeration type does not have a fixed underlying
                type, the value is unchanged if the original value is within the range of the enumeration values (9.7.1), and
                otherwise, the behavior is undefined. A value of floating-point type can also be explicitly converted to an
                enumeration type. The resulting value is the same as converting the original value to the underlying type of
                the enumeration (7.3.10), and subsequently to the enumeration type.

                § 7.6.1.8/10, N4842

                А вот кастить 0 или 100 в петуха безопасно.
                Ответить
                • Гост, я анскильный.

                  enum class Petuh : uint32_t  {
                     Begin = 0,
                     End = 100,
                  };
                  static_cast<Petuh>(42);


                  Вот так можно?
                  Ответить
                  • А хуй его знает, надо Стандарт сильнее рыть.

                    В принципе, «хуй его знает» — уже достаточный повод для того, чтобы так не делать.
                    Ответить
                    • Согласен. Я просто хочу кинуть в морду коллегам, которые так сделали. Но для этого желательно доказать, что это UB.
                      Ответить
                  • Вот тут умные люди пишут, что можно: https://wiki.sei.cmu.edu/confluence/display/cplusplus/INT50-CPP.+Do+not+cast+to+an+out-of-range+enumeration+value.

                    По Стандарту вроде бы действительно всё так:
                    >>> If the enumeration type has a fixed underlying type, the value is first converted to that type by integral conversion, if necessary, and then to the enumeration type.
                    Each enumeration defines a type that is different from all other types. Each enumeration also has an underlying
                    type. The underlying type can be explicitly specified using an enum-base. For a scoped enumeration type, the
                    underlying type is int if it is not explicitly specified. In both of these cases, the underlying type is said to be
                    fixed. [...]

                    § 9.7.1/5
                    For an enumeration whose underlying type is fixed, the values of the enumeration are the values of the
                    underlying type. [...]

                    § 9.7.1/8
                    Ответить
                    • подведем итог:

                      Если Инью не указал андердайинг тайп, то С++ может использовать любой. Например такой, в котором число 42 не представить. И тогда убе.

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

                      Если же ты не попал в андрелайн тайп (например, :uint8_t и а ты писннул туда -100500) то это UB

                      так?
                      Ответить
                      • > любой

                        Не любой, а такой в который входят все значения enum'а. Т.е. если я добавлю в енум 0 и 255 то, по идее, там будет как минимум uint8_t. Или нет?
                        Ответить
                        • да, точно, понял. underlying type же явно выбирается из заданных типов если его явно не задать


                          If the underlying type is not fixed, the value is convertible to the first type from the following list able to hold their entire value range: int, unsigned int, long, unsigned long, long long, or unsigned long long.
                          Ответить
                        • короче, Даже вот это не убе
                          enum class Petuh  {
                             Begin = 0,
                             End = 100,
                          };
                          static_cast<Petuh>(42);

                          потому что минимальный тип, способный вместить 0 и 100 это int, а он минимум 1 байт, а значит 42 туда влезет

                          а в от 130 может и не соснуть, да?
                          Ответить
                          • В случае «enum class» — не UB.

                            Почитай в Стандарте правила выбора underlying type, там питушня какая-то запутанная.
                            Ответить
                  • А есть реальный пример, когда "enum" принципиально лучше "#define" ?

                    Ну допустим я сделаю
                    typedef struct {uint32_t Petuh_val;} Petuh;
                    #define BEGIN (Petuh){.Petuh_val = 0}
                    #define END (Petuh){.Petuh_val = 100}
                    
                    Petuh a = END;

                    Чем это хуже?
                    Ответить
                    • по енуму можно итерироваться, по всем его значениям
                      да и писать его можно проще

                      enum Petuh {A, B, C,D}

                      не нужно руками указывать значения
                      Ответить
                      • > по енуму можно итерироваться, по всем его значениям
                        К сожалению, без ручных костылей нельзя.
                        Ответить
                        • можно, если явно знать первое и последнее значение, не?
                          Ответить
                          • А если в середине дырка?
                            Ответить
                          • Это и есть ручные костыли. Для этого придётся в енум явно задавать что-то вроде
                            enum class Petuh {
                            __BEGIN,
                            
                            A = __BEGIN,
                            B,
                            C,
                            
                            __END
                            };

                            , иначе при любом изменении енума у тебя всё поедет.
                            Ответить
                            • можно еще рядом сделать PetuhStart и PEtuhEnd

                              Но если там дырка, то жопа
                              Ответить
                    • Первое и достаточное преимущество — «enum» можно положить в отдельный неймспейс. Ситуация, когда ты подключаешь хедер, а тебе в глобальный неймспейс сыпятся какие-то ёбанные дефайны — это полнейшее говно.
                      Тот, кто «windows.h» подключал, в цирке не смеётся.
                      Ответить
                      • В windows.h хотя бы понятно какой дефайн от чего... Если HuiPizda(), то HP_DJIGURDA.

                        Хотя дефайн для CreateFile, конечно, бесит.
                        Ответить
                        • // int min = array[min_idx];  // СУКАЁБАННАЯНАХУЙ СДОХНИТЕ ЁБАННЫЕ АВТОРЫ ВИНДОВС.Х!!!11
                          int min_element = array[min_idx];
                          Ответить
                          • -DNOMINMAX -DLEARN_AND_MEAN или как там. А вот макрос для крейтфайла не искоренить ((
                            Ответить
                            • >LEARN
                              :)))

                              LEAN же, чтобы быстрее собирать
                              Ответить
                              • Есть такой теорем-прувер от мелкомягких https://leanprover.github.io/about/
                                Ответить
                            • Да, приходится NOMINMAX И WIN32_LEAN_AND_MEAN вхуяривать в каждый проект.
                              Ответить
                              • а у тебя нету шаблона для настроект проекта или общего .h файла (его можно по идее девайнуть же до подключения всего)?
                                Ответить
                                • Нет, мне «Windows.h», к счастью, приходится добавлять не в каждый проект.

                                  «вхуяривать в каждый проект» читать как «вхуяривать в каждый проект, куда вхуяривается "Windows.h"»
                                  Ответить
                          • >min_idx
                            min в макрос раскрылся, да?
                            Ответить
                            • Да, в min. В min_idx, к счастью, не раскроется.

                              А вот в «std::min()», сука триждыблядская, раскроется!
                              Ответить
                              • так вот тут раскроется имя переменной?
                                int min = array[min_idx];
                                Ответить
                                • Прости, я тебя наебал, тут не раскроется.
                                  Раскроется вот тут:
                                  int arr[] = { 1, 2, 3 };
                                  int min = std::min(std::begin(arr), std::end(arr));  // error C2589: '(': illegal token on right side of '::'
                                  Ответить
                      • структуру же тоже можно, а дефайны заменить на const(expr)?

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

                        Ну так-то вместо define можно использовать специальные constexpr (или consteval ? Чем они блядь отличаются?) функции, которые что-то присваивают в структуру с хуйней, и уже их засовывать в неймспейсы. По сути та же хуйня получится.
                        Ответить
                        • Да можно пойти дальше и как в джавке сделать - енум это класс, значения енума - это инстансы этого класса. Можно будет всякие методы прикручивать, удобно.
                          Ответить
                          • А в инстансе int для сравнения? или сделать их синглотанами и передавать const ref, чтобы как в жабе?

                            Кста, в крестах enum class тоже есть, там вроде на скоп влиет
                            Ответить
                            • Ну enum class только скопом да возможностью указать тип отличается, к сожалению. Методы к нему только как свободные функции можно привернуть.
                              Ответить
                              • итого:

                                Я делаю интерфейс
                                Делаю три его объекта статически (они идут в data?)
                                Делаю на них константные указатели
                                Передаю везде указатели
                                Сравнивать указатели легко и просто, весят они мало
                                По указателю могу вызвать вротуальный метод даже, если я ловкач

                                ДА?
                                Ответить
                                • Ну тип того. Либо просто класс с интом внутри, если указателей не хочется.
                                  Ответить
                                  • а можно такой шаблон сделать, чтобы он создавал такой енум, и метод, возвращающий все его значения в виде итератора?
                                    Ответить
                                    • Ну да, если немного макросами обмазать - даже to_string/from_string можно сгенерить. Ждём метаклассов, там можно будет без макросни.
                                      Ответить
                                      • а нету готового в бусте где нить?

                                        [rotoeb_mode] чем метаклассы лучше шаблонов?
                                        Ответить
                                        • Вместе с метаклассами завезут конпайлтайм рефлексию и конпайлтайм генерецию кода. Можно будет написать что-то такое:
                                          meta_enum MyEnum {
                                            Foo,
                                            Bar
                                          };
                                          И meta_enum пробежится по полям MyEnum и сгенерит весь бойлерплейт для to_string, from_string, values и т.п.

                                          Почти гомоиконность. Хотя труъ гомоиконность в кресты не завезти конечно.
                                          Ответить
                                          • Это типа как AST transformations в груви? из них можно будет иметь доступ к AST и его править?

                                            Лол) кресты возненавидят еще больще

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

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

                                                А найти класс с глубиной иерархии больше восьми, и выдать пизды автору?
                                                Ответить
                                          • Можно уже сейчас сделать, через пхп-вставки такое накодогенерировать, никаких метаклассов не надо.
                                            Ответить
                                            • через PHP вставки у тебя не будет доступа к AST же, если только у тебя нету парсера С++ на PHP, нет?
                                              Ответить
                                              • Он енумы и структуры в отдельном файле опишет чтобы генератор не усложнять. Многие проекты сейчас так и делают. Тот же protobuf или clang.
                                                Ответить
                                                • ой, ну описить страктуры спец языком и сгенерить потом код на С++ умели еще во времена CORBA, тут не так интересно
                                                  Ответить
                                              • Ты серьезно собираешься ебаться с AST крестоговна? Примерно хоть представляешь, какой там пиздец будет?

                                                С каким-нибудь лиспом всё просто и понятно, там код по сути есть AST, а что ты будешь делать с крестами с их rvalue, lvalue, xvalue, унарные, бинарные операторы, всякие правила левоассоциативности и правоассоциативности?
                                                Ответить
                                                • После раскрытия шобло-ёбло - вроде не так уж и страшно. Килобайтными именами скрипт не напугаешь, а структуры на этом этапе довольно простые остаются.

                                                  З.Ы. А что операторы? Их ассоциативность уже разобрали, все ADL провели, подходящую перегрузку выбрали - вместо них просто конкретная функция осталась.
                                                  Ответить
                                                  • А если надо работать с AST шаблонов? Или например если надо поработать с AST который получился от раскрытия такого-то шаблона?
                                                    Ответить
                                                    • > если надо работать с AST шаблонов
                                                      > такого-то шаблона

                                                      Да пошло оно впизду...
                                                      Ответить
                                                    • >А если надо работать с AST шаблонов?

                                                      А если надо работать с AST метаклассов??
                                                      Ответить
                                                  • Ну вот я не очень себе представляю, как с этим можно адекватно работать, если код на крестах это какая-то неведомая хренотень, которая превращается в AST по каким-то сложным правилам, а не AST сам по себе (как в лиспе)
                                                    Ответить
                                                    • слушай, ну как-то же написали
                                                      * фронт энды компиляторов
                                                      * блюющего единорога
                                                      * решарпер С++ и силайн
                                                      * линтеры и прочие стат анализаторы

                                                      как-то же парсят значит
                                                      Ответить
                                                      • можно шланг как-то пристроить для этой задачи же
                                                        https://clang.llvm.org/docs/IntroductionToTheClangAST.html
                                                        Ответить
                                                        • Ну так его и пристраивали под это, об этом писали на хабре кстати, и я эту статью конечно же упоминал на говнокоде. https://govnokod.ru/25558#comment473369
                                                          Ответить
                                                      • > как-то же парсят значит

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

                                                          стандарт есть, но мы его реализуем на 89.1%?
                                                          Ответить
                                                          • Ну если конпеляторы, которым это реально надо, умеют только 95% стандарта, то что говорить про остальные тулы? Особенно подсказки в IDE которые работают с заведомо битым и недописанным кодом.
                                                            Ответить
                                                            • Крестостандарт давно уже пора в кунсткамеру поместить, вместе со всеми крестостандартизаторами, компиляторами крестов и всеми этими крестоIDE, которые что-то в этом говне пытаются подсказывать.
                                                              Ответить
                                                            • и еще макросы в рантайме раскрывают, угу

                                                              пиздец, вот это мне в С++ конечно не нравится, что никто не может нормально и полностью реализовать весь стандарт

                                                              Хотя я даже на счет JS не уверен
                                                              И в SQL тоже
                                                              Ответить
                                                    • Стандартизаторы пока тоже не очень представляют, поэтому не торопятся, лол.
                                                      Ответить
                                                • Проще добиться наследства от нигерийского принца?
                                                  Ответить
                                                  • Проще сменить пол и стать нигерийской принцессой такого принца и унаследовать его нигерийское королевство.
                                                    Ответить
                                                    • от нигерийского принца нигерийская принцесса может унаследовать только нигерийский СПИД
                                                      Ответить
                                                      • И нигерят.
                                                        Ответить
                                                        • К 39 годам Мариам Набататанзи Бабирье из Уганды стала матерью сорока четырёх детей и все они родились от одного мужчины. При этом Мариам растит детей в одиночку, так как настолько большая семья мужу оказалась не нужна.

                                                          https://zen.yandex.ru/media/dvoe_iz_lartsa/jenscina-iz-ugandy-v-39-let-mat-44-detei-5d605b4ba06eaf00aeec2e8e
                                                          Ответить
                                                • >там код по сути есть AST,
                                                  именно потому парсер лиспа написать намного проще, чем парсер С++, да:)

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

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

                                                    > а тут именно фишка в том, что я могу не текст генерить, а AST. И читать тоже AST

                                                    Я практически уверен, что ты не сможешь (и никто не сможет) адекватно работать с этим говном. https://i.imgur.com/ZnvvvyK.jpg
                                                    Ответить
                          • Т.е. выходит так, что энумы как в сишке оказываются нахуй не нужны, и их можно заменить хуйней с классами.
                            Ответить
                            • Ну у енума всё-таки сахар покороче чем у хуйни с классами. Вот завезут метаклассы - тогда можно будет оторваться по полной.
                              Ответить
                    • Проверки типов нету: можно пихать значения одного "енума" в другой.

                      У меня подгорает от этого после некоторых сишных хедеров, где фиг найдёшь какие именно флаги для чего.


                      З.Ы. А, там уникальное поле в каждой структуре...
                      Ответить
                      • >де фиг найдёшь какие именно флаги для чего.

                        да, я тоже люблю в какую-нить функцию вместо FOO_PETUH случайно передать FO_PETUH и получить непонятную оишбу
                        Ответить
                      • В конкретно моем примере проверка типов есть.
                        Ответить
    • test
      Ответить
    • Доллар по 80.53
      Ответить
      • Несмотря на волатильность валют, в том числе роста стоимости доллара до 80 руб., в России удается сохранять макростабильность, заявил журналистам пресс-секретарь президента России Дмитрий Песков.

        По его словам, сейчас любая мировая валюта «находится под серьезным негативным давлением целого ряда обстоятельств в мировой экономике». Влияние, например, оказывают динамика потребления энергоресурсов и изменение цен на нефть и нефтепродукты. «Но в целом, если говорить о макростабильности, как говорил президент, ее удается поддерживать», — сказал Песков.
        Ответить
    • >> И да, чёрт возьми, я решил перенести в один файл уже устоявшийся подход в большинстве фреймворков >> — ООП и MVC концепцию.
      https://habr.com/ru/post/523664/

      Пыхеры используют слвоа не понимая их значения
      Ответить
    • решил тут почитать про jigsaw. Мне давно нравилась идея модульной зависимости, чтобы питухи не писали в бизнес-логике new JLabel(), и чтобы линкер jlink собирал нужную мне джаву с нужными модулями

      И вот, хочу почитать

      Make Way for Modules! (30m video overview, Mark Reinhold)
      Prepare for JDK 9 (50m video, Alan Bateman)
      Modular Development with JDK 9 (60m video, Alex Buckley)
      Project Jigsaw: Under the Hood (50m video, Alex Buckley)

      будьте ВЫ ПРОКЛЯТЫ!!!
      Ответить
      • Какой багор )))

        А текстом вообще нету?
        Ответить
        • Ну есть "The State of the Module System" которая slightly outdated, и с которой всё началось, и "Quick-Start Guide" (весьма поверхностный)
          Ну и JEPы конечно.

          Просто сам факт вызыавает бугор
          Ответить
    • https://amazing-projects.ru/
      Чья файка?
      Ответить
    • Нелегкая занесла меня собрать 2015-й (14й) студией код. А у меня 2017-я. Говносборщик -- километровый батник, который делает cmake, которая генерит vcxproj и запускает его по захардкоженным путям))

      Багор 1
      Помоги Даше найти msbuild и его VCTargetsPath

      2019 (16.): %VSINSTALLDIR%MSBuild\Microsoft\VC\<vers ion>\
      2017 (15.): %VSINSTALLDIR%Common7\IDE\VC\VCTargets\
      2015 (14.): с:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\<versio n>\

      Вместе с msbuild перемещается и тулчейн
      2015 (14) "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat""
      2017(15) "C:\Program Files (x86)\Microsoft Visual Studio\Community\VC\Auxiliary\Build\vcva rs64.bat"

      "Зайцы прыгают, как блохи, над затоптанным ручьем"

      Багор 2
      До 2017 msbuild знал свои таргеты (которые импортируются обычно в каждом проекте) и хранил их в "HKLM\SOFTWARE\Microsoft\MSBuild\4.0 "

      Начиная с 2017 завезли "VsDevCmd.BAT", который устанавливает таргеты в переменную VCTargetsPath, и с тех пор BuildTools (куда входит msbuild) перестали знать таргет.

      Теперь если запустить msbuild без VsDevCmd можно получить чудесное, логичное и удобное

      >The imported project "C:\Microsoft.Cpp.Default.props" was not found.

      Между c:\ и M должен распологаться VCTargetsPath
      <Import Project="$(VCTargetsPath)\Microsoft.Cpp. Default.props"/>
      но его нет.

      Питухи срут кирипичами, и правят реестр
      https://stackoverflow.com/questions/8497931/msbuild-does-not-contain-a-value-for-the-vctargetspath-property

      MS советует юзать VsDevCmd
      https://developercommunity.visualstudio.com/content/problem/270758/vc-20153-v1400-v140-toolset-for-desktop-does-not-s.html

      Какой все таки багор
      Ответить
      • Именно поэтому я за cmake.

        Хотя там с детектом студии и сдк тоже траблы случаются. Но в среднем по палате - сойдёт.
        Ответить
        • и без симейка на самом деле всё бы работало, если бы питухи не хардкодили пути и не мутили воду) из окошка tools все можно собрать

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

          Это как если бы на прыщах сообщили "в новой версии дистрибутива gcc перемещается в /home/tools/compilers/The Canonical Corporation/v.923/20.04/gcc"


          ты застал nmake, кстати?
          Ответить
          • Ну мейк как мейк. Со своими особенностями, как и любой другой мейк. Ничего особо интересного.
            Ответить
            • Да я чето его вспомнил, потому что в моем децтве вроде бы только nmake и был в студии.
              Потом вышел .net, потом питухи портировали antы всякие (был nant, лол), потом майки сделали msbuild, а потом научили его и сишечку тоже собирать.
              Ответить
              • Я шестую студию из сосноли не собирал, поэтому нмейк считай не юзал. А следующие вроде уже с мс-елдой шли.
                Ответить
                • у меня есть смутное ощущение, что еще и в 2005-й студии msbuild умел только .net, но могу пиздеть
                  Ответить
          • > нахуя двигать

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

            Всё лучше, чем помоище от старых студий, где чёрт ногу сломит из какого сдк какая утилита прилетела. И не дай бог что-то старое удалить.
            Ответить
            • а разве M$ не предоставляет дохер образы для всего своего зоопарка? чтобы не было этого головняка с воспроизводимостью сборочного окружения
              Ответить
              • Начиная с 19 вроде. До этого было ewdk и билдтулз, но там своя атмосфера.
                Ответить
                • виндобляди должны страдать
                  Ответить
                  • Ага. Причём если обычные сдк обычно без проблем ставятся, то драйверные вообще какой-то индус за елду писал. Они то ломают друг друга, то не работают без старой версии... Тот ещё паззл.
                    Ответить
                    • Да и обычные иной раз могут не встать

                      Я как-то пытался поставить WinSDK 7.1, а он не ставился, потому что нашел у меня более новый .net. А я .net вообще не заказывал. Причем тут блядь .net?

                      А сколько было пролито слёз от того, что бета-версия студии и не удаляется, и новая не ставится, пока старая есть?
                      Ответить
                      • > бета версия

                        Зачем? Зачем? Тебе с релизными мало секса?
                        Ответить
                        • мне хватало, но я такое видел у коллег давно-давно. Хотели новые фичи попробовать. А потом правили какие-то циферки в реестре чтобы всё заработало
                          Ответить
                          • Беты от мс лучше вообще не ставить за пределами виртуалок и тестовых тачек. Да и вообще любые беты, наверное...
                            Ответить
                            • но от MS особенно

                              Насрать в реестр недокументированным значением по недокументированному адресу, забыть его удалить, и при установке слующей версии по этой причине выдавать неинформативное сообщение об ошибке с кучей говна в логе в недокументирвоанном формате, чтобы петухи потом процмоном мониторили реестр, искали кто что где читает, и пытались угадать что где исправить
                              Ответить
                              • В драйверных сдк забавная хуйня была. В каждой из версий по-отдельности была некая тула. Но при установке обеих версий эта тула аннигилировала и её приходилось подкладывать вручную.
                                Ответить
                                • Ну вот у меня есть ощущение, что Build Tools 2015 не прописали себе VCTargetsPath в реестре ровно потому, что увидели у меня 2017, и решили "ну, нас будут запускать через VsDevCmd, а переопределять переменной окружение значение в реестре мы не умеем"

                                  А тулу небось еще хуй найдешь отдельно?
                                  Ответить
                                  • Ну ставишь одну версию, прикапываешь тулу, ставишь вторую версию, подкладываешь тулу обратно.

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

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

                                        Более старые конечно же нет.
                                        Ответить
                                  • делаешь чистую виртуалку, на которую ставишь окружение для говностарой студии
                                    отдельную виртуалку для говносредней
                                    отдельную виртуалку для говнотекущей
                                    и течешь

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

                                      А вот дебажиться со 100500 виртуалок как-то не айс. Мне и так под таргет виртуалки нужны.
                                      Ответить
                                      • в целом сомнительная тема собирать один и тот же продукт несколькими поколениями компиляторов
                                        это, видимо, когда ты большой опенсорс, и не хочешь, чтобы тебе было стыдно за продукт, который ты передаешь в сорцах?
                                        Ответить
                                        • у меня есть ветка с версией 1 от 2012-го года, которую я до сих по поддерживаю
                                          и ветка с версией 2, свежаяя

                                          прикажете их одним компилятором собирать?
                                          Ответить
                                          • а в чем проблема?
                                            если у тебя в таргете версии 1 XP, а последний компилятор её не может, тогда это причина
                                            а две ветки почему надо двумя компиляторами собирать?
                                            Ответить
                                            • Во-первых может правда немочь, бывали такие случаи вроде:)

                                              Во-вторых новый компилятор -- поменяется версия CRT, а люди плагины написали под старую версию.

                                              Например под питона нужно собирать .dllки именно той версией компилятора, какой собран сам питон.

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

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

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

                                                  А вот в CLion проект всегда строится на cmake: там "настроект проекта" и нет вовсе: они все в CMakeLists.txt или как там оно
                                                  Ответить
                                                  • в жабе папка вообще не нужна
                                                    есть pom.xml, мавен разберется и сам всё вытащит, ну и жава-иде тоже не тупая, будет пользоваться им же
                                                    через 5 лет тоже

                                                    у фронтопитухов условный package.json (или тем более package-lock.json) описывает границы дозволенных совместимых версий, от которых зависит твоё чудо

                                                    и только программисты мышкой в вижуал студии кипятят

                                                    и, наконец, чтобы взять из vcs проект на любом языке, получить воспроизводимый результат и потечь, билд всего лишь надо начать как взрослые писать в ЧИТАТЬ ДАЛЕЕ >>>
                                                    Dockerfile // docker-compose.yml // .gitlab-ci.yml
                                                    Ответить
                                                    • porn.xml
                                                      Ответить
                                                    • >есть pom.xml
                                                      Maven это один из возможных вариантов.
                                                      Кроме него можно
                                                      * взять гредл (build.gradle)
                                                      * использовать настройки самого IDE (что плохо, так как не скриптуется на CI)

                                                      Какую-то часть настроек IDE умеет затянуть из мавена или гредла (как минимум зависимости) и настроиться на них

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

                                                      Кроме того, есть специфичные для IDE настройки: код стайл, инспекции итд. Их в мавен не сунешь.

                                                      В вижал студии не обязательно тыкать мышкой (хотя и рекомендуется, лол).
                                                      Можно писать vcxproj для msbuild напрямую (он документирован конечно на троечку)
                                                      Можно использовать cmake, он сгенерит проект для студии (студия это поддерживает)

                                                      Докер под виндуос, когда я последний раз проверял, запускал под капотом урезанную виртуалку с виндой на hyper-v.
                                                      Так что по сравнению с линуксом (где докер почти бесплатен) это довольно тяжело как для разработки (для CI, разумеется, в самый раз).

                                                      Но может быть что-то уже изменилось


                                                      Забавно, что в VSCode майки уже всё поняли, и там вроде бы все настройки у них можно писать рукой в json
                                                      Ответить
                                                    • > кипятят

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

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

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

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

                                          Поэтому я немного завидую всяким фронтендерам, у которых из релизов только мастер.
                                          Ответить
                                    • Ухх бля, хорошо что в нормальных ОС можно собирать не в "IDE", а компилятором со сборочными скриптами.
                                      Ответить
                                      • на винде тоже можно, тут пол треда как раз про msbuild, и даже вспомнили про nmake, да и cmake работает
                                        Ответить
                                        • А с этим msbuild тоже такая ебля, что нужно кучу разных версий msbuild ставить в разные виртуалки?
                                          Ответить
                                          • в идеальном мире ты собираешь всё последним msbuildом, и течешь. Но есть нюансы

                                            Ебли скорее с разными SDK

                                            Как и многие вещи у майрософт, тут бывает два сценария

                                            * Всё работает из коробки автоматом, и ты охуеваешь от крутости
                                            * Неизвестная неустраняемая ошибка, попробуйте переустановить виндуос

                                            Какой сценарий тебе выпадет -- это уже как повезет
                                            Ответить
                                            • Под SDK понимается компилятор, линкер, дебаггер, какие-то либы, так? А почему в винде является проблемой держать несколько этих SDK в одной ОС без анальной ебли с кучей виртуалок?
                                              Ответить
                                              • >Под SDK понимается компилятор, линкер, дебаггер, какие-то либы, так?
                                                не совсем
                                                Вот тут см https://govnokod.ru/27072#comment592095

                                                компилфятор и линкер с CRT это тулчейн, а SDK это набор либ и хедеров для конкретных задач (WinSDK, DirectxSDK, DriverSDK итд)


                                                >А почему в винде является проблемой держать несколько этих SDK
                                                Потому что криворукие ебланы делали изначально, в одно место в реестре писали итд

                                                Теперь уже стало лучше
                                                Ответить
                                                • > компилфятор и линкер с CRT это тулчейн, а SDK это набор либ и хедеров для конкретных задач (WinSDK, DirectxSDK, DriverSDK итд)

                                                  Какой пиздец. Лучше б просто говорили "тут у нас компилятор и линкер", "тут у нас отладчик", "тут у нас какая-то говноIDE которая может взаимодействовать с компилятором и отладчиком", "тут у нас какие-то хедеры для какой-то хуйни" а не придумывали какие-то говнотермины. Где-то под "SDK" понимают всю эту хуйню целиком, ну там и IDE, и компилятор, и отладчик, и какие-то хедеры с хуйней. "SDK" это вообще "software development kit", так что под этот термин вообще всю хуйню можно запихнуть.
                                                  Ответить
                                                  • Microsoft не любила разделять тулы по их техническому предназначению. Вместо этого, они разделяли их по маркетинг-булщиту и баззвордам.

                                                    Например, юниксоид говорит: у меня есть почтовый сервер, есть ldap, есть компилятор, линкер, и документация

                                                    А MS говорит: у нас есть групваре для решения задач бизнесa exchange, платформа для централизованного управления пользователями AD, новейшая среда для создания интерактивных приложений visual studio (в которую входят разумеется и компилятор и sdk и даже тула для перехвата сообщений окна) и инструментарий "developer network" (в который входит как документация, так и тулы)

                                                    КА-ША!
                                                    Ответить
                                                    • > А MS говорит: у нас есть групваре для решения задач бизнесa exchange, платформа для централизованного управления пользователями AD, новейшая среда для создания интерактивных приложений visual studio (в которую входят разумеется и компилятор и sdk и даже тула для перехвата сообщений окна) и инструментарий "developer network" (в который входит как документация, так и тулы)

                                                      О да, опять вспоминается бессмертная классика
                                                      https://web.archive.org/web/20170609000236/http://delphikingdom.ru:80/asp/viewitem.asp?catalogid=254


                                                      > Поэтому, если Вы будете продавать программу по частям, он купит у Вас часть, причем наименьшую. Остальное будет пылиться у вас на полке. И вам придется уволить программистов, которые это писали. Поэтому ПРОДОВАЙТЕ ВСЕ СКОПОМ. Наш гамбургер является неотъемлемой частью Кока-колы. “ЭМЭСДОС” был неотъемлемой частью ПК ИВМ. А “Основняк” частью “ЭМЭСДОС”. В результате за год, я получил 3 миллиона людей готовых с руками оторвать книги по “ЭМЭСДОС” и по “Основняку”.

                                                      и так далее
                                                      Ответить
                                              • Потому что вместо того, чтобы просто складывать всё в отдельные каталоги, они пытались ставить всё в кучу. А потом 10 лет постепенно пытались сделать как у всех, попутно раскладывая ещё больше граблей. Теперь там вообще чёрт ногу сломит.
                                                Ответить
                                      • > собирать ide

                                        Смех смехом, а devenv реально может работать как соснольная команда вместо сборочной системы. И блядь делает это быстрее чем сраный мсбилд...
                                        Ответить
                                        • и чем это лучше msbuildа?

                                          Самый бергент, это когда IDE хранит свои говнонастройки в проприетарном формате, и не умеетничего собирать без гуя

                                          И ты рядом пишешь свой скриптик для сборки. Я всё повторяю два раза два раза.

                                          До завоза гредла в Intellij было примерно так же
                                          Ответить
                                          • Оно собирает те же самые vcxproj что и мсбилд. Но быстрее.

                                            Меньше процессов спавнит вроде, сверяясь по сборочным логам. Для винды же процесс заспавнить - тяжелейшая задача.
                                            Ответить
                                            • я думал, там один и тот же код по копыцем, нет?

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

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

                                                  >когда гуйня умеет больше чем коммандлайн.
                                                  классический отсос майков, угу.

                                                  Блядь, почему сразу не делать по человечески: есть либа для сборки, и есть гуйная и консольная ее клиенты
                                                  Ответить
                                                  • Сам мсбилд не читает т-логи. Хотя команды, запускаемые им, их пишут.

                                                    З.Ы. Или читает, но уже слишком поздно, когда прогрузился и хмл распарсил.
                                                    Ответить
                                                    • Кстати, ты писал таргеты для msbuild?
                                                      Их можно писать на .net
                                                      Ответить
                                                      • Не, я только через хмл параметры тулы описывал. Прям на шарпе писать - это оверкилл какой-то, имхо.
                                                        Ответить
                                                        • ну если ты неможешь выразить что-то декларативно., то вполне можно писнуть. Всё лучше, чем батфайлы ебашить

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

                                                            На самом деле, я счастлив, что уже несколько лет в мсбилд руками лазить не надо. Забыл эту хуйню как страшный сон.
                                                            Ответить
                                                            • Вендорлок это проблема, если ты делаешь что-то кросс-платформенное. Если твой код гвоздями прибит к NT (начная с фреймворков, и кончая дерганьем Win32API и COM), то msbuild это меньшая из твоих проблем)

                                                              Но у нас на работе обычно cmake генерит эти проекты, как я вижу, а в пет-прожекте можно и в студии накликать: она сама правит xmlки

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

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

                                                                Если бы дальше шли по пути мсбилд - это был бы тупик и эпик фейл.
                                                                Ответить
                                                                • Я игрался с .NET активно до появления Core, и прыщи меня мало волновали.

                                                                  Но всякие WCF, WF, и упомянутые выше COM Interop и P/Invoke к Win32API наверное и сейчас ставят крест на прыщах
                                                                  Ответить
                                                                  • WCF Core 3.1.0 / November 26, 2019; 11 months ago
                                                                    Operating system Linux, macOS, Windows
                                                                    Platform .NET Framework, .NET Core

                                                                    > windows forms (, wpf)

                                                                    https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/
                                                                    Ответить
                                                                    • А WF?
                                                                      >https://github.com/dmetzgar/corewf
                                                                      >ну такое

                                                                      >2019
                                                                      ну я ж грю, давно это было, эх

                                                                      Остаеца
                                                                      >COM Interop и P/Invoke к Win32API
                                                                      Ответить
                                                                      • P/Invoke не смотрел, но вроде тоже уже довезли. говорю, они там абсолютно охуевшие и пилят так, что у ротоёба фантазии не хватит про каждую их фичу истории придумывать
                                                                        Ответить
                                                                        • PInvoke завезли наверняка сразу же, я про вызовы Win32API)
                                                                          Ответить
                                                                  • Ну конкретно в этих модулях были чистейшие кресты без завязки на платформу.
                                                                    Ответить
                                                                    • а как вы отвязались от платфрмы? через CRT, или у вас все свое, или там высокоуровневая логика была?
                                                                      Ответить
                                                                      • Ну где-то std с бустом, где-то всё своё, где-то интерфейсики над функциями оси.
                                                                        Ответить
                                                                        • под crt я имел ввиду и std тоже: всю стандартную библиотеку
                                                                          как это по умному сказать?
                                                                          Ответить
                                                                          • Эм, ну я бы сказал "стандартную библиотеку", "std", хуй знает)
                                                                            Ответить
            • Ну что помоище -- это правда.

              Есть ведь по сути четыре концепции же:
              * тулчейн (они же билд тулс): cl, link, копуляторы ресурсов и либы CRT
              * SDKи разные (.h и .lib и тулы)
              * msbuild (который все собирает)
              * IDE

              Всё перемешано в кашу, и аккуратно разложено в самые неождианные места, чтобы и в голове у тебя тоже каша образовалась
              Ответить
              • Ну да. И в новой схеме они таки пытаются все это разделить. Теперь можно несколько версий конпелятора иметь, к примеру. Раньше только самую свежую для каждой версии студии. И не дай бог в ней бага.
                Ответить
            • Сегодня пригрезилась такая операционная система:

              Все SDK и тулы ставятся в

              /system/devel/[sdk_name]
              или в
              /home/[username]/devel/[sdk_name]/version

              внутри каждой [sdk_name] есть папка /bin, которая автоматически попадает в path, когда user пишет

              set role=devel

              Есть так же папка inc, которая попадает в переменную Include
              а так же папка lib, которая попадает в lib.
              например
              /system/devel/jdk/11/..
              или
              /system/devel/ddk/42/..
              или
              /system/devel/msvc/14/..



              Все нужные для рантайма питушни точно так же ложатся в папки с именем не devel, а runtime, и есть у всех.

              В некоторых sdk /devel/[sdk_name]/lib это ссылка на /runtime/[sdk_name]/lib

              В той ОС про скриптушков говорят "лол, а у них devel нету, только runtime, они и не разработчики вовсе"

              Чтобы удалить SDK, достаточно удалить папку в devel/[sdk_name].

              Если хочешь выбрать конкретную версию sdk, то пишшеь

              set role=devel sdk:jdk=14
              и именно она попадает в path
              тоже самое с vc.

              никакого реестра, никаких PETUH_HOME

              Если я говорю "sdk petuh, version 14", то она всегда или в /system/devel/petuh/14
              или в
              /home/guest6/devel/petuh/14
              Ответить
          • На прыщах кстати реальное гцц точно так же по каталогам с версиями и архитектурами разложено, проверь. В bin только "драйвер".
            Ответить
            • Ты имеешь ввиду, что это просто точка входа в тулчейн, а реальный компулятор выбирается в зависимости от?
              Ответить
              • Да, именно так. У реальных имя целевого тулчейна в имени.
                Ответить
                • ну это нормально. Нехватало мне еще вручную вызввать отдельно cc, cpp, c++, as, ld, ar, вот это всё
                  Ответить
                  • Да напрямую тоже норм. Когда надо слепить блоб вместо эльфа, к примеру.
                    Ответить
                    • а разве нельзя ключиком gcc сказать "не линкуй, а выдай объектные файлы" а потом линкер скриптом их как-нить тоже через gcc?
                      Ответить
                      • Можно, но это ж то же самое) Всё равно уже поштучно тулы звать.
                        Ответить
    • внимание сегодня у нас в студии в фокусе в луче прожекторов ЭКСПЕРТ ТЕЛЕКАНАЛОВ НТВ И РОССИЯ-24

      https://vk.com/wall-104202895_43705
      Ответить
    • Почему области памяти процесса называют "сегменты"? Чтобы питухи путали их с сегментами x86, или исторически, типа .data -- DS, .text -- CS итд?

      Почему тогда у файлов они "секции"?
      Ответить
      • Исторически сложилось? Вспомни сегментейшн фолт аля sigsegv, он ведь вроде до х86 даже был в юниксах.

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

          Кстати, как посмотреть сегменты у процесса? Секции мне наверное покажут readelf/objdump и dumpbin на винде и даже ImpEx в far:)

          А вот сегменты хз как: на винде есть VMMap, но оно показывает уже кусочки памяти с точки зрения менеджера VM
          Ответить
          • Их тоже должно быть видно в elf/pe. Все эти code/data size/base в опшнл хедере.
            Ответить
    • В аптеках медицинский спирт не продают, охуенно. Чтобы алкашня не покупала и не разводила?
      Ответить
      • Ну да. Остальные могут купить "раствор для дезинфекции" (кажется так называется).
        Ответить
        • бояру же
          а спирт по рецепту отпускают, но не в каждой аптеке есть вообще
          как и марганцовку, лол
          Ответить
          • Марганцовку можно купить в упомянутом тобой когда-то «хозмаге», где лежат семена и удобрения.

            В том же магазине можно купить калийную селитру, кристаллическую серу и древесный уголь.
            Ответить
            • Верните мне мой 2007.
              Ответить
            • P.S. Кассиру не покажется подозрительным, если я в «Ашане» возьму несколько пакетиков марганцовки и упаковку презервативов?
              Ответить
              • а зачем вообще марганцовка нужна обычному человеку? желудок промывать? и че то для цветов, да?
                Ответить
                • Ещё как морилку для дерева используют. Хотя и специальную морилку можно купить.
                  Ответить
                • Её добавляют в воду, чтобы поливать растения, да. Другого применения я не встречал.
                  Ответить
              • Для безвузных поясни, для чего такая кобенация?
                Ответить
                • Чтобы не болеть ЗППП
                  Ответить
                  • Ты уверен, что стоит добавлять туда марганцовку?
                    Ответить
                    • Использование растворов антисептиков является еще одним видом профилактики заражения половыми инфекциями. С этой целью используются как самые простые средства — растворы марганцовки, медицинский спирт, так и специальные препараты — мирамистин, хлоргексидин и аналоги.
                      Ответить
                      • > медицинский спирт

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

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

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

            А «косметическую» пить нельзя, потому что её бодяжат изо всяких отходов производства.
            Ответить
        • В моей юности был такой "растворитель бытовой "льдинка""
          Ответить
      • Уже несколько лет как все средства дезинфекции делают на изопропиловом спирте вместо этилового, чтобы не пили.
        Ответить
        • Но его ведь тоже можно пить.
          Ответить
          • Более того, наркотический эффект изопропанола раз в десять сильнее, чем у этанола. Но его не пьют, потому что он вызывает резкий рвотный рефлекс, и к нему не привыкают (по крайней мере, официально так считается).
            Ответить
            • Да и запах у него пиздец.
              Ответить
              • в период идиотии с антисептиками в апреле намазывать руки абсентом было дешевле, чем изопропиловыми 70% растворами
                абсент охуенно пахнет
                но немного липковат, это не оч
                Ответить
    • jQuery('.comment-vote:contains("999") .comment-vote-on').click()
      Ответить
    • Перекат!

      https://govnokod.ru/27086
      https://govnokod.xyz/_27086/
      Ответить

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