Кресты / Говнокод #12142 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
#define TRUE (1)
#define FALSE (0)

#define internal protected:
#define external public:
#define declareSuper(superClass) protected: typedef superClass super

Оттуда.

Запостил: LispGovno LispGovno, (Updated )

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

  • После бессмысленного и беспощадного #define interface struct от майкрософт, которое кидал когда-то Дефекейстра, я уже ничему не удивляюсь.
    Ответить
        • > Решил я как то раз провести тест, кто быстрее, stl vector или мои динамические массивы,

          test 1: std::vector time milisec 9.14
          test 2: std::vector reserve time milisec 4.30
          test 3: dynArray time milisec 5218.74
          test 4: dynArrayT time milisec 40157.38

          Ну чтож, автор - адекватный человек, который признал свой велосипед говном, и не постеснялся об этом рассказать.
          Ответить
        • Зато ниже прям слёт пионеров велосипедостроения... спасибо за ссылку, поржал.

          > Обрати внимание - моя реализация близка std::vector (там чуток хуже, но мне подходит)
          Внимание, вопрос: зачем использовать свой вектор, если он медленнее стандартного?
          Ответить
            • А что, простите, можно расширять в векторе? Ну разве что счетчик ссылок добавить, как в QVector.
              Ответить
              • Более оптимальное добавление в начало вектора. Использовать более производительные memcpy и realloc если позволяют элементы вектора. Добавить нужные алгоритмы прямо в интерфейс вектора, например:
                auto iteratorRange = v.filter(std::negate).map(toPair);

                А не писать крестоблядства:
                std::vector<decltype(v)> v1;
                std::copy_if(std::begin(v), std::end(v), std::back_inserter(v1), std::negate);
                std::vector<std::result_of<decltype(toPair)>::type > v2;
                std::transform(std::begin(v1), std::end(v1), std::back_inserter(v2), toPair);
                Надеюсь в последнем я нигде не ошибся, тк это для меня сложно. Если второй вариант кому-то показался удобнее первого, то я, как и Понтий Пилат, умываю руки.
                Ответить
                  • Вместо std::negate нужно написать std::bind(std::less<decltype(v)>(), _1, 0)
                    Блять, да кто это придуман? Назовите имя этого человека? Я трижды кину в него камень.
                    Ответить
                    • Вообщем посоны вот так получается:
                      std::vector<decltype(v)::value_type> v1;
                      std::copy_if(std::begin(v), std::end(v), std::back_inserter(v1), std::bind(std::less<decltype(v)>(), _1, 0));
                      std::vector<std::result_of<decltype(toPair)>::type > v2;
                      std::transform(std::begin(v1), std::end(v1), std::back_inserter(v2), toPair);
                      Ответить
                      • А вот примерно так бы выглядел код, если бы не догадались добавить std::copy_if в с++11 (std::bind ещё поправил, выше он не верно написан):
                        std::vector<decltype(v)::value_type> v1;
                        std::copy(std::begin(v), std::end(v), std::back_inserter(v1))
                        v1.erase(std::remove_if(std::begin(v1), std::end(v1), std::bind(std::greater_equal<decltype(v)::value_type>(), _1, 0)), std::end(v1));
                        std::vector<std::result_of<decltype(toPair)>::type > v2;
                        std::transform(std::begin(v1), std::end(v1), std::back_inserter(v2), toPair);
                        А вы ведь посмотрите насколько это не оптимально, относительно первоначального варианта. Типичное квадратичное говно.
                        Ответить
                        • что ты вообще хотел сделать?
                          перепиши в виде императивного цикла
                          тебе скажет спасибо тот программист, который будет поддерживать твой говнокод после того, как тебя уволят
                          Ответить
                          • Не нужен цикл. Короче так:
                            auto iteratorRange = v.filter(std::negate).map(toPair);
                            Ответить
                            • Сделайте мне редактирование:
                              auto iteratorRange = v.filter(isNegate).map(toPair);
                              Ответить
                              • О каком Хаскеле ты говоришь? Тот что Карри? Это как в C#, только названия методов другие.
                                Ответить
                                • я не знаю, что за метод такой filter
                                  но подозреваю, что тебе вдруг понадобился boost::filter_iterator
                                  Ответить
                                  • мне помогают мои контейнеры. кресты методы расширения как в сишарпе не осилили
                                    Ответить
                                    • ах, так к нам пожаловал успешный игровой программист-индивидуал
                                      поведай нам больше, как собственный контейнер еще больше приблизил тебя к завершению проекта в срок
                                      Ответить
                                          • А ты представляешь себе, если бы я писал всю игр на этом крестоблядском стл-поносе страуса? Насколько бы я был далек от создания игры?
                                            Ответить
                                            • но написать велосивектор ты додумался

                                              если так жжотса в причинном месте, что из крестов делаешь сишарпик, зачем тебе кресты?
                                              Ответить
                                              • шарпик тормозной.
                                                нужны быстрые высокоуровневые кресты, а не тот детский сад, что ты видел выше.
                                                Ответить
                                                • детский сад я вижу только в твоих каментах (и в теме - это же твоих рук дело)
                                                  если ты думаешь, какой ты крутой обдурил систему, сэкономив на конструкторах копирования/перемещения, написав memmove, то ты жестоко ошибся

                                                  нормальные программисты используют вектор так, для чего он предназначен - хранение массива неразрывно
                                                  и говнооптимизацией реаллоцирования не получают даже 0.1% ускорения, потому что это действительно редкая операция 😉
                                                  Ответить
                                                  • >и говнооптимизацией реаллоцирования не получают даже 0.1% ускорения, потому что это действительно редкая операция

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

                                                      и поспешу тебя удивить, в нормальных реализациях stl вектор умеет отличать pod от не-pod, используя где нужно memcpy, но гораздо важнее сделать #define TRUE 1, это так проффессионнально, куда уж нам, нубам

                                                      и да, не нубам еще известны специфичные вызовы типа _expand/mremap, позволяющие иногда вырасти существующему выделенному блоку

                                                      ты ведь понимаешь, что вся дополнительная эффективность вектора - в его яйце аллокаторе?
                                                      Ответить
                          • >что ты вообще хотел сделать?
                            Ну вот приехали, крестовики не понимаю код на крестах. Туда куда вели стандарт, туда и пришли.
                            Ответить
  • Гость жжот в этой теме.
    Только крестоблядский стл - это не струасиный понос, а степашкин.
    И это не понос, а удобная библиотека. Конечно, бывают и поудобнее, но СТЛ наиболее убедителен.
    Ответить
    • Ага, и меня гость повеселил. Когда то, что записывается на нормальных языках в одну строчку, а на stl в 5 длинных - это показательно. Только не степашкин понос, а хрюшин.
      Ответить
      • Да потому что пора признать, что С++ это такая сишка, в которой не надо вручную с указателями на строки трахаться, ну и над освобождением ресурсов можно не париться (все обёртки есть в стл). И нехуй пытаться сделать из неё чёрти что.
        И если бы из крестов вообще выпилили шаблоны и автодеструкторы, кроме стл, и вшили бы стл в язык, сделав удобную поддержку со стороны синтаксиса, то для 99% задач кресты от этого только бы стали удобнее.
        Впизду универсальность, возможность "нопейсать свой язык на этом языка" итд, это только мешает писать код блеать.
        Ответить
        • > выпилили шаблоны и автодеструкторы
          Ну и само собой new, delete и всю адресную арифметику. Ибо нехуй.
          Ответить
        • если бы выпилили языковую поддержку шаблонов, засунув стл в язык, то на выходе получили бы сраный делфи 7

          спасибо, не надо
          Ответить
          • > если бы выпилили языковую поддержку шаблонов, засунув стл в язык, то на выходе получили бы православный делфи 7

            Именно, вы прочитали между строк мой тонкий намёк!
            Как я сказал ранее, фишки С++, которых не было в Дельфи-7, не дают видимого ускорения разработки, зато дают +100 к пустомыслию на тему "а правильно ли я сделал, ведь есть какой-то хитровыебанный паттерн, который сделает этот участок кода типобезопасным и без копипасты 5 строчек, и похеру, что это 100 строк нечитаемого шаблонного говна, которые надо ещё неделю отлаживать, читая простыни компилятора, извесного невменяемостью на тему чётко указать, где именно ошибка".
            Ответить
            • так ведь дело в следующем
              если писать однопоточное приложение с глобальными объектами на 10-20к строк, то достаточно и С, даже не дельфи, представь себе
              так что если тебе не пригодились шаблоны, раии, перегрузка операторов и ничего кроме стл (а ведь для своего андроид-ндк ты даже не пытался выйти за рамки стл), если тебе достаточно 2003 студии - так это не значит, что ты есть 99% всех разработчиков
              вот как то так
              Ответить
              • > а ведь для своего андроид-ндк ты даже не пытался выйти за рамки стл

                А тот эпичный тред?

                > если тебе достаточно 2003 студии - так это не значит, что ты есть 99% всех разработчиков

                Ну я как бы примерно сужу по отголоскам того, что я слышу. Хитрожопых шаблонистов не любят.
                Ответить
                • > Хитрожопых шаблонистов не любят.
                  Хитрожопых ВООБЩЕ не любят.
                  Ответить
            • Делфьи 7 никогда не были православными, просто слоупоки привыкли не апгрейдиться пока в Броланде пропивали свои активы.
              И IDE не работает на системе с DEP, что очень символизирует.
              Ответить
              • > И IDE не работает на системе с DEP
                Происки майкрософта. Решили устранить конкурирующую IDE под прикрытием внедрения DEP.
                Ответить
              • Просто Борланд долго выпускал откровенно сырые версии, поэтому а всякий случай все сидели на семёрке.
                Ответить
              • Вообще странно, что программы на Дельфи вообще там работают, в них же извечная задача "получить объект, соответствующий этому окну" вроде бы решается через самомодифицирующий код (генерация оконной процедуры).
                Ответить
                • Ну задача "получить объект, соответствующий этому окну" всегда решается через жопу. Или генерация заглушки, или хеш, или GetProcParam.
                  Ответить
                • Чё чё? Кусок кода, генерируемого по ходу работы, можно? Не знал, что в Дельфах есть такие космические технологии.
                  Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8