1. Список говнокодов пользователя gost

    Всего: 246

  2. Куча / Говнокод #26371

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    Неблагодарный opensource: разработчик самого быстрого веб сервера удалил его репозиторий
    
    Краткая суть ситуации: наш соотечественник fafhrd91 на протяжении 3 лет
    практически самостоятельно (см. кдпв) писал actix-web — один из популярнейших
    крейтов в инфраструктуре раста, лидер в большинстве различных бенчмарков,
    и за это время подвергался как минимум трём волнам гонений за "неправильное
    использование раста". После последнего раза автор психанул, и перенес репозиторий
    к себе в аккаунт с пометкой "Планирую скрыть репозиторий".

    Именно поэтому я против «пидарастов». Да и остальных хипстеров-говноедов.

    https://habr.com/ru/post/484436/

    gost, 21 Января 2020

    Комментарии (12)
  3. Python / Говнокод #26356

    +2

    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
    #  Пример #1
    class FastClass:
    
        def do_stuff(self):
            temp = self.value  # это ускорит цикл
            for i in range(10000):
                ...  # Выполняем тут некие операции с `temp`
    
    #  Пример #2
    import random
    
    def fast_function():
        r = random.random
        for i in range(10000):
            print(r())  # здесь вызов `r()` быстрее, чем был бы вызов random.random()

    Забавно, что в статье под названием «Разработка чрезвычайно быстрых программ на Python» (https://habr.com/ru/company/ruvds/blog/483678) этот самый «Python» оказался обосран (ненамеренно) куда качественнее, чем в недавно обсуждённом высере (https://govnokod.ru/26050#comment517858).

    Неужели конпелятор/интерпретатор «Питона» настолько туп, что не может самостоятельно провести вот эти вот микрооптимизации?

    gost, 16 Января 2020

    Комментарии (105)
  4. Куча / Говнокод #26346

    +3

    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
    Разработчикам непомерно переплачивают
    
    
    Еще в 1970 году были отличные разработчики, которые построили фундамент для всего,
    что мы используем сейчас. Они были невероятно талантливы и чрезвычайно скромны.
    И то и другое одинаково важно. Они выполняли свою работу как самые ранние исследователи,
    в пустыне знаний и под ураганами ошибок, простите уж мне мой высокопарный слог.
    Я никогда не слышал, чтобы отсутствие вертикального монитора или стоящего
    стола — мешали им делать все возможное, да и невозможное тоже.
    
    Всему, что у нас есть, мы обязаны им. Они были элитой. Мы — нет.
    
    Это в общем-то означает, что мы, вероятно, должны перестать просить
    бонусы к нашим уже и так непомерно раздутым зарплатам, перестать ныть
    и перестать требовать лучшей жизни. У нас уже есть одна.

    Охуенный наброс говна на вентилятор, ящитаю!

    https://habr.com/ru/post/483592/

    gost, 12 Января 2020

    Комментарии (64)
  5. C++ / Говнокод #26341

    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
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    t = rx + (ry * 100);
    std::vector<std::string> tmap;
    coin = 0;
    rcol = 0;
    roomname = "Untitled room ["+UtilityClass::String(rx) + "," + UtilityClass::String(ry)+"]";
    
    switch(t)
    {
    
    case rn(50,50):
    
        tmap.push_back("283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283");
        tmap.push_back("283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283");
        tmap.push_back("283,283,283,283,283,283,283,283,284,444,444,444,444,444,444,444,444,444,285,283,284,444,444,444,444,444,444,444,444,444,444,444,444,285,283,283,283,283,283,283");
        tmap.push_back("283,283,283,283,283,283,283,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,283,283,283,283,283,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,283,283,283,283,283,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,283,283,283,283,283,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,283,283,283,283,283,283,405,0,0,0,363,364,365,0,0,0,403,283,405,0,0,0,363,364,365,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,283,283,283,283,283,283,405,0,0,0,403,283,405,0,0,0,443,444,445,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,283,283,283,283,283,283,405,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("444,444,444,444,444,444,285,283,405,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("0,0,0,0,0,0,403,283,405,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("0,0,0,0,0,0,403,283,405,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("0,0,0,0,0,0,403,283,405,0,0,0,403,283,324,364,364,364,364,364,364,364,364,364,325,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("0,0,0,0,0,0,403,283,405,0,0,0,403,283,283,283,283,283,283,283,283,283,283,283,283,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("0,0,0,0,0,0,403,283,405,0,0,0,443,444,444,444,444,444,444,444,444,444,444,444,285,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("364,364,365,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,405,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,405,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,405,0,0,0,403,283,324,364,364,364,364,364,364,364,364,364,364,364,365,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,405,0,0,0,403,283,283,283,283,283,283,283,283,283,283,283,283,283,405,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,405,0,0,0,443,444,444,444,444,444,444,444,444,444,444,444,444,444,445,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,324,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,325,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
        tmap.push_back("283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
    
        obj.createentity(game, 232, 24, 10, 0, 250500);  // (savepoint)
    
        if(game.intimetrial)
        {
            obj.createblock(0, 0, 0, 8, 240);
        }
    
        rcol=1;
        roomname = "Get Ready To Bounce";
        break;

    Именно поэтому я за «std::embed».
    https://github.com/TerryCavanagh/VVVVVV/blob/master/desktop_version/src/Labclass.cpp

    gost, 11 Января 2020

    Комментарии (60)
  6. C++ / Говнокод #26324

    +3

    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
    template <typename T>
    void f() {
         if constexpr (std::is_arithmetic_v<T>)
             // ...
         else
           static_assert(false, "Must be arithmetic"); // ill-formed: invalid for every T
    }
    
    // The common workaround for such a catch-all statement is a type-dependent expression that is always false:
    template<class T> struct dependent_false : std::false_type {};
    template <typename T>
    void f() {
         if constexpr (std::is_arithmetic_v<T>)
             // ...
         else
           static_assert(dependent_false<T>::value, "Must be arithmetic"); // ok
    }

    То есть «static_assert(false)» в шаблоне — это UB. Чтобы оно было не UB и можно было спокойно отключать ненужные специализации — надо городить ёбанный костыль. Пиздец. Почему стандартизаторы не могут просто взять и сделать что-то удобное? Что-то, для чего не требуется городить по десятку костылешаблонов, заставляющих его работать? Что-то без ёбанной явной специализации для bool? Почему любой высер крестокомитета обязательно должен быть максимально сложным, вербозным, неочевидным говном с кучей подводных камней и UB?

    gost, 06 Января 2020

    Комментарии (31)
  7. C++ / Говнокод #26308

    +4

    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
    28. 28
    int main()
    {
        using ToString::ExprToString;
    
        using Result1 = Eval<Expr<Add,
            Expr<Div, Int<5>, Int<3>>,
            Expr<Div, Int<6>, Int<8>>>>;
        std::cout << ExprToString<Result1>::toString() << std::endl;  // 5/3 + 6/8 = (29 / 12)
    
        using Result2 = Eval<Expr<Div, Int<100>, Int<20>>>;
        std::cout << ExprToString<Result2>::toString() << std::endl;  // 5
    
        using Result3 = Eval<Expr<Div, Int<27>, Int<24>>>;
        std::cout << ExprToString<Result3>::toString() << std::endl;  // (9 / 8)
    
        using Result4 = Eval<Expr<Mul,
            Expr<Div, Int<5>, Int<3>>,
            Expr<Div, Int<6>, Int<8>>>>;
        std::cout << ExprToString<Result4>::toString() << std::endl;  // 5/3 * 6/8 = (5 / 4)
    
        using Result5 = Eval<Expr<Derivative, Var<0>, Expr<Mul, Var<0>, Var<0>>>>;
        std::cout << ExprToString<Result5>::toString() << std::endl;  // d/dx x*x = 2*x = (Var(0) * 2)
    
        using Result6 = Eval<Expr<Derivative, Var<0>, Expr<Div, Int<2>, Var<0>>>>;
        std::cout << ExprToString<Result6>::toString() << std::endl;  // d/dx 2/x = -2 * x^2
    
        return EXIT_SUCCESS;
    }

    Написал калькулятор с символьными вычислениями на шаблонах. Получился «Лисп».
    https://wandbox.org/permlink/vAHC5IpyIIyQhUjJ

    gost, 04 Января 2020

    Комментарии (16)
  8. Java / Говнокод #26284

    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
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    private static void createHook(MethodNode mn,
                                   String targetClassName,
                                   String hookMethodClass,
                                   String hookMethodName,
                                   Boolean printMessages)
    {
        InsnList il = new InsnList();
        LabelNode originalLabelNode = new LabelNode();
        // Object caller, param1, param2, ...
        String hookMethodDesc = "(Ljava/lang/Object;" + mn.desc.substring(1);
    
        il.add(new VarInsnNode(Opcodes.ALOAD, 0));  // this
        il.add(new MethodInsnNode(Opcodes.INVOKESTATIC,
                                  isOriginalCallClassName,
                                  isOriginalCallMethodName,
                                  isOriginalCallMethodDesc,
                                  false));
        il.add(new JumpInsnNode(Opcodes.IFNE, originalLabelNode));
    
        if (printMessages) {
            il.add(BytecodeHelper.getPrintlnSequence("patched " + mn.name + mn.desc + " called"));
        }
    
        il.add(new VarInsnNode(Opcodes.ALOAD, 0));  // this
        il.add(getParamsLoadSequence(mn.desc, 1));  // other params
        il.add(new MethodInsnNode(Opcodes.INVOKESTATIC, hookMethodClass, hookMethodName, hookMethodDesc, false));
        il.add(new InsnNode(parseReturnOpcode(hookMethodDesc)));
    
        il.add(originalLabelNode);
    
        if (printMessages) {
            il.add(BytecodeHelper.getPrintlnSequence("original " + mn.name + mn.desc + " called"));
        }
        mn.instructions.insert(il);
    }

    Бытует мнение, что «Java» — это высокозащищённый язык, в котором невозможны всяческие си-подобные грязные хаки. На самом деле, конечно, это не так: просто чтобы прострелить себе ногу в «Жабе» — надо чуть больше постараться.

    Фрагмент небольшой самописной либы, позволяющей хукать произвольные методы, прямо как в «Microsoft Detours».

    gost, 28 Декабря 2019

    Комментарии (12)
  9. C++ / Говнокод #26283

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    Widget&& var1 = someWidget;      // here, “&&” means rvalue reference
     
    auto&& var2 = var1;              // here, “&&” does not mean rvalue reference
     
    template<typename T>
    void f(std::vector<T>&& param);  // here, “&&” means rvalue reference
     
    template<typename T>
    void f(T&& param);               // here, “&&”does not mean rvalue reference

    В мире нет ничего более сложного, запутанного и неадекватно раздутого, чем семантика ссылок и категорий значений в «C++».

    Заглянуть в ад одним глазком: https://en.cppreference.com/w/cpp/language/value_category
    Впустить Ад в себя: https://eli.thegreenplace.net/2014/perfect-forwarding-and-universal-references-in-c
    Поехать кукухой: https://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers

    gost, 28 Декабря 2019

    Комментарии (172)
  10. 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)
  11. Python / Говнокод #26269

    −2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    def raboficate(sents: Sequence[Sequence[str]]) -> Sequence[str]:
        RABOWORDS = (
            ('много', '.'),
            ('малость', '.'),
            ('зачем', '?')
        )
    
        sents_rab = []
        for sent in sents:
            raboword = random.choice(RABOWORDS)
            sents_rab.append([raboword[0]] + sent + [raboword[1]])
        return sents_rab

    Массовое зомбирование сознания при помощи «Python».
    https://github.com/gost-gk/raboscript

    В помощь начинающим рабомантам и кобенаторам нашим отделом по датамайнингу бигдаты был надатамайнен, почищен и приведён к удобоваримому виду (все слова/знаки препинания разделены пробелами, мусор убран) самый длинный фанфик по «Mass Effect»: https://mega.nz/#!XdFyzahR!_rXcsCBWyyrnl69feQMpCi238ACNp euO-Zz9nn2E-FQ (сорок мегабайт отборной психозы!).
    Также аналитическим отделом был найден пакет «pymorphy2», с помощью которого наши инженеры надеются довести рабоскрипт до идеала.

    gost, 15 Декабря 2019

    Комментарии (135)