Куча говна / Говнокод #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 nepeKamHblu_nemyx, (Updated )

Комментарии (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 лет.

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

    Классический UNIX:
    Устройство могло быть блочным (диск, лента) или символьным (терминал, ком порт, тот же самый терминал)
    Символьные устройства не кешировались, а блочные всегда кешировались.

    Чтобы иметь доступ к диску без кеша (например, для разбиения его) одно устройство
    могло иметь два разных /dev :блочное и символьное. В солярис до сих пор так.


    Solaris:
    блочные устройства кешируются, символьные нет.
    Диск может иметь два устройства: символьное и блочное.


    NT:
    Разделения на устройства нет: устройства не кешируются (если драйвер явно не включил кеш),
    так что кеширование происходит только на уровне файловой системы.

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

    FreeBSD:
    От блочных устройств попросту отказались: стало примерно как в винде.

    Linux:
    Есть и блочные, и символьные. Диски блочные.
    Символьные устройства кешировались файловой системой на уровне VFS (как в винде)
    Блочные тоже кешировались своим кешем (см page cache vs buffer cache).

    Сначала каждый диск имел два устройства (как в UNIX и Solaris), Oracle даже
    советовал использовтаь явно символьное (у оракла свой кеш)

    С версии 2.2 стало можно отказатьсяя от кеша у блочного устройства с помощью O_DIRECT.

    Но данные кешировались два раза (в VFS и на уровне блочного устройства)
    С версии 2.6 кеш объденили (теперь в блочном кеше тупо ссылки на кеш VFS).

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

      Значит, «сикабельность» не имеет отношения к блочности, и могут быть блочные устройства без seek и символьные с seek?
      Ответить
      • Ну блочное без seek это что-то совсем странное... Вряд ли такое в природе есть.
        Ответить
        • а лента? она сикабельна, но очень медленная. Она ниразу не рендом аксесс
          Ответить
            • Например, драйвер запоминающего устройства на магнитной ленте позволяет ядру системы воспринимать это устройство как запоминающее устройство с произвольной выборкой.

              (c) Морис Бах
              Архитектура UNIX.


              Кстати, у лент не было файловой системы: отсюда у нас tar и cpio
              Ответить
      • Да, диски сикабельны, хотя сикабельность у ленточных накопителей мягко говоря тормозила.
        У терминала сикабельности не было по понятным причнам
        Ответить
        • Кстати, были стримеры без seek (когда подключался внешний обычный магнитофон, нужно было вручную перемотать на начало записи и вручную нажать клавишу «PLAY»; хотя точно мотать было не нужно, драйвер сам пропустит лишние блоки по заголовкам) и стримеры с seek (это уже специальные устройства, на которых перемотка включалась программно).
          Ответить
          • Были даже специальные алгоритмы для таких вот устройств, где seek очень дорогой..

            Тащемто Stream во многих языках наследник той самой ленты
            Ответить
            • А помнишь цифровые видеокассеты форматов DV и miniDV? Они появились после VHS и использовались в основном в видеокамерах, плееров для DV было не достать. Так вот фирмы «Сони» и «Панасоник» придумали свои варианты кассеты с микросхемкой (несовместимые друг с другом), в которую можно было записать табличку расположения фильмов (время начала фильма от начала кассеты). Можно было автоматически найти нужный фильм по его номеру, но для этого магнитофон должен был предварительно «откалибровать» кассету: отмотать её на самое начало и отсчитать ленту от начала кассеты.
              Ответить
              • помню смутно: я мало интересовался цифровым видео, хотя обычные VHS я конечно менял в обменнике. Том и джери, американские фильмы, и настройка телевизора, который ловил видик на третьем (или четвертом?) "диапазоне".

                Зато я помню, что какие-то чуваки в 90-х пытались использовать видео-кассеты для хранения данных. Погугли "АрВид -- Архиватор на Видео" . Делали это хитрые на выдумку наши соотечественники.

                А обосраться на несовместимости стандартов всегда все умели: DVD+R, DVD-R
                Ответить
                • Стандартов было вообще море. У «Сони» ещё была аналоговая кассета «Video8» и цифровая «Digital8», которые в продукции других фирм не использовались. И карта памяти у них была «Memory Stick», которая тоже больше нигде не использовалась...

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

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

    Foo::Foo(const Petuh& p):m_jaicho(SnestiJaichoOchenMonogoKoda(p)) {}


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

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

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

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

    В моем коде я оперирую указателем на Petuh. Но содержание петуха мне похуй. И чтобы не инклудить себе неебический Petuh.h (мне похуй на precompiled headers пока) я делаю неполный класс:

    class Petuh;

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

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

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

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

      Но и в инт я бы не кастил, а то потом программу будет сложно перенести с 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»

        Нифига себе! Век живи, век учись (постом выше дезинфа).
        Ответить
  • почему "inline specifier is redundant on a global static function"? Типа её и так и так комплиятор заинлайнит без моего разрешения, раз она все равно только внутри модуля и есть?

    а не статическую он может прокопировать везде (если она инлайн) или вставить там адрес ее (и дальше уже линкер как-нить разбереца)?
    Ответить
    • > почему "inline specifier is redundant on a global static function"?

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

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

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

            На O2 норм.

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

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

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

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

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

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

      З.Ы. В няшной другие правила про инлайн.
      Ответить
      • спасибо) моя проблема в том, что я не догадался почитать про inline, тогда как в секции 2 в explanation всё написано https://en.cppreference.com/w/cpp/language/inline

        Теперь понятно, что external linkage функция (static или функция анонимного неймспейса), невидимая снаружи модуля трансляции (это я знал, так как это совпадает с няшной) не имеет смысла быть inline, ведь линкеру не придется ничего смердживать.

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

        Использовать кастомные расширения типа always_inline?
        Или не пытаться руками крутить колеса у едущего автомобиля (Перефразируя Пи) ?
        Ответить
        • Нормальный конпелятор сам справится. Х.з. что там у icc крышу снесло.
          Ответить
            • Ну инлайн вроде и идут в комдаты.

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

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

        Разница между static inline и просто static может интерпретироваться компилятором как подсказка типа "ты попробуй по возможности заинлайнить эту функцию". Чтобы более детально разобраться, можно попробовать проштудировать стандарт крестоговна и там найти про то, как static и inline взаимодействуют для функции (правда может оказаться, что там нихуя нет про это), но вряд ли там будет написано "если у вас static функция, то если добавить еще и inline, то нихуя не изменится, и компилятор обязательно сгенерирует точно такой же код, как и просто static". Так что эта жалоба от ReSharper - «'inline' specifier is redundant on a global static function» является хуйней. Разница вполне может быть.
        Ответить
        • А inline как хинт для инлайна вообще описан в стандарте?
          Ответить
        • Кста-а-а-а-ти, а ведь «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?
                Ответить
                  • Интересно, а эта схема самовозбудится от своей гомоиконности или придёт к какому-то состоянию?
                    Ответить
                • Это какой-то старый логисим? У меня там прям значения битов видно в этих квадратиках и кружочках.
                  Ответить
          • > Кста-а-а-а-ти, а ведь «cppreference» нас всех (включая «Решарпер») наебали.

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

    https://ibb.co/TK4dVFc


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

                          Upd: мобильный мегафно и /3 открывает
                          Ответить
                      • Про охуевшеть ровайдеров я не знал. Если заблокировали одну страницу, блокировать весь сайт - это несправедливый пиздец какой-то. Я могу и не подозревать подставы, что у меня куча клиентов с определенных провайдеров отвалилась.
                        Ответить
              • Когда мельком увидел «/3», подумал: «Ну нифига себе, одну восьмую адресного пространства заблокировали!»

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

                    Судя по изменившемуся хэшу граватара — 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 и заебать страйкера, чтобы тот таким же образом потёр его персональные данные, как у гуеста?

                    Вроде бы, кто-то пытался с ВК бодаться таким образом, но закономерно соснул.
                    Ответить
              • Где вы на сайте роскомговна смотрите какие именно урлы заблокированы?
                Ответить
                    • Этот сайт дописывает от себя, какие URL могут быть затронуты («affected» = «затронуто» в данном случае). Если РКГ блокирует URL, то «isitblockedinrussia» на всякий случай показывает айпишник и домен. Если РКГ блокирует айпишник, то «isitblockedinrussia» на всякий случай показывает известные ему домены.
                      Ответить
  • Питух имеет enum: A, B, C.

    Питух хочет функцию, которая возвращает этот enum или "Error".

    В каких-то языках питух берет монаду мейби
    В каких-то делает nullable тип.

    Что питух делает в C++?

    Кроме случаев тяжелой норкомании
    #define VALS A,B,C
    enum Petuh {VALS};
    enum PetuhWithError {VALS, ERROR};

    У меня идей нет

    Как помочь питуху, если он хочет именно енум (чтобы там инт был под капотом)?
    Сыграть во что-то с юнионом?
    Ответить
      • У нас на проекте есть спицальная обертка на 2 варианта, где Error - второй.
        Ответить
      • >>Since C++17
        :((
        Допустим, питуху еще не подвезли 17ю

        > Variant is not allowed to allocate additional (dynamic) memory.
        годно!))
        Ответить
    • 1. std::optional.
      2. out-parameters.
      3. Тупл <Petuh, bool>.
      4. Кинуть исключение, но даже я так не сделал бы.
      Ответить
      • питух хочет бесплатности и не умеет в 17, остаются только 2
        Ответить
    • петух сделал структуру из двух полей и потёк в общем
      Ответить
      • Можно, конечно, и просто инт возвращать, а потом кастить в энум, но предварительно проверять, например, что инт не равен -1 (пусть это будет код ошибки).

        Но такой вариант мне тоже не нравится.
        Ответить
        • случайно вернуть число за пределами enum, и получить UB

          но можно прпобовать, в конце концов питух хочет писать код на грани
          Ответить
          • Я сам, кстати, зассал так делать как-то раз, поэтому в проекте у меня были две функции со свищами, которые энумы переводили в инты и наоборот )))
            Ответить
          • enum class Petuh {
               Begin = 0,
               End = 100,
            };
            static_cast<Petuh>(42);


            Это убэ?
            Ответить
            • Кстати, мы, вроде бы, это уже когда-то обсасывали. Что-то типа, «кастить энумы в инты и обратно не безопасно, но все известные компиляторы делают это без UB».

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

              Но если ты подразумеваешь, что у тебя там от 0 до 100 значений, то тут см. начало комментария.
              Ответить
              • The static_cast operator can explicitly convert an integral value to an enumeration type. If the value of the integral type does not fall within the range of enumeration values, the resulting enumeration value is undefined

                В VC можно
                Ответить
              • alues of unscoped enumeration type are implicitly-convertible to integral types. 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. If the underlying type is fixed, the values can be converted to their promoted underlying type.
                Ответить
                • корорче похуй, будет так
                  enum Direction :INT8 { down, left, right, up };
                  constexpr INT8 DIRECTION_NOT_SET = -1;
                  Ответить
              • Нет, у меня тут енум ровно такой, как я написал. Тогда пойду лучше исправлю такое в коде. Какой анскилл )))
                Ответить
            • Да.
              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 или как там. А вот макрос для крейтфайла не искоренить ((
                          Ответить
                          • Да, в min. В min_idx, к счастью, не раскроется.

                            А вот в «std::min()», сука триждыблядская, раскроется!
                            Ответить
                              • Прости, я тебя наебал, тут не раскроется.
                                Раскроется вот тут:
                                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 сам по себе (как в лиспе)
                                                  Ответить
                                                  • слушай, ну как-то же написали
                                                    * фронт энды компиляторов
                                                    * блюющего единорога
                                                    * решарпер С++ и силайн
                                                    * линтеры и прочие стат анализаторы

                                                    как-то же парсят значит
                                                    Ответить
                                                    • > как-то же парсят значит

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

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

                                                            Хотя я даже на счет JS не уверен
                                                            И в SQL тоже
                                                            Ответить
                                                  • Стандартизаторы пока тоже не очень представляют, поэтому не торопятся, лол.
                                                    Ответить
                                              • Проще добиться наследства от нигерийского принца?
                                                Ответить
                                                • Проще сменить пол и стать нигерийской принцессой такого принца и унаследовать его нигерийское королевство.
                                                  Ответить
                                              • >там код по сути есть AST,
                                                именно потому парсер лиспа написать намного проще, чем парсер С++, да:)

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

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

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

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

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


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

                      да, я тоже люблю в какую-нить функцию вместо FOO_PETUH случайно передать FO_PETUH и получить непонятную оишбу
                      Ответить
    • Несмотря на волатильность валют, в том числе роста стоимости доллара до 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ы конечно.

        Просто сам факт вызыавает бугор
        Ответить
  • Нелегкая занесла меня собрать 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, а потом научили его и сишечку тоже собирать.
            Ответить
            • Я шестую студию из сосноли не собирал, поэтому нмейк считай не юзал. А следующие вроде уже с мс-елдой шли.
              Ответить
        • > нахуя двигать

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

          Всё лучше, чем помоище от старых студий, где чёрт ногу сломит из какого сдк какая утилита прилетела. И не дай бог что-то старое удалить.
          Ответить
          • а разве 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
                                                  Ответить
                                                  • >есть 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 наверное и сейчас ставят крест на прыщах
                                                                Ответить
                                                                  • А 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?
                    Ответить
                    • Можно, но это ж то же самое) Всё равно уже поштучно тулы звать.
                      Ответить
  • Почему области памяти процесса называют "сегменты"? Чтобы питухи путали их с сегментами x86, или исторически, типа .data -- DS, .text -- CS итд?

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

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

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

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

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

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