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

    Всего: 331

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

    −17

    1. 1
    2. 2
    3. 3
    (x) {
      if F(x,x) then { for(;;) }
    }

    http://www.michurin.net/computer-science/halting-problem.html
    Неразрешимость проблемы остановки имеет много доказательств. В терминах функций её очень просто доказать от противного.

    Допустим, у нас уже есть решение — функция F, которая принимает на вход некую функцию (вернее строку с текстом функции, байт-кодом или иной записью функции) и некие данные и отвечает на вопрос: «остановится ли функция-первый-аргумент, при работе с данными-вторым-аргументом, или будет работать вечно?»

    Давайте создадим функцию P(x), такого вида (на C-образном языке):

    P(x) {
    if F(x,x) then { for(;;) }
    }


    Строку, которая кодирует эту функцию обозначим p. Что будет, если мы вызовем функцию F(p,p)? Возможны два исхода:

    True, если P останавливается. Но при этом P(p) как раз не останавливается, если F(p,p)=True, то запускается бесконечный цикл.
    False, если P зависает. Но, как не трудно видеть, именно в этом случае P(p) не зависнет.

    Мы получили противоречие потому, что наша начальная посылка о существовании магической функции F была не правильной.

    Получается, что задача останова неразрешима. Вернее, нельзя написать программу, которая бы решала эту задачу. Иными словами, нельзя написать парсер программного кода, который бы мог оценить, зависнет разбираемый код или нет.

    В данном доказательстве на довольно глубинном уровне зарыто говно. Подробности в комментариях

    j123123, 01 Июня 2016

    Комментарии (123)
  3. JavaScript / Говнокод #20105

    +6

    1. 1
    2. 2
    3. 3
    4. 4
    > var x = new String("eval(x.toString())");
    undefined
    > eval(x.toString());
    RangeError: Maximum call stack size exceeded

    Yo dawg, I heard you like evaluation. So I put evaluation in your evaluation so you could evaluate while you evaluate
    Жаль что nodejs не осиливает заоптимизировать это как бесконечный цикл

    j123123, 31 Мая 2016

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

    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
    //...
          /* See if this is something like X * C - X or vice versa or
    	 if the multiplication is written as a shift.  If so, we can
    	 distribute and make a new multiply, shift, or maybe just
    	 have X (if C is 2 in the example above).  But don't make
    	 something more expensive than we had before.  */
    
          if (SCALAR_INT_MODE_P (mode))
    	{
    	  rtx lhs = op0, rhs = op1;
    
    	  wide_int coeff0 = wi::one (GET_MODE_PRECISION (mode));
    	  wide_int coeff1 = wi::one (GET_MODE_PRECISION (mode));
    
    	  if (GET_CODE (lhs) == NEG)
    	    {
    	      coeff0 = wi::minus_one (GET_MODE_PRECISION (mode));
    	      lhs = XEXP (lhs, 0);
    	    }
    	  else if (GET_CODE (lhs) == MULT
    		   && CONST_SCALAR_INT_P (XEXP (lhs, 1)))
    	    {
    	      coeff0 = std::make_pair (XEXP (lhs, 1), mode);
    	      lhs = XEXP (lhs, 0);
    	    }
    	  else if (GET_CODE (lhs) == ASHIFT
    		   && CONST_INT_P (XEXP (lhs, 1))
                       && INTVAL (XEXP (lhs, 1)) >= 0
    		   && INTVAL (XEXP (lhs, 1)) < GET_MODE_PRECISION (mode))
    	    {
    	      coeff0 = wi::set_bit_in_zero (INTVAL (XEXP (lhs, 1)),
    					    GET_MODE_PRECISION (mode));
    	      lhs = XEXP (lhs, 0);
    	    }
    
    	  if (GET_CODE (rhs) == NEG)
    	    {
    	      coeff1 = wi::minus_one (GET_MODE_PRECISION (mode));
    	      rhs = XEXP (rhs, 0);
    	    }
    	  else if (GET_CODE (rhs) == MULT
    		   && CONST_INT_P (XEXP (rhs, 1)))
    	    {
    	      coeff1 = std::make_pair (XEXP (rhs, 1), mode);
    	      rhs = XEXP (rhs, 0);
    	    }
    	  else if (GET_CODE (rhs) == ASHIFT
    		   && CONST_INT_P (XEXP (rhs, 1))
    		   && INTVAL (XEXP (rhs, 1)) >= 0
    		   && INTVAL (XEXP (rhs, 1)) < GET_MODE_PRECISION (mode))
    	    {
    	      coeff1 = wi::set_bit_in_zero (INTVAL (XEXP (rhs, 1)),
    					    GET_MODE_PRECISION (mode));
    	      rhs = XEXP (rhs, 0);
    	    }
    
    	  if (rtx_equal_p (lhs, rhs))
    	    {
    	      rtx orig = gen_rtx_PLUS (mode, op0, op1);
    	      rtx coeff;
    	      bool speed = optimize_function_for_speed_p (cfun);
    
    	      coeff = immed_wide_int_const (coeff0 + coeff1, mode);
    
    	      tem = simplify_gen_binary (MULT, mode, lhs, coeff);
    	      return (set_src_cost (tem, mode, speed)
    		      <= set_src_cost (orig, mode, speed) ? tem : 0);
    	    }
    	}

    https://gcc.gnu.org/viewcvs/gcc/trunk/gcc/simplify-rtx.c?view=markup&pathrev=232689#l2062 здоровенная такая функция из недр GCC, в которой делаются оптимизации, это сродни символьным вычислениям вообще говоря
    https://godbolt.org/g/vcEqe7 но похоже эта хрень работает плохо, не смогло оно выявить тождественность умножения сдвигами и обычного умножения, сведя операции к return 1 в случае функции test1. Но я естественно находил и примеры кода, которые GCC смог успешно "редуцировать" своим оптимизатором, а clang тупил. Говно тут в том, что вместо того, чтобы впилить нормальную систему символьных вычислений, там нагородили какого-то ебучего говна... Хотя может быть я чего-то не понимаю в компиляторах. Надо будет дракона почитать

    j123123, 30 Мая 2016

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

    −48

    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
    # define l2cn(l1,l2,c,n) { \
                            c+=n; \
                            switch (n) { \
                            case 8: *(--(c))=(unsigned char)(((l2)>>24L)&0xff); \
                            case 7: *(--(c))=(unsigned char)(((l2)>>16L)&0xff); \
                            case 6: *(--(c))=(unsigned char)(((l2)>> 8L)&0xff); \
                            case 5: *(--(c))=(unsigned char)(((l2)     )&0xff); \
                            case 4: *(--(c))=(unsigned char)(((l1)>>24L)&0xff); \
                            case 3: *(--(c))=(unsigned char)(((l1)>>16L)&0xff); \
                            case 2: *(--(c))=(unsigned char)(((l1)>> 8L)&0xff); \
                            case 1: *(--(c))=(unsigned char)(((l1)     )&0xff); \
                                    } \
                            }

    https://github.com/openssl/openssl/blob/6218a1f57e7e25a6b9a798f00cf5f0e56a02ff31/crypto/des/des_locl.h#L151
    Интересно, на кой им делать там &0xff если оно в unsigned char скастовано и лишние биты там уже обрезаны? Или они там предполагают что unsigned char может быть не 8-битным? И вообще, это какая-то херня, почему б просто не узнать endian и не сделать memcpy предварительно развернув байты в случае необходимости? Другого макроговна там тоже хватает

    j123123, 28 Мая 2016

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

    0

    1. 1
    2. 2
    3. 3
    4. 4
    <div style="color: red; width: 100%; height:14pt; font-weight: bold;">STOP RUSSIAN AGGRESSION AGAINST 
    <span style="position: absolute; color: yellow; text-shadow: 1px 1px darkred;">
    <span style="position: absolute; height: 50%; color: blue; overflow: hidden;">UKRAINE!</span>UKRAINE!</span>
    </div>

    Какой хитрый дизайнерский ход! Это было обнаружено на http://vxheaven.org/
    пороюсь еще в исходниках вирусни которую там выкладывают, наверняка там много говна
    предлагаю добавить html в список допустимых языков на говнокоде

    j123123, 28 Мая 2016

    Комментарии (186)
  7. Куча / Говнокод #20044

    +6

    1. 1
    2. 2
    Что вообще за херня, почему для каждого язычка(рантайма) делают свой пакетный менеджер? pip, npm, cabal, Quicklisp, opam, nuget, NPMчо там еще?
    И притом все они считают что для языка %LanguageName% всенепременно надо писать пакетный менеджер на нем самом.

    Вот например когда я что-то устанавливл через pip, какая-то там херня требует openssl-devel. И узнаю я это только по ошибкам компиляции, ну т.е. там какая-то поебень криптографическая вызывается из питона, оно при установке компилирует через GCC некое говно которое инклудит какое-то .h говно от openssl, но поскольку этого .h нет, оно обламывается на этапе компиляции. Какого хера я про это должен узнавать только на этапе компиляции блядь? Какого хера я должен вручную разруливать эти говнозависимости? А если например будет программа на руби которая использует программу на лиспе, которая использует программу на хаскеле использующую программу на окамле, то что мне, всю эту поеботу тоже руками разруливать по цепочке?

    https://blog.versioneye.com/2014/01/15/which-programming-language-has-the-best-package-manager/

    какие-то уебни еще сравнивают, какой язык имеет лучший пакетный менеджер... Мудачье! Кто вам сказал что делать для каждого ёбаного языка свой пакетный менеждер это хорошая идея и что среди них может быть "лучший"? Они все говно по определению. Нужно или некое стандартное API для общения между разными пакетными менеджеры разных языков, или один единый пакетный менеджер для всего и под все ОС(а не только Gentoo).

    j123123, 19 Мая 2016

    Комментарии (76)
  8. JavaScript / Говнокод #20037

    +1

    1. 1
    http://pastebin.com/xww1EKP1

    http://map.vmr.gov.ua/scripts/__RasPil.js - было тут

    j123123, 18 Мая 2016

    Комментарии (4)
  9. Си / Говнокод #20003

    −47

    1. 1
    2. 2
    3. 3
    4. 4
    int cmpfunc (const void * a, const void * b)
    {
       return ( *(int*)a - *(int*)b );
    }

    в догонку к http://govnokod.ru/19968
    http://www.tutorialspoint.com/c_standard_library/c_function_qsort.htm
    Переполнение знаковых целых чисел - не, не слышал

    j123123, 14 Мая 2016

    Комментарии (46)
  10. JavaScript / Говнокод #19984

    +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
    $ nodejs
    > var buffer = new ArrayBuffer(2);
    undefined
    > var uint16View = new Uint16Array(buffer);
    undefined
    > var uint8View = new Uint8Array(buffer);
    undefined
    > uint16View[0]=0xff00
    65280
    > uint8View[1]
    255
    > uint8View[0]
    0

    https://developer.mozilla.org/en/docs/Web/JavaScript/Typed_arrays
    endianness - теперь и в жабаскрипте. Почти как union

    j123123, 11 Мая 2016

    Комментарии (15)
  11. Си / Говнокод #19968

    −47

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    static inline int int_cmp(const void *a, const void *b) { 
    	const ut64 va = *(const ut64 *)a;
    	const ut64 vb = *(const ut64 *)b;
    	if (va > vb) return 1;
    	if (va < vb) return -1;
    	return 0;
    }

    j123123, 10 Мая 2016

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