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

    −5

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    #ifdef ret
    #undef ret
    #endif
    
    #define ret return

    Говнокод или всё-таки нет? :)

    Запостил: Graviton, 20 Декабря 2016

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

    • В жопу трах.
      Ответить
      • Я выебу тебя так, как ни ебал никто. Тебе будет казаться, что тебя ебёт поезд. Чух-чух чух-чух, чух-чух чух-чух...
        Ответить
    • Говно конечно. Дефайн без причины - признак дурачины.

      З.Ы. Ты поломал код с асм вставками и любой код, который юзал переменную ret.
      Ответить
      • вставил и поломал прямую кишку твоей матушки, проверь
        Ответить
      • лень много печат.
        Ответить
      • А разве это ломает асмовставки? Там же код в строковом литерале.
        Ответить
        • не всегда
          Ответить
        • https://msdn.microsoft.com/en-us/library/45yd4tzz.aspx например тут никаких строковых литералов я не наблюдаю
          Ответить
          • На винде все через жопу как обычно.
            Ответить
      • Да говно все эти Asm-вставки. Во-первых, это всё равно, что пытаться в русский текст вставить текст на другом языке (например на китайском). Во-вторых, не каждый знает Ассемблер, к сожалению. Что касается переменных с именем ret, то это часто говорит о двух явлениях, либо программист не знает английский, либо заведомо использует неправильную тактику именования переменных.
        Поэтому, в нормальном C++ коде никаких вставок не должно быть, также как и goto. Тем более разные реализации компиляторов смотрят на эти ебучие вставки по-разному, а некоторые вообще запрещают использование определенного типа асм-инструкций. Либо мы изначально что-либо пишем на Ассемблере, либо на C++. Иначе никак.
        Ответить
        • >Что касается переменных с именем ret

          https://github.com/torvalds/linux/search?utf8=%E2%9C%93&q=int+ret
          11,936 code results
          Ответить
          • Ну и что? Тысячи их!
            А еще, в английском слово "ret", может быть глаголом, который означает "мочить" (коноплю); может быть сокращением от : 1) "retired", 2) "returned" (наш пациент), 3) "ring-emitter transistor" (транзистор с кольцевым эмиттером); и т.д. и т.п.
            Если честно, практика именования переменных - вопрос спорный. Лично меня переменные с именем ret напрягают, я лучше буду использовать бг-мерзкий result или придам конкретный смысл.
            Ответить
            • return ret;
              да, я хотел возвратить именно мочёную коноплю, а не результат

              практика задавать ret для имени возвращаемой переменной довольно распространенная, юзалась в обоих командах, где мне довелось поработать, и часто встречаю в статьях, опенсорсе. Хотя может сказывается работа преимущественно с С-подобным кодом уж не пыхарь ли ты часом?
              Ответить
              • Это твои твои сишники из твоей команды - пыхари от системного программирования. Я на таких кадров насмотрелся, и на код их насмотрелся, и в цирке больше не смеюсь.
                Ответить
                • Пыхари от системного программирования - это ардуинщики, не?
                  Ответить
            • А почему result богомерзкий? Я использую.
              Ответить
            • а еще в x86 бывает ret (из call) и iret (из int)
              Ответить
        • > c++
          Ах, так это еще и кресты... Тогда за такие макросы надо вообще анально карать.
          Ответить
          • Анально надо карать за использование асм-вставок, которые в большинстве случаев говорят об ошибках проектирования.
            Ответить
            • > ошибках проектирования...
              ...процессора и конпелятора.
              Ответить
              • Ну да, ну да. Вот спроектируйте мне компилятор, чтобы он мог AES инструкции процессора задействовать, когда видит реализацию AES, написанную на сях. Надо наделить компилятор каким-то подобием ИИ, чтобы он реализацию AES шифрования (без всяких там интринсиков) мог распознать и навтулять туда инструкций нужных
                Ответить
                • я так полагаю речь идет о пользовательском коде. Для использования AES инструкций в си коде должны быть какие-то (возможно, даже header-only) библиотеки, по крайней мере для SSE они есть
                  Ответить
                  • И в коде этих библиотек надо или использовать асмовставки или какие-то интринсики, иначе получившийся код будет неоптимальным. Компиляторы не умеют распознавать AES по коду на Си и генерить нужные инструкции.

                    А вот SSE инструкции компилятор еще может втулить в ответ на сишный код без каких-либо интринсиков и асмовставок
                    Ответить
              • ..программиста
                Ответить
              • > конпелятора
                Неплохо звучит. Прям-таки компилятор, разработанный "под коноплёй", что, кстати, не исключение.
                Ответить
                • Вы, вероятно, тут впервые?
                  Ответить
                  • Впервые я сейчас набаропил тебе в анус, проверяй
                    Ответить
                    • Почему ты такой злой? Это связано с тем, что в детстве тебя насиловал твой папв?
                      Ответить
                • Кстати, откуда это пошло? Я подумал, что бэхоцэ, но там было КОМПЕЛИРУЙТЕ
                  Ответить
        • >>Да говно все эти Asm-вставки.
          ну вот в вебе любят посреди HTML вставлять PHP который генерирует JavaScript который генерирует HTML, и ничего
          Ответить
          • Речь идет не о веб, а о винегрете из кода Ассемблера и C++.
            Многие вебщики понятия не имеют, как работают всякие окошки, кнопки и прочие свистоперделки, не говоря уже о коде Ассемблера.
            Возвращаясь к asm-вставкам в C++, то существует эмпирическое правило "Не используй asm-вставки!". Вместо них гораздо лучше asm-код вынести в отдельный asm-файл, а затем подключить к проекту.
            Ответить
            • Да ты кукаретизируешь, не иначе. В бусте этих вставок хоть жопой жуй.
              Ответить
              • Особенно хороши вставки а 64 битном vc
                Ответить
              • Жуйте на здоровье! Буст удобен, но и он не лишен недостатков.
                Ответить
                • >> удобен, но и он не лишен недостатков.

                  Уважаю за свежий взгляд и небанальные выводы
                  Ответить
                • И каким боком асмовставки являются недостатком буста?
                  Ответить
                  • Ну вообще гря мешать два ЯПа в одном модуле это плохо, если конечно нет очень веских причин для этого (напрмер, повышение перформанса)

                    Кроме того асмо вставки наверняка не стандартны и конпелятороспецифичны и как я уже грил в 64бит там буй

                    http://mariusbancila.ro/blog/2010/10/17/no-more-inline-asm-in-vc-on-x64/
                    Ответить
                    • Царь говорил, что все конпеляторы, кроме gcc, не нужны.
                      Ответить
                      • орлы?
                        хорош-ли код gсс под ARM?
                        Ответить
                        • ARM по мнению Царя тоже не нужен, потому что единственная вменяемая платформа — это x86_64.
                          Ответить
                          • фу, неееет!!
                            x86 говно же

                            ламерский вопрос: а gcc умеет под win32 без цигвина?
                            Ответить
                            • 64 же!
                              Ответить
                              • что 64?
                                mingw-w64?
                                Ответить
                                • Это к первой части. Царь говорил что x86_64 (AMD64) не говно. Неужели он всё это время нам врал?
                                  Ответить
                                  • AMD64 уже лучше: там убрали ненужный хлам, но всё равно ISA у x86 сложная и нудная, стартует он в реальном режиме итд
                                    Ответить
                                    • А как работает EFI/UEFI?
                                      Ответить
                                      • ..переключает его в протектед мод?
                                        Ответить
                                        • Похоже на то. Операционка на входе уже имеет процессор в защищённом режиме.

                                          Неужели старт в реальном режиме — это так плохо?
                                          Ответить
                                          • А чем же он заполняет GDT? Разиж без нее можно в protected?

                                            Внмиание, сейчас копмпьютерные гно борманд нам всё объяснит.

                                            >>Неужели старт в реальном режиме — это так плохо?
                                            Ну целый режим со своей адресацией ради старта? Не слишком-ли сложно?

                                            Нужно отрефакторить и выкинуть старый мусор. Частично это уже сделано (в 64 нет сегментов и нет v86), но говна еще осталось.

                                            Или вот взять IO. Зачем нужен отдельный неймспейс под него?
                                            --------

                                            В общем чем проще понять ISA процессора обычному программисту -- тем лучше. ISA x86 сложно (именно потому детей учат на примерах других CPU) и оно сложно not because of good reason, а по причине обратной совместимости.
                                            Ответить
                                        • Да. Причём переключается в протектед уже где-то в районе пятой-десятой инструкции биоса.
                                          Ответить
                                          • А гдт потом ось переписывает?
                                            Ответить
                                          • А что он до этого момента делает?
                                            Ответить
                                            • работает в реал моде

                                              Ваш кэп
                                              Ответить
                                            • Эти несколько инструкций он готовится к переходу ;)

                                              Да, ось потом ставит свою гдт.

                                              В общем-то сама гдт процу не особо нужна (кроме некоторых кейсов). Если бы при резете теневые регистры правильно заполнялись - он мог бы сразу в протектеде просыпаться. Но совместимостьс древним говном, все дела...
                                              Ответить
                                              • > совместимость с древним говном
                                                З.Ы. Хотя, по сути, она там и не нужна - старая фирмварь один хер на новых процах не взлетит.
                                                Ответить
                                                • пофирмварил тебе в железо, проверь
                                                  Эксклюзивно для Борманда пустил душок свободы без модерации.
                                                  Ответить
                                              • как? как не нужна? как MMU работает?

                                                ну вот фирмваря грит
                                                mov ax, 0x123456

                                                как это 0x123456 превратится в физ. адрес для контролера памяти?
                                                Ответить
                                                • > как не нужна?
                                                  GDT проц читает только когда он суёт новый селектор в сегментный регистр:
                                                  - явный mov в сегментный регистр
                                                  - far call/jmp/ret
                                                  - вход в прерывание и выход из него
                                                  - lldt и ltr

                                                  Вот вроде и все кейсы. Каждая из этих инструкций читает одну запись из GDT и кеширует её в теневом регистре. И если твой код эти инструкции не юзает - можно какое-то время пожить совсем без GDT.

                                                  > как MMU работает
                                                  Никак, его в protected mode не обязательно включать (в отличие от long mode). Просто физические адреса равны виртуальным, вот и всё.
                                                  Ответить
                            • Без цигвина умеет. Есть Mingw голый, Mingw+MSYS (это такой слой, который толще Mingw, но тоньше Cygwin). Ещё есть антикварные костыльные решения (DJGPP + доп. линкер + доп. библиотеки).
                              Ответить
                    • > мешать два ЯПа в одном модуле это плохо
                      Я эти вставки воспринимаю примерно как сорт интринсиков, платформозависимые костыли.

                      > Кроме того асмо вставки наверняка не стандартны и конпелятороспецифичны
                      Ну естественно. Они и нужны, когда нужно сделать что-то изъебистое. Такое врятли может быть покрыто стандартом, а потому заведомо зависит от компилятора.
                      Кстати, в буст.атомик на 64-разрядной студии используют студио-специфичные интринсики.
                      Ответить
            • Спасибо, капитан.
              Ответить

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