1. C++ / Говнокод #14387

    +17

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    #include <iostream>
    
    int main(){
        int std = 10;
        std::cout << std << std::endl;
    }

    Запостил: crastinus, 19 Января 2014

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

    • Сознание немного расширилось...
      А ведь когда-то давно такие моменты давали сильную встряску, и вырывался изумлённый возглас "И даже так можно?!". Сначала это было знакомство с реентерабельностью, потом - возможность изменения аргументов функции внутри неё, потом тернарный оператор, в выражении в качестве lvalue.
      Ответить
      • >о с реентерабельностью,
        Ты имеешь ввиду рекурсивные функции?

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

        Но правда это зависит от языка.

        > потом тернарный оператор, в выражении в качестве lvalue.
        А помнишь свои ощущения, когда понял, что в С++ можно так:
        foo.bar() = 42

        ?
        Ответить
        • В некоторых Бейсиках можно было так:
          LET S$ = "ПИТУХ"
          MID$(S$, 2, 1) = "Е"
          PRINT S$ ' выведет слово ПЕТУХ
          Ответить
        • > Ты имеешь ввиду рекурсивные функции?
          Нет. Впрочем, точно не помню, что я под этим понимал и что про это думал.

          > А помнишь свои ощущения, когда понял, что в С++ можно так
          Не помню. Однако помню, что меня порадовала реализация двумерных матриц, где operator [] возвращал какой-то ссылковатый объект, у которого тоже был operator [].
          Ответить
          • Забодай меня комар! 1024-- вернулся!
            Ответить
            • ну как, забодал?
              Ответить
            • Душно стало в маске - зашёл, чтобы снять.
              Ответить
              • А ты под гостем сидел?
                Ответить
                • Нет, под гостем не сидел. В последнее время раз в год-два захожу да пишу пару комментариев с этой учётки.
                  Возможно, от гостя в 2021 комментарий-два написал, не помню.

                  А маска была на аватаре.
                  Ответить
                  • На чем пишешь?
                    Ответить
                  • Не было.
                    Ответить
                  • Заходи в чат https://app.element.io/#/room/%23govnokod:matrix.org
                    Напиши пароль 123, и я тебя добавлю в секретные чаты
                    Ответить
                    • заебали мой пароль использовать, суки

                      It would take a computer about

                      24 nanoseconds

                      to crack your password
                      https://www.security.org/how-secure-is-my-password/
                      Ответить
                      • А какой у тебя сейчас пароль?
                        Ответить
                        • Ну от гостя я могу и без пароля писать, а для всяких рабочих сервисов я обычно исопльзую уже 321, потому что 123 был найден в каких-то там базах паролей и скромпрометирован
                          Ответить
                          • А у вас служба безопасности не заставляет менять пароль каждый год?
                            Ответить
                            • Пока не возникало такой необходимости.

                              Будет -- поменяю на 12345 (1234 нельзя, https://www.security.org/how-secure-is-my-password/ показывает его красным, видимо он не безопасен)
                              Ответить
                              • А я
                                А я
                                А я взял такой пароль, что
                                It would take a computer about

                                1 hundred noventrigintillion years

                                to crack your password
                                Ответить
                              • Всех моих пользователей прошу проверить там пароль. Так они выберут надежный, и его никогда и никто не сможет подгадать.
                                Ответить
                                • а еще есть сервис куда загружаешь свой приватный ключ, и он ищет в нем уязвимости!!
                                  Я туда все ключи всегда загружаю
                                  Ответить
                      • Этот сервис говорит, что сороктысячобезьянвжопусунулибанан — надёжный пароль, для его подбора потребуется 37 нониллионов лет.
                        Ответить
                        • У меня написано, что девять дуодекилионов, кстати

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

                              Первое незаконное простое число
                              4 85650 78965 73978 29309 84189 46942 86137 70744 20873 51357 92401 96520 73668 69851 34010 47237 44696 87974 39926 11751 09737 77701 02744 75280 49058 83138 40375 49709 98790 96539 55227 01171 21570 25974 66699 32402 26834 59661 96060 34851 74249 77358 46851 88556 74570 25712 54749 99648 21941 84655 71008 41190 86259 71694 79707 99152 00486 67099 75923 59606 13207 25973 79799 36188 60631 69144 73588 30024 53369 72781 81391 47979 55513 39994 93948 82899 84691 78361 00182 59789 01031 60196 18350 34344 89568 70538 45208 53804 58424 15654 82488 93338 04747 58711 28339 59896 85223 25446 08408 97111 97712 76941 20795 86244 05471 61321 00500 64598 20176 96177 18094 78113 62200 27234 48272 24932 32595 47234 68800 29277 76497 90614 81298 40428 34572 01463 48968 54716 90823 54737 83566 19721 86224 96943 16227 16663 93905 54302 41564 73292 48552 48991 22573 94665 48627 14048 21171 38124 38821 77176 02984 12552 44647 44505 58346 28144 88335 63190 27253 19590 43928 38737 64073 91689 12579 24055 01562 08897 87163 37599 91078 87084 90815 90975 48019 28576 84519 88596 30532 38234 90558 09203 29996 03234 47114 07760 19847 16353 11617 13078 57608 48622 36370 28357 01049 61259 56818 46785 96533 31007 70179 91614 67447 25492 72833 48691 60006 47585 91746 27812 12690 07351 83092 41530 10630 28932 95665 84366 20008 00476 77896 79843 82090 79761 98594 93646 30938 05863 36721 46969 59750 27968 77120 57249 96666 98056 14533 82074 12031 59337 70309 94915 27469 18356 59376 21022 20068 12679 82734 45760 93802 03044 79122 77498 09179 55938 38712 10005 88766 68925 84487 00470 77255 24970 60444 65212 71304 04321 18261 01035 91186 47666 29638 58495 08744 84973 73476 86142 08805 29443.


                              теперь гавнокод закроют
                              Ответить
                              • А бывает незаконное составное число?

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

                                  In 2017, far-right Slovak politician Marian Kotleba was criminally charged for donating 1,488 euros to a charity.
                                  Ответить
                            • а какие у тебя реальные пароли?
                              Ответить
                              • У меня обычно пароли совпадают с логином: так легче запомнить. Я хотел выбрать слово «пароль» или «password», но мне сказали, что это небезопасно.
                                Ответить
                              • Свои реальные пароли я тебе не покажу (а то так же захочешь), но я часто подхихикиваю над паролями своих пользователей, ахах
                                Ответить
                                • &gt; но я часто подхихикиваю над паролями своих пользователей, ахах

                                  Я тоже, когда читаю их в GET параметрах -- логах nginx, и в дампе базы...

                                  Один раз мне написал пользователь, и сказал, что забыл пароль. Я ему послал его пароль, и подумал еще: какой смешной пароль
                                  Ответить
                                  • Кстати, на счет паролей, если серьезно: Пароли, придуманные обычными пользователями (не секьюрити-фриками) почти всегда говно.

                                    У Мариванны из бухгалтерии всегда будет пароль "rosa123". Если ты попытаешься зафорсить политики, то будет "Rosa!@#" или "qweasdzxc".

                                    Если очень сильно из зафорсить, то он будет написан на желтеньком стикере на мониторе.

                                    То-есть ты либо покупаешь ёба-ки, либо делегируешь какой-нито OAuth на какой-нито gmail, где там SMS-подтверждения, либо ты понимаешь, что поломают

                                    По этой причине например у моего знакомого админа VPNы рядовых петухов сделаны по ключу (всмысле каждому выписан серт с приватным ключом и серт на сервере стоит) потому что из 1000 мариванн стопудово будет "rosa123"
                                    Ответить
                                    • Rosa!@1, Rosa!@2, Rosa!@3, Rosa!@4 или Rosa!2406, Rosa!2407, ... - если сраный админ включил срок годности пароля.

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

                                      Пароль - это всегда компромисс. Либо он будет легко запоминающимся, но нестойким, либо стойким, но незапоминающимся. Способность запоминать ограничена. Если админ требует спецсимволы, то вместо оптимального по запоминаемости и стойкости пароля "amwentedfar" (длинный, с энтропией) пользователь создаст минимально удовлетворяющий требований "Su123ka!" (длина не меньше 8, 3 класса символов). И если пользователь смог один раз в жизни выучить сложный и надёжные пароль "kDo#ran8Nue~", то из этого не следует, что он сможет делать это раз в год, а тем более -- раз в 3 месяца.

                                      И ладно, если это пароли от веб-питушни, которые можно загнать в условный Google Chrome, где они сами генерируются и хранятся без каких-либо усилий пользователя. Но когда требуют держать в голове вариативное случайное говно и вводить его с клавиатуры, чтобы иметь доступ к рабочим компам... Это даже я, понимающий основы информационной безопасности, в гробу видал, а нормальные люди - тем более. Раз забыл, два забыл, - на третий раз придумаешь "[eq!2407".

                                      После некоторого предела (который наступает довольно быстро) зафорсивание перестаёт повышать безопасность, а наоборот понижает её. Чем больше админ пытается зафорсить, тем меньше будет "kDo#ran8Nue~", и больше "[eq!2407" и бумажек с паролями.
                                      Хочешь безопасность - придумай рфидные карточки, отпечатки пальцев, USB-ключи с магнитными контактами, отслеживай IP и паттерны поведения, проводи аудит. Случайную херобору никто не будет запоминать.
                                      Ответить
                                      • Ура! 1024-- вернулся!
                                        Ответить
                                      • > [eq!2407
                                        Пароли по текущему циклу AIRAC? Удобно!
                                        Ответить
                                        • Посмотрел. В цикле AIRAC 28 дней, так что он не совсем соответствует месяцу. 2401 начался 25 января, поэтому 2406 ещё не закончился.

                                          2406: 13 Jun 2024 — 10 Jul 2024
                                          2407: 11 Jul 2024 — 07 Aug 2024
                                          Ответить
                                          • А ещё бывают циклы AIRAC с номерами 13 и даже (в очень редкие года) — 14.
                                            Ответить
                                            • Причём годы с 14-циклом случаются нерегулярно: шаг то 23, то 22.
                                              Ответить
                                              • Вы там сумасшедшие что ли все?
                                                Ответить
                                              • нерегулярный цикл это очень плохо. попробуйте сходить к геникологу
                                                Ответить
                                            • Похожая питушня в календарях авраамических религий, но только мусульмане, в отличие от христиан и иудеев, не вставляют корректирующий цикл, поэтому их праздники постепенно съезжают по временам года.
                                              Ответить
                                          • верните мой 2401
                                            Ответить
                                            • Пишут, что в 2041-м году днэ царём Урука была человек по имени Лугалькингенешдуду
                                              Ответить
                                      • [eq понятно. А что такое 2407?

                                        P.S. Год и месяц. Спасибо ISO за подсказку.
                                        Ответить
                                        • К слову:

                                          https://music.yandex.ru/artist/10926446

                                          https://www.last.fm/ru/music/%5Beq

                                          https://www.shazam.com/artist/-/1554235520

                                          https://music.apple.com/ru/artist/eq/1554235520

                                          Наверное, ма-те-ма-ти-ки, что-то про уравнения поют.
                                          Ответить
                                        • пошел на [eq
                                          Ответить
                                      • >И если пользователь смог один раз в жизни выучить сложный и надёжные пароль "kDo#ran8Nue~"

                                        ....то он будет использовать его на всех сервисах в Интернете.

                                        И когда на сайте любителей макроме взломают базу, и заберут оттуда плейнтексктом хранящийся пароль, то пароль нашего пользователя окажется в базе брутфорсеров (вместе с его именем и емейлом)
                                        Ответить
                                      • Надо чтоб двухфакторная аутентификация. И чтоб OTP
                                        Ответить
                                    • А потом другой (?) гест спрашивает, а нахиба 1password, KeePass и т.п.
                                      Ответить
                                      • Так они не решают проблему:

                                        1. Приходится доверять свои пароли левому сервису.

                                        2. Приходится помнить учётные данные от самого KeepAss.

                                        Вот смарткарта или USB+ключ решают проблему.
                                        Ответить
                                        • Исправляю. Первый пункт, похоже, относится только к 1password.

                                          KeepAss всё хранит локально. Но проблему мастер-пароля это не отменяет.
                                          Ответить
                                          • KeePass позволяет открывать базу по ключу на флешке и по юбикею вроде как тоже
                                            Ответить
                                        • Смотря где.

                                          В AD, например, можно использовать смарт-карты. Но это дорого и сложно
                                          Ответить
                                          • Нахуя нужны смарт-карты, когда можно использовать TOTP? Можно даже без специального токена, на телефон приложение поставить.
                                            Ответить
                                            • Смарт-карты появились, когда телефоны были не у всех.

                                              Кстакти, OTP можно реализовать вообще без телефона и без смарт-карты: просто на бумажке


                                              Алсо, телефон не очень сейф: зуй знает что ты там туда наставишь
                                              Ответить
                                              • Можешь взять кнопочный телефон с J2ME, без всяких там андроидов. Или можно в какой-нибудь контроллер соответствующую хуйню прошить, надо только чтоб там время считалось. Для "Flipper Zero" https://github.com/akopachov/flipper-zero_authenticator вот есть уже, можно на другие контроллеры портировать
                                                Ответить
                                                • Кажется, что смарт-карта тут будет дешевле и проще

                                                  Другой вопрос, если у меня уже есть телефон, то его можно юзать

                                                  Но вот если я сотрудник ядерного центра, и с моим уровнем доступа можно отправить ядерную ракету куда-нить, то чем меньше всего умеет делвайс -- тем лучше, потому что тем сложнее его сломать
                                                  Ответить
                                                  • Сотрудников ядерного центра лучше всего идентифицировать по ебальнику и отпечаткам пальцев. Смарт-карту можно проебать, или ее могут спиздить
                                                    Ответить
                                                    • Тоже можно спиздить
                                                      https://www.youtube.com/watch?v=q7R_FF5O1d4
                                                      Ответить
                                                      • в minority report еще было
                                                        Ответить
                                                      • Вырезанный глаз можно достаточно легко отличить от глаза в живом человеке. См.
                                                        "реакция зрачков на свет"
                                                        Ответить
                                                        • Ну и можно еще использовать т.н. "Liveness Detection", как при всяких KYC проверках.
                                                          Ответить
                                                    • > отпечаткам пальцев

                                                      Now, as far as whether or not all of this is necessary, it is in fact not if we want to fool your scanner. In my senior thesis project we used generative AI to produce fingerprints that fooled scanners to appear as 90%+ of all users in a fingerprint reader's database. One fingerprint generated could unlock almost anyone's account. So we don't even need you to get into your laptop.
                                                      Ответить
                                                      • Это были хуевые сканеры отпечатков. Продвинутые сканеры могут учитывать сопротивление кожи и пульс например.
                                                        Ответить
                                                        • > сопротивление кожи и пульс например.

                                                          а с этим-то какие проблемы?
                                                          Ответить
                                                          • Проблема в том, что надо будет отливать из какого-то силикона с сопротивлением как у кожи некую хуетень, которая бы еще с определенной частотой пульсировала. Это не очень тривиальная задача. Где ты будешь брать такой силикон? А что если сканер отпечатков еще и проверяет что там цвет крови красный? А если одновременно надо прикладывать несколько пальцев, и пульс (удары сердца т.е.) там должен совпадать по времени? Создать такой имитатор может быть довольно сложной задачей
                                                            Ответить
                                                            • Проще позвонить по телефону, и сказать: "Юр Сергеич, день добрый, из отдела информационных технологий беспокоят. Я вам там сылочку кинул, нажмите пожалуйста, мы тут безопасность проверяем"
                                                              Ответить
                                                • > кнопочный телефон
                                                  Есть только проблема с тем, что ушлые китайцы современные кнопочные «бабушкофоны» заливают малварью по самые динамики. Доходит до того, что официально не поддерживающий «GPRS» телефон в фоне подрубается к интернету и сливает китайцам всю инфу, до которой дотянется.
                                                  Ответить
                                                  • Поэтому, например, в «***» и в «***» сотрудников заставляют на входе сдавать все телефоны (включая бабушкофоны) в камеру хранения и на рабочем месте пользоваться только стационарным который типа проверила их служба безопасности).
                                                    Ответить
                                                    • «***» — это то, где [ДАННЫЕ УДАЛЕНЫ]?
                                                      Ответить
                                                    • Интересно, у nyTuHa есть мобильник?
                                                      Ответить
                                                      • А зачем он ему, если он даже посрать ходит с шестью охранниками?
                                                        Ответить
                                                        • А унитаз перед этим проверяют сапёры?
                                                          Ответить
                                                          • Со своими сральниками они ездят. Без шуток
                                                            Ответить
                                                            • Ну так его нужно проверить перед использованием?
                                                              Вдруг какой-то петух бомбу подложил, а nyTuH на него сядет и сдетонирует.
                                                              Ответить
                                                    • > Поэтому, например, в «***» и в «***» сотрудников заставляют на входе сдавать все телефоны (включая бабушкофоны) в камеру хранения и на рабочем месте пользоваться только стационарным который типа проверила их служба безопасности).

                                                      Можно спрятать в анусе WiFi SDHC карту https://haxit.blogspot.com/2013/08/hacking-transcend-wifi-sd-cards.html и через нее спиздить даннные по радиоканалу.
                                                      Ответить
                                                  • ValdikSS писал про «Itel» и «DEXP», у которых браузера нету, режим модема спрятан, а данные китайцам через «Интернет» они сливают.

                                                    https://habr.com/ru/articles/575626/

                                                    «Irbis SF63» пиздец опасный: он на твой номер регистрирует учётки в соцсетях и отправляет результаты китайцам.
                                                    Ответить
                                                    • Удачи им в переводе "Доктор смегма опять уёбком всё хрюкни янкнул"
                                                      Ответить
                                                      • Девушка, сообщение для пользователя 67780
                                                        Ответить
                                                    • Если тебе телефон нужен чисто для TOTP, можешь его без сим-карты использовать. Или ты предполагаешь, что он может взломать твой wifi и китайцам что-то слить?
                                                      Ответить
                                                  • Нужно взять apple newton, он точно вряд ли куда-нибудь подключится
                                                    Ответить
                                                • &gt; кнопочный телефон с J2ME

                                                  В 2024-м году аппарат с «J2ME» днём с огнём не сыщешь. Есть китайское говно с поддержкой VXP (это просто ELF с копропротивной говнозадачностью) и ещё с какой-то, забыл название.

                                                  P.S. Нашёл, вторая хуйня называется MRP, но я даже не знаю, где искать SDK под неё.
                                                  Ответить
                                            • За каждым человеком закреплено право проебать телефон по пьяни
                                              Ответить
                                              • Приложение с этими OTP/TOTP/MOTP можно запаролить вместе с той хуйней, которая для генерирования одноразовых паролей нужна
                                                Ответить
                                                • ВНЕЗАПНО KeePass поддерживает totp

                                                  хранить их ессно советуют в отдельной от паролей базе
                                                  Ответить
          • Нихуя себе!
            Ответить
    • А в чём прикол то? Ну 10 выводит(на ideone).
      Ответить
      • Ну, видимо, автор узнал, что имена неймспейсов и переменных лежат в разных, кхм, неймспейсах.
        В крестах каждый день что-то новое можно узнавать, даже если с ними работаешь уже лет 5-10.

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

            Понимаете?
            Десять лет я слышу, что плюсы не нужны, а они всё еще нужны.

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

            Они будут читать в новостях "Хуюгл лейэфнул 300 000 программистов на пайтон". Читать, и посылать патч
            Ответить
        • Это мизантропия. Человек просто ненавидит тех. что будет его код сопровождать. Например
          Ответить
        • > лежат в разных, кхм, неймспейсах.
          такой ереси от тебя не ожидал ;)
          Компилятор это позволяет, потому, что для него неймспайс, это что написано после слова неймспайс, или стоящее перед ::.

          namespace nmsp;
          nmsp::var..

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

          #include <iostream>

          struct std{
          static int m;
          };

          int std::m=10;

          int main {
          std::cout << std::m << std::endl;
          }
          Ответить
          • >> лежат в разных, кхм, неймспейсах.
            > такой ереси от тебя не ожидал ;)

            всё борманд правильно сказал.
            Ответить
            • Да, про неймспайсы это факт. Они и правда лежат в разных неймспайсах. Правильно будет так: "имя неймспайса можно использовать как имя переменной".
              Ответить
            • понятия "неймспейс" и "неймспейс" оказались в одном неймспейсе, и потому клашнулись
              Ответить
          • struct lol { int lol; };
            
            int main()
            {
                lol lol;
                return lol.lol;
            }
            Имена типов и имена переменных лежат у компилятора в разных "неэмспейсах". То, что определено как namespace по сути является особой разновидностью типа. Нельзя иметь тип и нэймспейс с одинаковыми именами.
            Ответить
            • > по сути является особой разновидностью типа
              Как это противоречит тому, что написал я?
              Ответить
              • Как это противоречит тому, что написал борманд? Борманд, имхо, гораздо яснее выразил мысль.
                Ответить
          • Под неймспейсом я имел в виду не ту штуку, которая в крестах называется неймспейсом, а более общее понятие, никак не связанное с крестоблядствами (прочитай про отличия LISP-1 от LISP-2, суть примерно такая же). Т.е. имена крестоблядских неймспейсов лежат в одном, кхм, пространстве имен (не путать с крестоблядским namespace!), а имена переменных - в другом. И они никак не пересекаются, т.к. компилятор знает, в каком контексте используется одно, а в каком другое. Впрочем Роман уже все разжевал на примере жабы.

            Кстати забавно, но пространство имен типов и пространство имен namespace'ов пересекаются - компилятор не даст назвать тип и неймспейс одинаково.
            Ответить
            • Да, уже понял.
              Ответить
            • > лежат в одном, кхм, пространстве имен
              наверное, можно говорить "таблица символов", чтобы не создавать коллизий

              > пространство имен типов и пространство имен namespace'ов пересекаются
              Да мне кажется, корни растут из того факта, что раньше пространсва имён реализовывали через создание пустого класса со статическими методами и вложенными классами.
              Ответить
              • >реализовывали через создание пустого класса со статическими методами
                а не из-за того, что они могут использоваться подобным образом?
                Ответить
                • > а не из-за того, что они могут использоваться подобным образом?
                  И поэтому тоже. Борманд чуть ниже пояснил.
                  Правда, есть и отличия: в классах все члены видны всем остальным, т.е. можно использовать методы до их объявления. В нэймспейсах это не работает.
                  Ответить
              • А ну да, туплю я, синтаксис то такой же. И если мы назовем класс и неймспейс одинаково - возникнет неоднозначность:
                class foo {
                    class bar {}
                };
                namespace foo {
                    class bar {}
                }
                foo::bar b; // foo::bar or foo::bar!?
                Ответить
        • В "PHP" всё более-менее предсказуемо.
          Ответить
          • Да, например я просто включаю register_globals и теку
            Ответить
    • Представим, что Вася написал свою библиотеку, и поместил её в неймспейс awesome,
      а Петя - свою, в которой ничего не зная про Васю, использовал слово awesome как счетчик цикла.
      И вот тут Акакий Дододжонович берёт эти обе библиотеки и пытается ском... ЧИТАТЬ ДАЛЕЕ >>>
      Ответить
      • А если бы Петя назвал awesome структуру?
        Ответить
        • если он сделал это в глобальном неймспейсе, то он ССЗБ.
          Ответить
          • Эээ, а счетчик цикла что, считается объявленным в глобальном неймспейсе?
            Ответить
            • >> Петя назвал awesome структуру?
              > счетчик цикла

              Не выспался?
              Ответить
              • В исходном комментарии говорится про то, как Петя назвал счетчик цикла awesome и он не конфликтует. На это я ответил, что если бы назвал так структуру то это бы не помогло. На что мне отвечают что со структурами все в порядке, они в именованных неймспейсах. Вывод?
                Ответить
                • Вот теперь я понял, о чём речь.
                  Но автор поста как раз удивляется, что локальные переменные и "глобальные" нэймспейсы можно называть одинаково и использовать одновременно. Если бы это не выполнялось, то сценарий, описанный @defecate-++, был бы вполне реальным.

                  Если бы Петя использовал локальную структуру std, у него бы тоже было бы всё ок: его структура скрывала бы пространство имён std внутри его кода (правда, внутри вложенных в функцию структур не может быть статических членов). Но тогда нельзя было бы написать код, подобный коду в топике, без явной квантификации
                  int f() {
                      struct std {
                          int x;
                      };
                  
                      ::std::cout << "x: " << sizeof(std::x) << ::std::endl;
                      return 0;
                  }
                  . Если Петя вложил структуру в неймспейс, то всё тоже ок, можно квалифицировать.

                  Если же Петя назвал глобальный тип также, как Вася назвал свой нэймспейс, вот тут беда.
                  Ответить
                  • > Если же Петя назвал глобальный тип также, как Вася назвал свой нэймспейс...
                    ... то оно просто не скомпилится ;)

                    gcc выдавало что-то типа error: redefining to another kind of symbol
                    Ответить
                    • > то оно просто не скомпилится
                      Да, Акакий Дододжонович будет очень огорчён. Хотя у него и сейчас есть выход:
                      namespace fucking_petya {
                      #include "petya_petushok.h"
                      }
                      Ответить
                      • А точно прокатит? В этой единице компиляции имена будут fucking_petya::petushnya, а в петиной - ::petushnya. Имхо на линковке завалится, если хотя бы одну функцию оттуда заюзать. Ну или я сегодня совсем туплю, и мне пора спать...
                        Ответить
                        • Да, это прокатит только с header-only либами :(
                          Ответить
                          • Да даже с ними не прокатит, т.к. Петя наверняка ещё много чего наинклюдил. В общем, наш Акакий вынужден форкать и править либу Пети. Судьба у него такая.
                            Ответить
                  • >Но автор поста как раз удивляется
                    как удивительно, что в языке с полнотой по тьюрингу времени компиляции творятся такие удивительные вещи с именами.
                    Ответить
                    • А как эти вещи связаны с полнотой по тьюрингу?
                      Ответить
                      • ИМХО никак.
                        Ответить
                      • Это о фичах в плюсах.

                        Так и знал, что нужно зеленым писать.
                        Ответить
                        • Интересно, есть хоть один человек, который знает с++11 полностью, и может объяснить с первого раза любой встретившийся ему момент?)
                          Ответить
      • Мне вот что интересно а разве в крестах нельзя все переменные которые используются локально объявить так что бы их не было видно глобально ?
        И другой вопрос в неймспейсе моджнили обявлять вложенные неймспейсы ?
        Ответить
        • > все переменные которые используются локально Объявить так что бы их не было видно глобально?
          моя не панимать. Работают нормальные области видимости. Всё, что внутри функции, снаружи не видно. Стек же.
          Если хочется глобальные для модуля переменные (не видимые другим модулям), есть волшебное слово static или анонимный неймспейс.

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

            Или я сегодня туплю?
            Ответить
            • иерархия есть, когда компилятору надо найти ближайшее соответствие имени - ему надо идти по дереву вверх
              Ответить
              • Да, мне пора на покой. Спутал с жабьими пакетами, где иерархии действительно нет, и com.sun.java.fuck это всего лишь длинное имя :(

                А в крестах мало того что вверх умеет идти, так еще и после using namespace foo можно будет вместо foo::bar::test писать просто bar::test... Все-таки иерархия есть.
                Ответить
              • >Представим, что Вася написал свою библиотеку, и поместил её в неймспейс awesome,
                а Петя - свою, в которой ничего не зная про Васю, использовал слово awesome как счетчик цикла.
                И вот тут Акакий Дододжонович берёт эти обе библиотеки и пытается ском... ЧИТАТЬ ДАЛЕЕ >>>

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

          > в неймспейсе моджнили обявлять вложенные неймспейсы ?
          судя по бусту, можно
          Ответить
        • На самом деле есть даже мега-удобная фича с алиасингом неймспейсов.
          namespace fs = boost::filesystem;
          
          if (fs::exists(my_file)) do_happiness();
          Ответить
        • во-первых, это надо умудриться переменную объявить глобально - порочная практика даже во времена С
          во-вторых, такие проблемы могли бы возникнуть при компиляции именно петиного кода, а не васиного - но такого конфликта даже нет
          и в третьих, если у пети есть свой неймспейс, то вообще становится крайне сложно организовать проблемы, о которых стоило бы переживать - было бы неплохо, если бы кто-то смог предложить пример конфликта
          а в подтверджении моих слов пока вот: http://ideone.com/9517zU

          и про второй вопрос - в неймспейсе нет ограничений на вложенные неймспейсы
          you::can::shoot::your::legs::as::you::want
          Ответить
      • То ли дело "D". Там модули есть.
        Ответить
        • Кстати, у меня к тебе вопрос: верно-ли я понимаю, что ``recv(2)``/``read(2)`` из сокета считает столько данных, сколько там есть (если их больше ноля) даже если я попросил больше данных, если только не установлен ``MSG_WAITALL``, а например чтение из pipe может заблокироваться если данных меньше буфера?
          Ответить
          • > верно-ли я понимаю, что ``recv(2)``/``read(2)`` из сокета считает столько данных, сколько там есть (если их больше ноля) даже если я попросил больше данных, если только не установлен ``MSG_WAITALL``, а например чтение из pipe может заблокироваться если данных меньше буфера?

            recv() с pipe вообще не работает, и в read() никакого "MSG_WAITALL" нет. Из pipe чтение через read() заблокируется, если в пайпе нихуя нет. Если хоть один байтик есть, он и прочтется. Из сокета еще можно получить датаграму нулевого размера, а для pipe это хуйня полная, потому что никаких "датаграм" там нет

            https://man7.org/linux/man-pages/man2/recv.2.html#NOTES
            If a zero-length datagram is pending, read(2) and recv() with a
            flags argument of zero provide different behavior.  In this
            circumstance, read(2) has no effect (the datagram remains
            pending), while recv() consumes the pending datagram.
            Ответить
            • > the datagram remains pending

              Хм, т.е. прога тупо повиснет навсегда т.к. read() не может избавиться от пустой датаграммы?
              Ответить
              • read() ее просто пропустит. А когда будет непустая датаграма, он уже прочитает.

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

                  read() на UDP сокете тоже вернул 0 при получении пакета нулевой длины. Ну и собственно убрал его из буфера.
                  Ответить
                  • read() на UDP при попытке чтения чего-то нулевой длины - сразу завершается, не дожидаясь каких-то "пакетов". recv() же будет ждать некую хуйню
                    #include <stdio.h>
                    #include <stdlib.h>
                    #include <unistd.h>
                    #include <string.h>
                    #include <sys/types.h>
                    #include <sys/socket.h>
                    #include <arpa/inet.h>
                    #include <netinet/in.h>
                      
                    #define PORT     8080
                    #define MAXLINE 1024
                    
                    int main() {
                        int sockfd;
                        char buffer[MAXLINE];
                        char *hello = "Hello from server";
                        struct sockaddr_in servaddr;
                    
                        // Creating socket file descriptor
                        if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
                            perror("socket creation failed");
                            exit(EXIT_FAILURE);
                        }
                    
                        memset(&servaddr, 0, sizeof(servaddr));
                    
                        // Filling server information
                        servaddr.sin_family    = AF_INET; // IPv4
                        servaddr.sin_addr.s_addr = INADDR_ANY;
                        servaddr.sin_port = htons(PORT);
                    
                        // Bind the socket with the server address
                        if ( bind(sockfd, (const struct sockaddr *)&servaddr, 
                                sizeof(servaddr)) < 0 )
                        {
                            perror("bind failed");
                            exit(EXIT_FAILURE);
                        }
                        //ssize_t n = read(sockfd, buffer, 0);
                        ssize_t n = recv(sockfd, buffer, 0, 0);
                        printf("recvd %zd\n", n);
                    
                        return 0;
                    }

                    Переделал https://www.geeksforgeeks.org/udp-server-client-implementation-c/
                    Ответить
                  • В общем суть в том, что если через read читать ноль байтиков, нихуя вообще не будет, оно пропустится, а вот recv будет ждать хуйню, и захавает какую-то датаграму из сокета
                    Ответить
                    • А, так надо именно ноль байт читать (что для read, судя по его ману, не имеет смысла и вообще implementation defined), только тогда будет разница?

                      З.Ы. А где в мане написано что это отличие только для size == 0? Там вроде только о длине датаграммы говорят.
                      Ответить
                      • > А, так надо именно ноль байт читать (что для read, судя по его ману, не имеет смысла и вообще implementation defined)

                        Такую тонкую питушню надо не в манах, а в каких-то юникс-спецификациях читать. И вообще, лучше не выебываться со всякими read() на сокетах, и использовать специально предназначенные recv() и recvfrom()
                        https://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html#tag_16_474
                        > How read() handles zero-byte STREAMS messages is determined by the current read mode setting. In byte-stream mode, read() shall accept data until it has read nbyte bytes, or until there is no more data to read, or until a zero-byte message block is encountered. The read() function shall then return the number of bytes read, and place the zero-byte message back on the STREAM to be retrieved by the next read(), getmsg(), or getpmsg(). In message-nondiscard mode or message-discard mode, a zero-byte message shall return 0 and the message shall be removed from the STREAM. When a zero-byte message is read as the first message on a STREAM, the message shall be removed from the STREAM and 0 shall be returned, regardless of the read mode.

                        > З.Ы. А где в мане написано что это отличие только для size == 0? Там вроде только о длине датаграммы говорят.

                        Ну хуй знает, вполне возможно, что в мане они написали какую-то хуйню.
                        Ответить
                      • Может быть под "If a zero-length datagram is pending" надо понимать "если мы хотим из сокета прочитать датаграму нулевого размера".

                        recv(sockfd, buffer, 0, 0); // типа вот тут "zero-length datagram is pending"
                        Ответить
                        • Ну тогда это какая-то странная формулировка...

                          Я вот сразу подумала, что pending -- это "пришла и лежит в буфере".

                          Скорее тупо скопипастили ман с другой оси/версии, где read такое не читал, да забыли поправить.
                          Ответить
                          • а разве буркалы сокеты не должны был коньсистемны на всех платформах?
                            не за это диды в протокольной войне ваивали!
                            Ответить
                            • Посмотри на ту парашу, которую мелкомягкие в винде с беркли-сокетами сделали.
                              https://docs.microsoft.com/en-us/windows/win32/winsock/porting-socket-applications-to-winsock


                              WSAGetLastError() какой-то блядь. Я как-то переписывал хуйню на винсоксах в обычные беркли сокеты
                              Ответить
                              • Ня напоминяй. Виндовые сокеты — это такое адское забаговнное говно, что даже някать ня хочется (ノ°益°)ノ.
                                Ответить
                              • Там ещё есть функции, которые на вход принимают дескриптор окна. Окна для сокетов!
                                Ответить
                                • Это для поддержки RFC 1149 (⌒▽⌒)☆.
                                  Ответить
                                  • Кстати, его же вроде испытали, и даже что-то смогли передать, если я не ошибаюсь.
                                    Ответить
                                    • Если передавать флешки большого объёма одновременно несколькими голубями, получим LFN = long fat network. Сеть с большой скоростью передачи, но при этом с длинным пингом. Почти как спутниковая связь.
                                      Ответить
                                      • Камаз с ДВД, облегченная версия.
                                        Ответить
                                      • Можно кучу голубей с какой-нибудь миниатюрной радиохуйней выпустить, и сделать mesh-сеть поверх них.
                                        Ответить
                                        • Голуби обычно собираются в стаи. В одной стае mesh-сеть не нужна, а между разными стаями может быть слишком большое расстояние.
                                          Ответить
                                          • голубцам надо не мешать
                                            их в стаи сгоняет прошивка
                                            https://www.youtube.com/watch?v=86iQiV3-3IA
                                            Ответить
                              • падажжи, WSA это суперсет, переписывание неизбежно что-то обрежет

                                и вероятно дохуя, томущо A это асинхронные
                                Ответить
                                • > и вероятно дохуя, томущо A это асинхронные

                                  WSA это "Windows Sockets API", где там "асинхронные"?
                                  Ответить
                                  • Как ты хорошо лалку слил
                                    Ответить
                                  • Потому что асинхронность завезли в винду именно ради сокетов.


                                    Смотри: во времена Win16 многозадачность была кооперативной. Чтение из файла блочило весь мир, но файлы были близко.

                                    Чтение из клавы не было по сути IO, потому что поступало как сообщение в event loop.

                                    А как быть с сетью? Нельзя лочить же (сеть далеко) и потому сделали асинхронный API.

                                    А вот потом уже на всю винду распостранили
                                    Ответить
                                    • В 3.x даже была елда (функция Yield), чтобы отдать тики другим задачам.
                                      Ответить
                                      • да, хотя основной точкой было `GetEvent()`

                                        Там еще была смешная API: пока WinSock ждёт -- он мог крутить события, и вызывать твою функциб для прогрес-бара

                                        короче, асинхронное программирование это всегда шарик-лизун с налипшими на него волосами

                                        Ей богу, корутины это relief
                                        Ответить
                                        • Но елда звучит смешнее. Как я понял, после неё всё равно придётся вызывать GetEvent, чтобы освободить очередь сообщений.
                                          Ответить
                                          • Мне моя елда на исходе дня
                                            Пропоёт о том, что любовь прошла.
                                            Ответить
                                            • не надо со своей елдою разговаривать, и слушать её не надо
                                              Ответить
                                • select() есть, вместо poll() какой-то WSAPoll()
                                  https://habr.com/ru/post/105918/

                                  Ну и еще есть какая-то чисто виндоспецифичная говнина с overlapped I/O, но в том коде этой говнины не было.
                                  https://docs.microsoft.com/en-us/windows/win32/winsock/overlapped-i-o-and-event-objects-2
                                  Ответить
          • > ``recv(2)``/``read(2)`` из сокета считает столько данных, сколько там есть (если их больше ноля)

            Я относительно давно с этими сокетами связывался, но там есть такая хуйня, что если UDP (SOCK_DGRAM) то ты прочитаешь один пакет. Т.е. если тебе прилетело два пакета по 10 байт, и они там где-то хранятся во внутреннем буфере ОС, то даже если ты дохуя хочешь прочесть, ты первым recv() прочитаешь 10 байт, вторым recv() прочитаешь еще 10 байт.

            К тому же "MSG_WAITALL" тоже не гарантирует, что у тебя столько прочитается, сколько ты запросил. См https://pubs.opengroup.org/onlinepubs/9699919799/functions/recv.html
            >MSG_WAITALL
            > On SOCK_STREAM sockets this requests that the function block until the full amount of data can be returned. The function may return the smaller amount of data if the socket is a message-based socket, if a signal is caught, if the connection is terminated, if MSG_PEEK was specified, or if an error is pending for the socket.
            Ответить
            • Кстати вот еще обрати внимание
              https://stackoverflow.com/a/2862176

              What happens if recv gets a packet larger than the buffer?

              SOCK_STREAM: The question doesn't really make sense as put, because stream sockets don't have a concept of packets - they're just a continuous stream of bytes. If there's more bytes available to read than your buffer has room for, then they'll be queued by the OS and available for your next call to recv.

              SOCK_DGRAM: The excess bytes are discarded.
              Ответить
    • Как я попал в этот оффтоп?
      Ответить
      • А как я в него попал?
        Ответить
        • Увидел в стоке мой комментарий и захотел узнать в какой же тред я попал.
          Ответить
          • Откуда зняешь?
            Ответить
            • Идут Шерлок Холмс и доктор Ватсон по Бейкер-стрит. Шерлок Холмс говорит:
              - Э-э, дружище Ватсон, могу с уверенностью сказать, что вон за тем углом вам ввалят хороших п%%дюлей.
              Доходят до того угла и, дейтвительно Ватсону там хорошо достается от двух здоровых лбов.
              - Как Вы узнали про это, Холмс?
              - Элементарно, Ватсон, я здесь вчера в вашем пальто вы%%ывался...
              Ответить
      • Нужно позвонить в "Необъяснимо но факт" с таким вопросом.
        Ответить
        • Ну как, позвонил?
          Ответить
        • Нужно звонить в скорую ПСИХИАТРИЧЕСКУЮ помощь: такая тоже имеется!


          Недавно пересмотрел "черная роза -- эмблема печали", кстати. Какой всё таки охуенный фильм. Толик-с-прибором мой герой
          Ответить
    • C:\Gebruikers\Johan\Mijn afbeeldingen\Zonnebloem.jpg
      Ответить
    • Икарус, сколько байт в постоянной памяти занимала такая программа на BASIC в ZX Spectrum
      10 PRINT "Hello"

      ?
      Ответить
      • А вот не знаю. Знаю, что некоторые бейсики компилировались в байткод для пирфоманса, но деталей реализации не знаю.

        Например, Quick Basic (не урезанный 1.0, шедший с ДОСом и с NT 3.1-4.0, а полный, продававшийся отдельно) умел сохранять программы в текстовом формате и в «двоичном» (который потом не мог открыть 1.0).

        Во многих реализациях знак вопроса был алиасом для PRINT, можно было для экономии написать:
        10 ? "Hello"

        Даже вроде пробел после ? можно было не ставить.
        Ответить
        • Подскажу.
          видишь, тут ключевые слова на кнопках?
          https://i.ebayimg.com/images/g/EccAAOSwE-Fmeyzq/s-l1600.webp

          Просто так руками "print" никто не писал. Как думаешь, почему?

          &gt;?
          в каком-то дебагере так было еще
          Ответить
          • Подозреваю, что ключевые слова занимают один-два байта.
            Ответить
            • Уже нагуглил. Один.

              «Коды 0xA5-0xFF соответствуют ключевым словам языка BASIC. »
              Ответить
              • Тогда получается, что кириллицу можно использовать только в КОИ-7, чтобы не трогать верхнюю половину таблицы.

                Ещё 19 кодпоинтов — user definable graphics, но это кот наплакал.
                Ответить
          • Забавно, что закодировали не только слова программ (IF, FOR), но и слова интерактивного режима (LIST, NEW), которые не могут присутствовать в программе, поэтому смысла не было их ужимать.

            Получился какой-то АПЛ с огромным набором символов.
            Ответить
          • Пиздец:

            https://ru.m.wikipedia.org/wiki/Википедия:К_удалению/4_июня_2022#Набор_символов_ZX_Spectrum

            «Аргументы ВП:ЭТОПОЛЕЗНО в Википедии невалидны. — Владлен Манилов [✎︎] / 17:19, 8 февраля 2024 (UTC)»

            Т. е. любую полезную информацию можно просто так выставить на удаление, если википидоры посчитают, что у неё нет энциклопедической значимости.
            Ответить
    • Я напускал в молоко слюней, и теперь оно склисло.
      Придется делать blini
      Ответить
    • сломался https://govnokod.ru/3001 (
      Ответить
    • «почта россии» позволяет отправлять на фронт бесплатные посылки.

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

      в итоге на имя одного лейтенанта пришло 180 тонн одеял.
      Ответить
      • Рабинович узнал, что все телеграммы о поиске пропавшей экспедиции Нобиле передаются бесплатно, и отправил такую телеграмму: «ХАИМ ЗПТ ИЩИ НОБИЛЕ ТЧК ЕСЛИ НЕ НАЙДЕШЬ ЗПТ ПРИШЛИ СКУМБРИИ ТЧК»
        Ответить
        • Кстати, раньше на предлогах в телеграмах экономили (бо оин стоили денег как и все слова)

          В "Покровских Воротах" есть сцена, как Велюров шлёт пловчихе телеграму "СХОЖУ УМА" (Увлечение пожилого лысого Велюрова молодой плавчихой вылядит коммично, но вероятно после ВОВ (дело происходит в 50-е) молодых мужиков было не много)

          Если экономили на предлогах, то почему не экономили на ЗПТ ТЧК?
          Ответить
          • Я вообще не понимаю, откуда пришли ЗПТ и ТЧК, ведь и в коде Морзе (в эпоху ручного телеграфа), и в коде Бодо (в эпоху телетайпов) есть необходимые знаки препинания.
            Ответить
          • У студента денег осталось на одно слово. Тогда он отправил родителям телеграмму: «СТОРУБЛИРУЙТЕ».
            Ответить

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