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

    −2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    https://habr.com/ru/post/465553/
    
    А правда, почему компилятор C++ позволяет писать такую хуету
    x+= x++ + ++x;
    x^=y^=x^=y;
    ?

    Запостил: IIIyqpymuHckuu_nemyx, 03 Сентября 2019

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

    • prog.cc:4:8: warning: unsequenced modification and access to 'x' [-Wunsequenced]
        x+= x++ + ++x;
         ~~  ^
      prog.cc:5:10: warning: unsequenced modification and access to 'x' [-Wunsequenced]
        x^=y^=x^=y;
         ~~    ^


      Позволяет, потому, что не считает себя умнее программиста.
      Ответить
      • В каких случаях этот warning фолсит?
        Ответить
        • False positive? False negative? Один фиг, не знаю.

          А включен и в GCC и в Clang по умолчанию.
          Ответить
          • Примеры и того, и того. Если UB можно детектить во время компиляции, то почему бы это не делать, и не кидать сразу error?
            Ответить
            • Можно и error, надо сказать treat warns as errors

              UB это не ошибка, UB это значит "разработчик знает лучше"


              Нельзя мешать разработчику. Нельзя анально огораживать, иначе будет Java.

              Может быть я ЗНАЮ какод получится и ХЧОУ именно его
              Ответить
            • > Примеры и того, и того.

              False positive - когда ворнинг появляется, а на самом деле все в порядке.

              False negative - когда все явно хуево, а ворнинга нет.

              А что ты имел ввиду под "фолсит" -- я хз.

              > Если UB можно детектить во время компиляции, то почему бы это не делать, и не кидать сразу error?

              -Werror, для данного случая. А в общем случае -fsanitize=undefined
              Ответить
              • Кстати, у шланга крутые санитайзеры не работают в «Windows». Они всё самое крутое реализовали только для «Линукса». Прыщебляди соснули, короче.
                Ответить
                • я просто исползую PVS ReSharper++ и текуку
                  Ответить
                  • Осторожно, а то ещё Карпова сюда кастуешь. Не из сериала «Глухарь», а того, кто продвигает блюющего единорога.
                    Ответить
                • Да, я как-то поставил под Линукс Qt Creator - ту же версию, что под виндой, а этот санитайзер на меня как накинется...
                  Ответить
                  • Я просто пишут на PHP в Notepad++, у меня нет никакх санитайзеров, и я теку

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

      — Василий, что с тобой? Ты уже третий час нажимаешь кнопки «0», «,» и пробел!
      — 0, 0, 0, 0, 0,
      Ответить
      • Именно поэтому я за «PHP».
        Ответить
      • как в си инициализировать массив на лям элементов, у кторого элемент 6334 равен 22, а осатльные -- нуль?

        чур это будет инициализатор, чтобы два раза не писать в память
        Ответить
        • Легко и просто:
          int arr[1000000] = { [6334] = 22 };

          http://ideone.com/6GnYdp

          Но я к тому, что в «U..» вообще нельзя создать массив на лям элементов.
          Ответить
          • в с89 не скопилица?

            >бще нельзя создать массив на лям элементов.
            динамиччьки мож? через кучку?
            Ответить
            • Нет, только в ISO C99 и дальше. С «GCC» работает в ISO C90.

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

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

                >в ISO C99
                VC соснет?
                Ответить
                • > и течем

                  > VC соснет?
                  В «VS» вообще поддержка «C» на уровне дна, и это печально.
                  Ответить
                  • на уровне крепенькой с89

                    я помню, как хотел VLA
                    а мне такие: брансбойт соси, std:vector<>ом тряси

                    Я грю: так блядь я СИ хочу а не кресты ваши ебаные
                    а вот хуй
                    Ответить
                    • std::vector однако не VLA. VLA можно наложить на любой кусок памяти и индексом туда-сюда вжик-вжик.
                      Ответить
                      • ну мне так ответили тогда,
                        помню я был озодачен

                        у этих ибланов даже CRT писана на плюсах с лямбдами
                        Ответить
                    • >> Я грю: так блядь я СИ хочу а не кресты ваши ебаные

                      А в чём разница? Даже в вакансиях пишут: «Требуется программист C/C++/1С».
                      Ответить
                      • c# еще
                        Ответить
                        • Жалко, что знание C-- нигде не требуется. Их два, кстати: один под названием «Sphinx» — на нём писа́ли скринсейверы для DOS; другой продвигает команда «Glasgow Haskell Compiler» — на нём руками никто не пишет. Друг с другом они несовместимы, просто название совпало.
                          Ответить
          • Кто godbolt.org положил? Верните обратно!

            UPD Спасибо.
            Ответить
            • >Кто godbolt.org положил?
              РКН.
              IP		143.204.101.7
              Decision 2-2102/2016 made on 2016-09-07 by суд.
              This block affects IP 143.204.101.7 and domain passion-hd.com.
              Ответить
              • Хм, у меня не заблочен.
                Ответить
                • Потому что божественный болт висит на нескольких айпишниках, из которых заблочен только один.
                  Ответить
                  • На мой болт гондон не натянули чтоле?

                    Какой bareback )))
                    Ответить
                  • Что-то типа рулетки?

                    Кстати, в интернетах бывает интереснее: попадаются глючные автономные системы; когда маршрут собирается через них, половина сайтов не работает. Способа явно указать маршрут я не знаю, LSR и SSR по факту игнорируются маршрутизаторами, потому что кто-то сказал, что поддерживать их небезопасно.
                    Ответить
                    • что-то типа круглого робина
                      Это стандартная практика, когда у имени 105000 адресов
                      ~$ dig yandex.ru A  
                      
                      ;; ANSWER SECTION:
                      yandex.ru.              84      IN      A       77.88.55.66
                      yandex.ru.              84      IN      A       5.255.255.55
                      yandex.ru.              84      IN      A       77.88.55.60
                      yandex.ru.              84      IN      A       5.255.255.60


                      часть ебланы заблочили.


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

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

                      Если вдруг они где-то пропадут, то админ получит сообщение.


                      Но транзитные автономки редко фильтруют траффик умышленно

                      Решения РКН применяют все таки ближе к пользователю
                      Ответить
                      • > в наше время крупные транзитные системы (котоыре за бабло продают право перегонять через себя траффик) все таки редко этим страдают
                        Зато если уж страдают, то так, что отваливается половина интернета:
                        https://blog.cloudflare.com/how-verizon-and-a-bgp-optimizer-knocked-large-parts-of-the-internet-offline-today/
                        Ответить
                        • ахаха, ну вот да

                          Но все таки это реже, чем в былые времена

                          Был такой инцидент 7007 в 1997м году
                          Тогда безумный врутер начал анонсить все известные ему прфиксы, причем дописывал им маску /24

                          Остальные роутеры решали что у него самый кузявый маршрут, и слали ему весь Интернет

                          И какое-то время примерно весь Интернет туда и шел

                          Тогда префиксы еще никак не фильтровали, не проверяли итд

                          Теперь такое уже не прокатит
                          Ответить
                        • Лучше бы они латентность своего ДНС нормальную сделали.
                          Ответить
                          • Яндекс.ДНС работает быстрее, чем ДНС моего провайдера, и возвращает нормальные значения, а не ссылки на заглушки. Но у «Яндекса» есть небольшая проблема: раз в месяц что-то отваливается и в течение нескольких часов некоторые запросы не возвращают ответа. К счастью, пото́м всё восстанавливается.
                            Ответить
                            • вот по этому я за 8,8,8,8
                              Ответить
                              • Как оказалось, маршрутизаторы некоторых интернет-провайдеров запросы к 8.8.8.8, к 8.8.4.4, к 208.67.222.123 и к 208.67.220.123 перенаправляют на свой собственный ДНС, который глючит и тормозит. Так они «борются с террористами».

                                Существуют ли прокси для DNS, чтобы это обойти?
                                Ответить
                                • подыми локальный рекурсивный днс
                                  Ответить
                                  • Я если я выхожу в «Интернет» с мобилки и не из дома, то мне нужно кокококомпилировать «BIND» для мобилки и подымать на ней?
                                    Ответить
                              • Я за «1.1.1.1».
                                Ответить
                            • > Яндекс.ДНС
                              Вангую, что ты и за красножопых голосуешь с понтом дела ты против хуйла.
                              Ответить
                              • Навальный велел голосовать за красножопых

                                говорит, это умная стратегия

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

                                Сёма не написал про жопу –— день прошёл впустую.
                                Ответить
                      • Автономки «Вымпелкома» («Билайна», т. е. бывшей «Корбины») иногда фильтруют транзитный трафик. Это тянется с древних времён, когда РКН ещё ничего не блокировал и законов о блокировках не было.
                        Ответить
                        • а зачем?
                          Ответить
                          • Лизали власти. Доказывали, как они успешно борются с «террористами». Чтобы не тратиться на DPI, блокировали по айпишнику (так что шаред-хостинги сосали). Извинений владельцам сайтов, которые ничего не нарушали, но случайно попали под ковровую блокировку, они не приносили, разумеется.
                            Ответить
                            • Понятно)
                              Это, конечно, отстой. Напоминает пиринговые войны из начал анулевых
                              Ответить
                          • Кстати, чисто теоретически на такую автономку можно настучать в IX, потому что фильтрация транзитного трафика — это явное нарушение правил, за которое следует исключение из обмена трафиком.
                            Ответить
                            • Если ты пиришься с ней в IX, то там есть правила, и все должны их соблюдать

                              Там вообще могут быть иностранные провы, которым на жаровские высеры похую

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

                          > Автономки «Вымпелкома»
                          Кстати, схуяли у них несколько AS?
                          Ответить
                          • С того же самого хуя, с которого российские опсосы до сих пор берут деньги за внутрисетевой роуминг, который в пятый раз (я со счёту сбился, в какой точно) отменили.

                            Короче: так исторически сложилось, потому что они поглощали мелкие компании.
                            Ответить
                            • Лол, точно, сардина же скупала на корню всякие пионернеты.
                              Ответить
                            • Мне кажется, что несколько автономок можно иметь и чисто для административного удобства и/или удобства маршрутизации.

                              Мне кажется, что закон это разрешает
                              Там в какой-то момент относительно легко перешли на 32х битные номера, и вроде номера теперь не дефицит

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


                              Но чаще всего оно и правда получается от поглащения

                              Купил пров, там своя AS, своя политика маршрутизации внутри (даже свой прот), хуй от нее избавишься сразу
                              Ответить
              • 12 server-99-84-254-29.ord50.r.cloudfront.net (99.84.254.29) [AS 16509] 36 msec 40 msec 36 msec
                route-views.ab>

                Ахах, тупая русьня облачный VPS блочит.
                Ответить
            • Так вот:
              struct Res {
                  int arr[1000000];
              };
              
              struct Res foo() {
                struct Res r = {.arr = {[6334] = 22}};
                return r;
              }


              foo:
                      push    r12
                      mov     edx, 4000000
                      mov     r12, rdi
                      xor     esi, esi
                      sub     rsp, 4000000
                      mov     rdi, rsp
                      call    memset
                      mov     rsi, rsp
                      mov     rdi, r12
                      mov     edx, 4000000
                      mov     DWORD PTR [rsp+25336], 22
                      call    memcpy
                      add     rsp, 4000000
                      pop     r12
                      ret


              https://godbolt.org/z/pfw87M
              Ответить
              • > push r12
                переведи на real mode

                я не обязан понимать языки второго десятилетия XXI века
                Ответить
                • Забавно, что в real mode я могу использовать 32-битные данные и даже 32-битные смещения (если перед этим в защищённом режиме установил подходящий лимит для сегмента), используя префиксы размера данных и адресов, а вот 64-битные не могу, потому что для них из 16-битного кода даже нет префиксов.

                  Вот такой код можно собрать под 16-битный режим (ассемблер вставит префиксы):
                          push    ebx
                          mov     edx, 4000000
                          mov     ebx, edi
                          xor     esi, esi
                          sub     esp, 4000000
                          mov     edi, esp
                          call    memset
                          mov     esi, esp
                          mov     edi, ebx
                          mov     edx, 4000000
                          mov     DWORD PTR [esp+25336], 22
                          call    memcpy
                          add     esp, 4000000
                          pop     ebx
                          ret
                  Ответить
              • Какой анскилл (((
                Ответить
              • > call memset

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

                    реально нужно рантаймфункцию вызыват?
                    Ответить
                    • Лупы и дупы можно (какой-нибудь «rep stosb»), но дело в том, что в «memset» очень много хардкорных оптимизаций, существенно ускоряющих копирование байтиков (всякие там выравнивания, кэши и вот это вот всё). Почему оно не заинлайнилось — хз, наверное, слишком большое.
                      Ответить
                    • memset и писькнет, погугли сорцы glibc, найди там memset, там совсем не rep stosb, там высокопитимизированый байтоебский код, один вызов функции по сравнению с занулением гигов мапяти ничего не значит.
                      Ответить
                      • Я просто не понял зачем вообще

                        Вероятно, гсть прав
                        Если бы там было два байта, то было бы инлайново
                        Ответить
                      • Всё так, там юзается SIMD у которого rep cocet.
                        Ответить
                  • да
                    https://govnokod.xyz/_25801/#comment-480107
                    Ответить
              • ЛОЛБЛЯДЬ, «MSVC 19.10» с «/O2» (как оно вообще скомпилилось? Оо):
                r$ = 0
                __$ArrayPad$ = 4000000
                $T1 = 4000048
                foo     PROC                                          ; COMDAT
                $LN3:
                        mov     QWORD PTR [rsp+8], rcx
                        push    rsi
                        push    rdi
                        mov     eax, 4000024                          ; 003d0918H
                        call    __chkstk
                        sub     rsp, rax
                        mov     rax, QWORD PTR __security_cookie
                        xor     rax, rsp
                        mov     QWORD PTR __$ArrayPad$[rsp], rax
                        mov     DWORD PTR r$[rsp], 0
                        mov     DWORD PTR r$[rsp+4], 0
                        mov     DWORD PTR r$[rsp+8], 0
                        mov     DWORD PTR r$[rsp+12], 0
                        mov     DWORD PTR r$[rsp+16], 0
                        mov     DWORD PTR r$[rsp+20], 0
                        mov     DWORD PTR r$[rsp+24], 0
                        mov     DWORD PTR r$[rsp+28], 0
                        mov     DWORD PTR r$[rsp+32], 0
                        mov     DWORD PTR r$[rsp+36], 0
                        mov     DWORD PTR r$[rsp+40], 0
                        mov     DWORD PTR r$[rsp+44], 0
                        mov     DWORD PTR r$[rsp+48], 0
                        mov     DWORD PTR r$[rsp+52], 0
                        mov     DWORD PTR r$[rsp+56], 0
                        mov     DWORD PTR r$[rsp+60], 0
                        mov     DWORD PTR r$[rsp+64], 0
                        mov     DWORD PTR r$[rsp+68], 0
                        mov     DWORD PTR r$[rsp+72], 0
                        mov     DWORD PTR r$[rsp+76], 0
                        mov     DWORD PTR r$[rsp+80], 0
                        mov     DWORD PTR r$[rsp+84], 0
                        mov     DWORD PTR r$[rsp+88], 0
                        mov     DWORD PTR r$[rsp+92], 0
                        mov     DWORD PTR r$[rsp+96], 0
                        mov     DWORD PTR r$[rsp+100], 0
                        mov     DWORD PTR r$[rsp+104], 0
                        mov     DWORD PTR r$[rsp+108], 0
                        mov     DWORD PTR r$[rsp+112], 0
                        mov     DWORD PTR r$[rsp+116], 0
                        mov     DWORD PTR r$[rsp+120], 0
                        mov     DWORD PTR r$[rsp+124], 0
                        mov     DWORD PTR r$[rsp+128], 0
                        ; etc...
                Ответить
                • зато мамин крякер сунет в IDA и охуеет
                  Ответить
                  • Когда я вижу в IDA такой код, я принимаю решение, что дизассемблер ошибочно принял данные за код, и жму клавишу «U».
                    Ответить
                • На локальной «VS2019» конпеляции этого же кода с [100000] так и не дождался.
                  Какой багор )))
                  Ответить
                  • место на диске кончилось?
                    Ответить
                    • Нет, просто висящий «link.exe», сжирающий одно ядро процессора.

                      UPD: [40000] скомпилился, получился файл из 440 килобайт инструкций «mov». Какой багорище )))
                      Ответить
                      • [100000] скомпилился (всего около получаса), теперь у меня есть мегабайтный бинарник с нулями.
                        Судя по всему, там где-то есть O(N^2).

                        UPD: отключил оптимизации, так получилось скомпилить [500000], основное время занял «cl.exe».
                        Ответить
                        • Напомнило проект http://tom7.org/abc/ –— генератор досовских экзешников, состоящих только из печатаемых ASCII-кодов. Поскольку байт с кодом ниже 32==0x20 (код пробела) использовать нельзя, а в заголовке экзешника обязательно указывается его размер, невозможно получить экзешник меньше 400 килобайт.
                          Ответить
                        • Кстати, «cl.exe» –— это так называемый «драйвер», который сам ничего не делает, а вызывает препроцессор, кококомпилятор, ассемблер и линкер. Компилятор там спрятан в c1.dll, c1xx.dll, c2.dll, которые не импортируются статически, а подгружаются в нужный момент.
                          Ответить
                      • Царский анролл.
                        Ответить
                • MSVC таки научился в "C99"?
                  Ответить
                  • Ну видимо частично

                    Я тут давеча ныл, что MS не умеет VLA. Ты видел?
                    Ответить
    • Такой зык в 2019 году сразу идет нахуй

      class A interface
      {
      fn virtual pure Foo(this);
      }
      Ответить
      • По многословности приближается к языку Ада.
        Ответить
        • Только в языке Ада под каждый случай специальное слово, чтобы ничего не перепутать, а какой-то язык переиспользует слова, как будто его сочиняла Эллочка-людоедка.
          Ответить
          • А всё потому, что какой-то язык писался нубом по принципу «о, круто в %lang_name% выглядит объявление %feature_name%, надо бы так же сделать». Естественно, никакой консистентности при таком подходе не получится.
            Ответить
            • Сделать консистентный язык практически нереально

              Все мейнстримные языки -- неконсистентное дерьмр
              Ответить
    • Александра Владимировича действительно не стало
      Ответить
    • Имею привычку иногда ходить на ПорнХаб и оставлять коментарии типа ДОЧЕНЬКА МЫ С МАМОЙ ОЧЕНЬ ПЛАЧЕМ КОГДА ЭТО ВИДИМ ВЕРНИСЬ ДОМОЙ ПОЖАЛУЙСТА ТВОЯ МЛАДШАЯ СЕСТРЁНКА ВСЁ ВРЕМЯ СПРАШИВАЕТ ГДЕ ТЫ БАБУШКА ПИРОГ ИСПЕКЛА ВЕРНИСЬ ИЛИ ХОТЬ ПОЗВОНИ (
      Ответить
    • http://durgasoft.com/
      Ответить
      • Похоже на типичный китайский сайт, только почему-то переведённый на английский, или на случайно выживший сайт из 90-х.

        Стоп! Бенгалуру! Индусы — даже в дизайне индусы.
        Ответить
        • хочешь учица у Mr. NagoorBabu?
          Ответить
          • >> One and Only JAVA Trainer in India with more than 1100 Members In a Single Class Room

            Как все ученики в один курятник помещаются?
            Ответить
            • ахахаха
              https://youtu.be/v_S64kldryc
              Ответить
            • http://durgasoft.com/AboutUs.asp

              Every blog and forum around the globe will represent DURGA SOFT as pioneer and leader in Java Certification training. When the discussion comes on Java, all the online communities will have only one word DURGA SOFT
              Ответить
    • Python из С
      https://habr.com/ru/post/466181/
      Нахуй такое может понадобится?
      Ответить
      • Это может понадобиться в кокококом-нибудь «GIMP», чтобы пользователи могли писа́ть мокросы на «Питоне».
        Ответить
      • А можно так же с "РНР"?
        Ответить

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