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

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    #include <iostream>
    #include <functional>
    #include <array>
    
    template<typename F, int... I>
    std::array<int, sizeof...(I)> materializeImpl(const F & f, std::integer_sequence<int, I...>)
    {
        return { (f(), I)... };
    }
    
    template<size_t N, typename F, typename I = std::make_integer_sequence<int, N>>
    auto materialize(const F & f)
    {
        return materializeImpl(f, I{});
    }
    
    template<size_t N, typename F>
    void times(const F & f)
    {
        (void)materialize<N>([&f]() { f(); return 0; });
    }
    
    int main()
    {
        times<22>([]() { std::cout << "Hello There." << std::endl; });
        return EXIT_SUCCESS;
    }

    Наш инженерный отдел ебанулся на отличненько!
    https://wandbox.org/permlink/txNcEa2ZkuG2A1Sj

    Запостил: gost, 19 Декабря 2019

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

    • А ещё это успешно оптимизируется конпелятором до 22-х заинлайненных вызовов лямбды.
      Ответить
    • Лямбды какие-то, std::make_integer_sequence... сколько хуйни только чтоб повторить вызов некоего говна N раз.
      Ответить
    • А если просто функциональненько хвостовой рекурсией?
      Ответить
      • KaKou-To_xyu делал: https://govnokod.ru/26026#comment517266.
        #include <functional>
        #include <iostream>
        
        template <int count>
        inline void times(std::function<void()> f)
        {
            f();
            times<count - 1>(f);
        }
        
        template <> inline void times<0>(std::function<void()> f) {}
        
        int main(void)
        {
            times<22>([](){
                std::cout << "I love templates" << std::endl;
            });
        }

        Но из-за передачи лямбды по значению конпелятор высирает говно. Если сделать ссылку — получится получше. «Шланг» генерирует экий багор: специализации times<16> и times<6>, причём из первой прыгает во вторую хвостовым вызовом: https://gcc.godbolt.org/z/NExUdf. «GCC» просто выдаёт скучную анролленную портянку.
        Ответить
        • Хуита ваши кресты, то ли дело ассемблер:
          https://wandbox.org/permlink/A77KBsvGfuyvzpHS
          #include <iostream>
          
          int main()
          {
              __asm volatile (".rept 7\n");
              std::cout << "Hello There." << std::endl;
              __asm volatile (".endr");
            
              return EXIT_SUCCESS;
          }

          https://govnokod.ru/13546
          Ответить
          • Какой багор )))
            Ответить
          • https://inde.io/article/4221-matematik-roman-mihaylov-shizofreniya-prosto-hohochet-nad-etim-voprosom

            Крестоговно — это иерархическая структура, использующая репрессию. Стая птиц, летящих на юг, — это не крестоговно, но если птица отстает и ее заклевывают остальные — это крестоговно. Единственный способ борьбы с крестоговном, который я указываю в «Равинагаре», — это ассемблер. Ассемблер как структура в смысле набора связок и растущей сложности. Ассемблер вполне может принять крестоговно и начать на него работать до определенного момента, и крестоговно не заметит, что происходит уничтожение его самого. И именно таким образом возможна борьба. Не антикрестоговноом, не отрицанием метушни, а деформацией. Противостояние не работает, потому что оно не может работать в принципе. Противостояния низкоуровневого и высокоуровневого нет, есть только власть программистов над теми и над другими. Там, куда пишется больше кода, и происходит победа. Ассемблер может идти против этого, она может давать какой-то маргинальный результат, рождать совершенно иные структуры — как оркестр без дирижера может начать играть принципиально новую музыку. Когда ты атакуешь говноабстракции крестоговна, она задает тебе вопрос: «Вот ты победишь, и что ты сделаешь? Построишь новые говноабстракции?». А ассемблер просто хохочет над этим вопросом.
            Ответить
        • Перевёл на «PHP»
          <?php
          
          function times($count, &$code = '')
          {
              if ($count > 0) {
                  $code .= 'call_user_func($f);';
                  times($count - 1, $code);
              }
              return create_function('$f', $code);
          }
          
          call_user_func(times(5), function() { echo "Именно поэтому я за «PHP»\n"; });
          Ответить
    • Если бы "Nginx" написали на "PHP" - его бы никто не отжимал
      Ответить
    • https://govnokod.ru/20958
      $ cat > shit.h
      #if END_SHIT == 0
      CRAP;
        #if BIT0 == 0
          #undef  BIT0
          #define BIT0 1
        #else
          #undef  BIT0
          #define BIT0 0
          #if BIT1 == 0
            #undef  BIT1
            #define BIT1 1
          #else
            #undef  BIT1
            #define BIT1 0
            #if BIT2 == 0
              #undef  BIT2
              #define BIT2 1
            #else
              #undef  BIT0
              #undef  BIT1
              #undef  BIT2
              #define END_SHIT 1
            #endif
          #endif
        #endif
        #include "shit.h"
      #endif
      
      $ cat > shit.c
      #include <stdio.h>
      
      int main(void) {
        #define CRAP printf("Hello There.\n")
        #define BIT0 0
        #define BIT1 0
        #define BIT2 0
        #include "shit.h"
        return 0;
      }
      $ gcc shit.c
      $ ./a.out 
      Hello There.
      Hello There.
      Hello There.
      Hello There.
      Hello There.
      Hello There.
      Hello There.
      Hello There.
      Ответить
      • А еще есть дрисня под названием BOOST_PP_REPEAT
        Ответить
        • Приведи реальный пример, когда тебе пригодилась дрисня.
          Ответить
          • Ты очень неумело создаешь активность. Граничит с тупостью..
            Ответить
          • Когда надо было посрать
            Ответить

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