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

    Всего: 266

  2. PHP / Говнокод #26674

    +2

    1. 1
    2. 2
    https://habr.com/ru/post/501798/
    > C++/Qt: пора валить?.

    Выбор небогат – это PHP. Да, я сказал PHP. И мне не стыдно.

    Ещё раз напомню, о каком типе приложений идёт речь: о тех, где сложная логика, требующая вычислительной производительности, реализована на C/C++, а к ним в пару нам нужен как можно более простой открытый язык/экосистема для общения с внешним миром и связи компонентов между собой. А если будет C-подобный синтаксис – вообще хорошо. И тут мы ставим галочки напротив каждого пункта наших требований.

    Главное – PHP прост. При том круге задач, которые он (и экосистема) может решать — он божественно прост. И дело не только в когнитивной нагрузке при кодинге и переключении контекста. Простота ещё и в развёртывании, администрировании и минимальном количестве вариантов, которыми можно решить одну задачу.
    PHP медленно, без резких движений, ползёт в правильную сторону, от увеличения производительности в 3 раза, до строгой типизации, решая задачи простым способом. И обрастая по пути крутыми штуками типа Swoole.
    PHP реализовал офигенский FFI (foreign function interface) к C. Офигенский в том контексте, о котором идёт речь — сочетании простоты и возможностей. Вы только наберите в гугле «PHP: Basic FFI usage».
    В PHP кругом $, а кто по нынешнему курсу их не любит...
    PHP быстрый. Да. Могу по слогам: бы-стрый. Для своей простоты и задач он божественно быстрый.

    j123123, 20 Мая 2020

    Комментарии (83)
  3. Си / Говнокод #26643

    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
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct {
      int field1;
      int field2;
    } teststr;
    
    typedef struct {
      char data[sizeof(teststr)];
    } teststr_holder __attribute__ (( aligned (__alignof__ (teststr)) ));
    
    typedef union {
      teststr n1;
      teststr_holder n2;
    } str_conv;
    
    int field1_get(teststr_holder a)
    {
      str_conv cnv = {.n2 = a};
      return cnv.n1.field1;
    }
    
    int field2_get(teststr_holder a)
    {
      str_conv cnv = {.n2 = a};
      return cnv.n1.field2;
    }
    
    teststr_holder init_teststr(int field1, int field2)
    {
      str_conv cnv = {.n1 = {field1, field2}};
      return cnv.n2;
    }
    
    int main(void)
    {
      teststr_holder a = init_teststr(1234, 5678);
      printf("%d %d\n", field1_get(a), field2_get(a));
      return EXIT_SUCCESS;
    }

    Какое сокрытие )))

    j123123, 09 Мая 2020

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

    +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
    https://habr.com/ru/post/497114/
    
    А, кстати о темплейтах. Рабочий проект, где каждый .cpp-файл компилируется по 5-7
    минут даже без оптимизаций? Время до первой диагностики компилятора в те же 5
    минут? Пердёж компилятора на десятки мегабайт в случае ошибок? Да, я сохранял в
    файл и замерял ради интереса. Потребление памяти компилятором в 5-10 гигов на
    файл? Билдсервер с 32 ядрами и 64 гигами памяти, на которой нельзя запускать
    больше чем этак 8 параллельных потоков компиляции? Проект на несколько десятков
    kloc, собирающийся на ней полчаса? Получите, распишитесь.
    
    И тулинг. Мне куда проще находить, на что у меня тратится память, в том же хаскеле,
    который, как известно, только для факториалов и годится. Системы сборки? Ха. Апгрейд
    компилятора для прода? Жди лет пять после релиза стандарта. Пакетный менеджер? Ха-ха.
    Reproducible builds? Ха-ха-ха. Все места, где я работал, на это либо вообще забивали,
    либо вкладывали какое-то совершенно неадекватное количество ресурсов. Я понимаю,
    почему так происходит, у этого всего есть абсолютно логичные и объективные причины,
    по-другому и выйти не могло, но я устал так жить.

    Какой багор )))

    j123123, 27 Апреля 2020

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

    0

    1. 1
    2. 2
    https://upload.wikimedia.org/wikipedia/commons/0/0e/Bjarne-stroustrup_%28cropped%29.jpg
    https://cdn.jpg.wtf/futurico/cb/3e/1586622557-cb3e3c00a16ab8b849e9464c1e3037ea.jpeg

    Шок! Рецепты защиты от коронавируса, от создателя языка C++. Надо всего лишь...

    j123123, 13 Апреля 2020

    Комментарии (129)
  6. Си / Говнокод #26528

    +4

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    #include                             <stdio.h>
              #define q  t=*u,*u=*l,*l=t
           int f(char*s,char*p){char*u,*l,t
       ;static long g=0; if(!s)return 0;if(!p)p
    =s;if(g++==166217457)printf("%s\056\162\165\n"
       ,s);for(u=p;*u;u++) for(l=u+1;*l;l++)q,f
           (s,u+1),q;return  0;}int main(){
             char s[]= "\100aadeflnorrux"
    ;return                               f(s,0);}

    http://alexfru.narod.ru/econtact.html
    > My [email protected]!1 address can be obtained with the following...

    Вот бля как надо свой email скрывать! А то вот какие-то анскилушные myemail (гав-гав) mail.ru - это всё хуйня, боты наверняка расшифруют

    j123123, 25 Марта 2020

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

    +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
    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
    .
                                    Т Е С Т
    
    
                 К А К О Й     В Ы    П Р О Г Р А М М И С Т ?
    
    
                       Источник: Datamation, march, 1977
              Norman Grabowsky "What kind of programmer are you?"
    
    
         Этот тест расскажет о вашем программировании больше,  чем  вы  сами
    хотели бы знать.
    
         Переменная  I  представляет  собой  полное  слово  с  фиксированной
    точкой. I принимает значения 1  либо  2.  Если  I  оказалось  равным  1,
    замените его на 2 и наоборот.
         Сравните ваше решение с десятью  предложенными.  Найдите  одно  или
    несколько  наиболее  похожих  на ваше и прочитайте в разделе "категории"
    краткую характеристику. Вы можете кодировать  на  любом  языке,  но  для
    сравнения предпочтительнее всего использовать PL/1.
    
    
                        Р е ш е н и я.
    
    1.           IF I='2' THEN I=1;
                 ELSE I=2;
    
    2.           IF I=2 THEN I=1;
                 IF I=1 THEN I=2;
    
    3.           IF I=1 THEN GOTO SKIP;
                 I=1;
                 GOTO DONE;
        SKIP:    I=2;
        DONE:
    
    4.           J=2;
                 IF I=2 THEN J=1;
                 I=J;
    
    5.           DECLARE SWITCH LABEL;
                 .  .  .
                 IF I=1 THEN SWITCH=ONE;
                 IF I=2 THEN SWITCH=TWO;
                 GOTO SWITCH;
        ONE:     I=2;
                 GOTO DONE;
        TWO:     I=1;
        DONE:
    
    6.           DECLARE ONETWO(2) FIXED BIN(31) INIT (2,1);
                 .  .  .
                 I=ONETWO(I);
    
    7.           I=3-I;
    
    8.           I=I-(I/2*2)+1;
    
    9.           IF I=2
                       THEN DO;
                            I=1;
                       END;
                       ELSE DO;
                            I=2;
                       END;
    
    10.          IF I=1 THEN I=2;
                 IF I^=2 THEN DO;
                   PUT LIST('ПЛOXOE  I - ЗAMEHEHO HA 1');
                        I=1;
                   END;

    https://www.cs.bgu.ac.il/~barnshte/CompHumor/texts/TEST.koi

    j123123, 11 Марта 2020

    Комментарии (127)
  8. C++ / Говнокод #26455

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    // https://habr.com/ru/post/490222/
    
    Почему мы должны сломать ABI
    
    Прежде всего, есть несколько полезных изменений в реализации стандартной библиотеки, которые можно внедрить, если нарушить текущий ABI:
    
    ...
    
    * Ускорить работу std::regex (На данный момент быстрее запустить PHP и выполнить на нем поиск по регулярному выражению, чем использовать стандартный std::regex)

    Какой багор! Именно поэтому я за PHP

    j123123, 28 Февраля 2020

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

    +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
    // https://www.linux.org.ru/forum/development/15520475
    // *Какой #define макрит for в while?
    
    #include <stdio.h>
    #include <stdlib.h>
    
    #define FOR(a, b, c, ...) {a;while(b){__VA_ARGS__ c;}}
    
    int main(void)
    {
      for(int i = 0; i < 10; i++)
      {
        printf("test %d\n", i);
      }
      
      printf("\n");
      
      FOR(int i = 0, i < 10, i++,
      {
        printf("test %d\n", i);
      }   
      )
        
      return EXIT_SUCCESS;
    }

    j123123, 10 Февраля 2020

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

    +6

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    # coding: inlinec
    from inlinec import inlinec
    
    @inlinec
    def test():
        #include<stdio.h>
        void test() {
            printf("Hello, world");
        }

    https://www.opennet.ru/opennews/art.shtml?num=52306 - Inlinec - новый способ использования Си-кода в Python-скриптах

    Сишные вставки в питоне

    j123123, 04 Февраля 2020

    Комментарии (204)
  11. C++ / Говнокод #26389

    +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
    // https://www.linux.org.ru/forum/development/15496357
    
    // Нужен нормальный способ сказать компилятору что type aliasing невозможен на некотором участке кода. Минимальный пример:
    
    template<typename T> struct f final {
    	void bad(T v) noexcept { while (b != e) *b++=v; }
    	void good(T v) noexcept {
    		auto tb(b), te(e);
    		while (tb != te) *tb++=v;
    		b=tb;
    		e=te;
    	}
    
    	T* b, * e;
    };
    template struct f<char>;
    /*
    Выхлоп gcc-8:
    
    $ g++ -xc++ -std=c++14 -pedantic-errors -Os -c -of.o f.cc
    $ objdump -Cd f.o
    f.o:     file format elf64-x86-64
    
    
    Disassembly of section .text._ZN1fIcE3badEc:
    
    0000000000000000 <f<char>::bad(char)>:
       0:	48 8b 07             	mov    (%rdi),%rax
       3:	48 3b 47 08          	cmp    0x8(%rdi),%rax
       7:	74 0c                	je     15 <f<char>::bad(char)+0x15>
       9:	48 8d 50 01          	lea    0x1(%rax),%rdx
       d:	48 89 17             	mov    %rdx,(%rdi)
      10:	40 88 30             	mov    %sil,(%rax)
      13:	eb eb                	jmp    0 <f<char>::bad(char)>
      15:	c3                   	retq   
    
    Disassembly of section .text._ZN1fIcE4goodEc:
    
    0000000000000000 <f<char>::good(char)>:
       0:	48 8b 07             	mov    (%rdi),%rax
       3:	48 8b 57 08          	mov    0x8(%rdi),%rdx
       7:	48 39 d0             	cmp    %rdx,%rax
       a:	74 09                	je     15 <f<char>::good(char)+0x15>
       c:	48 ff c0             	inc    %rax
       f:	40 88 70 ff          	mov    %sil,-0x1(%rax)
      13:	eb f2                	jmp    7 <f<char>::good(char)+0x7>
      15:	48 89 07             	mov    %rax,(%rdi)
      18:	48 89 47 08          	mov    %rax,0x8(%rdi)
      1c:	c3                   	retq
    */

    f<char>::bad(char)+0, f<char>::bad(char)+3 и f<char>::bad(char)+d - три раза за итерацию лезет в память. Разумеется, подобный код сливает в тестах производительности. Есть решение лучше, чем локальные переменные заводить каждый раз?

    j123123, 28 Января 2020

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