1. Куча / Говнокод #25565

    0

    1. 1
    Onetime = ?config(onetime, Config) =:= true,

    Boolshit? Нет, это динамическая питуизация.

    CHayT, 24 Апреля 2019

    Комментарии (3)
  2. C++ / Говнокод #25564

    +4

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    #include <iostream>
    #include <string>
    #include <string_view>
    
    int main() {
      std::string s = "Hellooooooooooooooo ";
      std::string_view sv = s + "World\n";
      std::cout << sv;
    }

    https://alexgaynor.net/2019/apr/21/modern-c++-wont-save-us/
    What's happening here is that s + "World\n" allocates a new std::string, and then is converted to a std::string_view. At this point the temporary std::string is freed, but sv still points at the memory that used to be owned by it. Any future use of sv is a use-after-free vulnerability. Oops! C++ lacks the facilities for the compiler to be aware that sv captures a reference to something where the reference lives longer than the referent. The same issue impacts std::span, also an extremely modern C++ type.

    j123123, 24 Апреля 2019

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

    −1

    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
    def da_pizda(update, context):
        global da_counter, pizda_counter
    
        text = update.message.text.split()
        text = [word.lower() for word in text]
    
        if 'дa' in text or 'da' in text or 'dа' in text:
            text.append('да')
        if 'пиздa' in text or 'pizda' in text or 'pizdа' in text or 'Πизда' in text:
            text.append('пизда')
    
        if 'да' in text:
            bot.send_message(chat_id=update.message.chat_id, text='пизда',
                             reply_to_message_id=update.message.message_id)
            pizda_counter += 1
        if 'пизда' in text:
            bot.send_message(chat_id=update.message.chat_id, text='да',
                             reply_to_message_id=update.message.message_id)
            da_counter += 1
    
        da_counter += update.message.text.split().count('да')
        pizda_counter += update.message.text.split().count('пизда')

    Бот, проверяющий наличие слов "да" и "пизда" в чате телеграма, и отвечающий соответственно.

    Umerenkov21, 23 Апреля 2019

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

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    // https://github.com/WebKit/webkit/blob/e0e7e8f907f4c01c723374e8230a63d46e89e6a0/Source/WebCore/platform/graphics/filters/FEComposite.cpp#L98
    
    static unsigned char clampByte(int c)
    {
        unsigned char buff[] = { static_cast<unsigned char>(c), 255, 0 };
        unsigned uc = static_cast<unsigned>(c);
        return buff[!!(uc & ~0xff) + !!(uc & ~(~0u >> 1))];
    }

    j123123, 22 Апреля 2019

    Комментарии (23)
  5. Си / Говнокод #25561

    −1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    //"вирус" в стиле кулхацкеров
    #include <stdlib.h>
    int main() {
    int i = 1;
    while( i == 1)  {
    	system("start calc");
    }
    return 0;
    }

    pozhiloy, 22 Апреля 2019

    Комментарии (63)
  6. Куча / Говнокод #25560

    +1

    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
    var v: List[Int?] = List@{1, 2, none, 4};
    
    //Chained - List@{1, 4, 16}
    v->filter(fn(x) => x != none)->map[Int](fn(x) => x*x)
    
    //Piped none filter - List@{1, 4, 16}
    v |> filter(fn(x) => x != none) |> map[Int](fn(x) => x*x)
    
    //Piped with noneable filter - List@{1, 4, 16}
    v |??> map[Int](fn(x) => x*x)
    
    //Piped with none to result - List@{1, 4, none, 16}
    v |?> map[Int](fn(x) => x*x)
    
    
    // 5.15 Merge
    entity Baz {
        field f: Int;
        field g: Int;
        field k: Bool
    }
    
    var t = @[ 1, 2, 3 ];
    t<+(@[5])       //@[1, 2, 3, 5]
    t<+(@[3, 5])    //@[1, 2, 3, 3, 5]
    
    var r = @{ f=1, g=2, k=true };
    r<+(@{g=5})          //@{f=1, g=5, k=true}
    r<+(@{g=3, k=false}) //@{f=1, g=3, k=false}
    r<+(@{g=5, h=0)      //@{f=1, g=5, k=true, h=0}
    
    var e = Baz@{ f=1, g=2, k=true };
    e<+(@{g=5})          //@{f=1, g=5, k=true}
    e<+(@{g=3, k=false}) //@{f=1, g=3, k=false}
    e<+(@{g=5, h=0)      //error field not defined

    «Буквально несколько дней назад компания Microsoft представила публике новый язык программирования. Языку дали название Bosque. Главная миссия дизайна языка — чтобы он был прост и понятен как для человека, так и для компьютера»

    А вот кому новый, простой и понятный язык? Содержание спецсимволов всего на 54% превосходит таковое у «C++»!

    h/448814
    https://github.com/Microsoft/BosqueLanguage/blob/master/docs/language/overview.md

    gost, 22 Апреля 2019

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

    +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
    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
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    https://habr.com/ru/article/448466/
    
    */
    А последние пару лет набирает популярность boost.hana. Это boost.fusion,
    но с constexpr'ом и лямбдами. Автор hana, Луис Дионе (Louis Dionne),
    используя на полную мощь все возможности новых стандартов, в некотором
    смысле очеловечил метапрограммирование. С помощью hana всяческие
    манипуляции с типами, их кортежами, отображениями, а также компайл- и
    рантайм-работа с ними обрели практически человеческое лицо и читаемый
    вид. Ну, с поправкой на синтаксис C++, разумеется. Вот, например, как выглядит
    универсальный сериализатор структур, написанный с помощью hana:
    */
    
    // 1. Give introspection capabilities to 'Person'
    struct Person {
      BOOST_HANA_DEFINE_STRUCT(Person,
        (std::string, name),
        (int, age)
      );
    };
    // 2. Write a generic serializer (bear with std::ostream for the example)
    auto serialize = [](std::ostream& os, auto const& object) {
      hana::for_each(hana::members(object), [&](auto member) {
        os << member << std::endl;
      });
    };
    // 3. Use it
    Person john{"John", 30};
    serialize(std::cout, john);
    
    /*
    Ну да, структуры приходится описывать особым образом. А кому сейчас легко?
    И тут хочется также отметить библиотеку tinyrefl за авторством Manu Sánchez
    (Мануэля Санчеса). Довольно неплохая попытка принести в мир C++-разработки
    статическую рефлексию без расширения компилятора. Для своей работы библиотека
    требует стороннюю утилиту (cppast), но зато предоставляет довольно удобный доступ
    к информации о структурах, которую можно использовать в процессе разработки
    программы. Преимущество этой библиотеки (по сравнению с другими) в том, что для
    работы с ней не надо использовать «птичий язык», а элементы структур (как и сами
    структуры) можно произвольным образом атрибутировать прямо в исходном коде:
    */
    
    struct [[serializable]] Person {
        std::string name;
        int age;
    };
    template<typename Class>
    auto serialize(std::ostream& os, Class&& object) -> std::enable_if_t<
            tinyrefl::has_metadata<std::decay_t<Class>>() &&
            tinyrefl::has_attribute<std::decay_t<Class>>("interesting"),
        std::ostream&>
    {
        tinyrefl::visit_member_variables(object, [&os](const auto& /* name */, const auto& var) {
            os << var << std::endl;
        });
        return equal;
    }
    
    /*
    Таких примеров можно привести ещё много (или найти на гитхабе или гитлабе).
    Объединяет все эти библиотеки и инструменты одна особенность: значительно
    облегчая жизнь своим пользователям, они имеют такую реализацию, что остаётся
    лишь предполагать, какое количество страданий испытали их разработчики. Достаточно
    заглянуть в реализацию, увидеть забор из ifdef'ов и угловых скобок — и всё понятно.
    Нередко эти реализации делаются на грани возможностей компиляторов. workaround'ы
    банальных ошибок (или особенностей реализации языка конкретной версии конкретного
    компилятора с конкретными флагами) здорово раздувают их код. Желание поддерживать
    несколько стандартов сразу заставляет придумывать зубодробильные конструкции.
    Безусловно, простая попытка реализовать что-нибудь подобное здорово поднимает уровень
    владения языком (иногда — и самооценку). Но в какой-то момент, после многочасовой возни
    с очередной ошибкой, или непроходящим тестом, или крэшем компилятора руки опускаются,
    хочется плюнуть и бросить, ибо силы бороться иссякают.
    */

    Именно поэтому я за гомоиконность

    j123123, 21 Апреля 2019

    Комментарии (50)
  8. PHP / Говнокод #25557

    0

    1. 1
    2. 2
    3. 3
    https://habr.com/ru/post/448810/
    Уж слишком анскильно )))
    Не удивлюсь, если сам Юра - автор статьи.

    AHCKuJlbHblu_nemyx, 20 Апреля 2019

    Комментарии (6)
  9. Куча / Говнокод #25556

    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
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    Переменная loffset 0 loffset!
    Переменные местные жители здесь местные! Выбрано 100 (несколько) ячеек
    : локальный, (смещение -)
    отложить rp @ loffset @ swap -
    откладывать буквально откладывать +;
    : бизнес, (смещение -)
    местный, отложи рп! ;
    : (local DOES> @ local, отложить @;
    : f> r r> rp @ 1 float - dup rp! е! > г;
    : (flocal DOES> @ local, отложить f @;
    
    : нечего делать ;
    : ralign r>
    START rp @ [1 плавает 1-] Буквально и
    WHILE ['ничего не делать> тело] ALiteral> r
    REPEAT> r;
    
    : <local (- sys1)
    текущие @ @ loffset @ местные жители @
    больше 0 = ЕСЛИ отложено до ТО; мгновенный
    : местный: (-)
    откладывать> последние новости здесь местные жители @ дп!
    ячейка loffset +! Создать loffset @, немедленный (локальный
    вот местные жители! дп! lastcfa! прошлой! ; мгновенный
    : flocal: (-)
    Последние новости здесь местные жители @ дп!
    START loffset @ 0 1 плавает падение FM / мод, пока
    0 отложено Буквально откладывай> 1 ячейку + клетки! повторение
    отложить f> r Создать loffset @, немедленный (flocal
    вот местные жители! дп! lastcfa! прошлой! ; мгновенный
    : local> (sys1 - sys2); мгновенный
    : локальный (sys2 -)
    местные жители! dup delocal
    Loffset! ток @! ; мгновенный
    : TO> in @ 'dup @ [' (local> cell body +] ALiteral =
    IF> body @ local, отложить! падение
    ELSE dup @ ['(flocal> cell body +] ALiteral =
    IF> body @ local, отложить ф! падение
    В противном случае, смотрите> в! отложить на потом; мгновенный
    
    : DO 2 ячейки loffset +! отложить DO; немедленное ограничение
    :? DO 2 ячейки loffset +! отложить? ДЕЛАТЬ; немедленное ограничение
    : Для 2 ячеек loffset +! выделить для; немедленное ограничение
    : LOOP -2 ячейки loffset +! Задержка LOOP; немедленное ограничение
    : + LOOP -2 ячейки loffset +! отложить + LOOP; немедленное ограничение
    : СЛЕДУЮЩИЙ -2 loffset + клетки! отложите СЛЕДУЮЩУЮ; немедленное ограничение
    :> R 1 клетки loffset +! отложить в сторону> R; немедленное ограничение
    : R> -1 ячейки loffset +! отложить R>; немедленное ограничение
    
    Местные жители высокого уровня 19aug93py
    
    : {отложить <местное -1
    НАЧАЛО> в @ name dup c @ 1 = swap 1+ c @ '| = и к
    drop> in @> r
    НАЧНИТЕ dup 0 <0 = WHILE> в! отложить местное: REPEAT drop
    d> в! отложить местное>; немедленное ограничение
    
    : F {отложить <местный -1
    НАЧАЛО> в @ name dup c @ 1 = swap 1+ c @ '| = и к
    drop> in @> r
    НАЧНИТЕ dup 0 <0 = WHILE> в! Отложить Flocal: REPEAT DROP
    d> в! отложить местное>; немедленное ограничение
    
    'местный; псевдоним} немедленное ограничение
    
    \ ANS Locals 19aug93py
    
    Создайте 5 локальных ячеек, выберите их
    : (местный) (адрес)
    местный @ 0 =
    Если вы отложите в сторону <local local on
    3 локальных ячейки + 2! местная ячейка + 2! ЗАТЕМ
    dup IF linestart @> r исходная строка #> r загрузочный файл @> r
    blk @> r> tib @> r #tib @ dup> r> in @> r
    
    > Тиб +! dup #tib! > Tib @ Swap Move
    > выкл blk выкл loadfile выкл -1 linestart!
    
    отложить местное:
    
    d> в! r> #tib! > Тиб! r> blk!
    r> загрузочный файл! r> Loadline! r> linestart!
    ELSE 2-капельные локальные клетки + 2 @ локальные 3 клетки + 2 @
    отложить местный>
    2 локальных ячейки + 2! местная ячейка +! ЗАТЕМ;
    
    :? местный;
    местный @
    IF с местными ячейками + @ с местными 2 ячейками + 2 @
    отложить местное; местный от ТОГО;
    
    :; ?местный; отложить; ; немедленное ограничение
    :> Местный; откладывать делает>; мгновенный
    : EXIT inlocal @ IF 0 delocal, TO откладывает EXIT; мгновенный
    
    : местные жители |
    НАЧАТЬ имя dup c @ 1 = больше 1+ c @ '| = и 0 = WHILE
    читать (локально) REPEAT 0 (локально); немедленное ограничение

    BOKCEJIbHblu_nemyx, 20 Апреля 2019

    Комментарии (5)
  10. Си / Говнокод #25555

    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
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    void  converting(char *in, char *out, node *PTR, char (checking_stack)(node), void (push)(node *topPTR, char value), int (pop)(node *fix), int (isOper)(char c), int (precedence_intro)(char data_1, char  data_2, int(intro_precedence_power)(int res_1, int  res_2)), int(intro_precedence_power)(int res_1, int  res_2)) {
    
    	int k = 0, j = 0, d = 0;
    	
    	push(PTR, '(');
    	
    	for (k = 0; checking_stack((node)PTR) != 0; k++) {
    	
    		if (isdigit(in[k])) {
    			
    			out[j++] = in[k];
    
    		}
    
    		if (in[k] == '(') {
    
    			push(PTR, in[k]);
    
    		}
    
    		if (isOper(in[k]) == 1) {
    
    			while (precedence_intro((*PTR)->alpha, in[k], intro_precedence_power) != -1) {
    
    				out[j++] = pop(PTR);
    			}
    
    			push(PTR, in[k]);
    		}
    		
    		if (in[k] == ')') {
    
    			d = pop(PTR);
    			for (; d != '('; d = pop(PTR)) {
    				out[j++] = d;
    			}
    		}
    	}
    }
    
    
    
    
    
    int precedence(char data_1, char   data_2, int(intro_precedence_power)(int res_1, int  res_2))  {
     char collection[] = "+1-1*2/2^3";	
     
     char	buf_1 = (char)strcspn(  collection , &data_1) + 1;
     char	buf_2 = (char)strcspn(collection, &data_2) + 1;
    
    	return   intro_precedence_power(atoi(&collection[buf_1]), atoi(&collection[buf_2]));
    }
    
    int precedence_power(int res_1, int  res_2) {
    	if (res_1 < res_2) {
    		return   -1;
    	}
    	else	if (res_1 == res_2) {
    		return 	  0;
    	}
    	else	if (res_1 > res_2) {
    		return	  1;
    	}
    	return 0;
    }

    Якобы вычисляет обратною польскою нотацию номер два

    lazy_8, 19 Апреля 2019

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