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

    −14

    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
    #include "hello.h"
    
    __static_data<System_Reflection_RuntimeModule> GModuleC__runtimemodule_hello_ehpqe23j_dll = { (Byte*) -1, (Byte*) -1, { { { (Void**) &System_Reflection_RuntimeModule_vtable_impl } },  0 , &GModuleC__runtimeassembly_hello_ehpqe23j_dll.data, {  0  }, {  0  }, {  0  }, {  0  } }};
    __static_data<System_Reflection_RuntimeAssembly> GModuleC__runtimeassembly_hello_ehpqe23j_dll = { (Byte*) -1, (Byte*) -1, { { { (Void**) &System_Reflection_RuntimeAssembly_vtable_impl } },  0 ,  0 , {  0  } }};
    Int32 GModuleC__cctor_called_hello_ehpqe23j_dll = -1;
    static __static_str<6> _s15063797403154689540_ = { (Byte*) -1, (Byte*) -1, (Void**) &System_String_vtable_impl, 5, L"pituh" };
    static __static_str<2> _s1054744840757602046_ = { (Byte*) -1, (Byte*) -1, (Void**) &System_String_vtable_impl, 0, L"\0" };
    __static_data<System_RuntimeType> pituh__runtimetype_hello_ehpqe23j_dll = { (Byte*) -1, (Byte*) -1, { { { { { (Void**) &System_RuntimeType_vtable_impl } } } },  0 , {  0  }, {  0  }, 0, (System_Type*) &System_Object__runtimetype.data,  0 , ((System_String*) ((Byte**) &_s15063797403154689540_ + 2)), ((System_String*) ((Byte**) &_s1054744840757602046_ + 2)), 18, 0, 0, 0, 0, &GModuleC__runtimemodule_hello_ehpqe23j_dll.data }};
    Int32 pituh__cctor_called_hello_ehpqe23j_dll = -1;
    Void Void_pituh__ctorFN_hello_ehpqe23j_dll(pituh* __this) {
        __check_this((Void*)__this);
        Void_System_Object__ctorFN((System_Object*) (__this));
        return ;
    }
    static __static_str<8> _s18790481933210356248_ = { (Byte*) -1, (Byte*) -1, (Void**) &System_String_vtable_impl, 7, L"Kokoko!" };
    
    Int32 Int32_pituh_MainFSystem_StringAYN_hello_ehpqe23j_dll(System_StringAY* args) {
        Void_System_Console_WriteLineFSystem_StringN(((System_String*) ((Byte**) &_s18790481933210356248_ + 2)));
        return 0;
    }
    pituh* pituh_pituh__newFN_hello_ehpqe23j_dll() {
        Int32 local0;
        Int32 _dup20;
        Int32 _dup22;
        Void* _dup42;
        Void* _dup51;
        Void* _dup56;
        Int32 _dup75;
        pituh* _dup104;
        _dup20 = ((sizeof(pituh) + sizeof(System_Object*)) + sizeof(System_Object*));
        ;
        local0 = _dup20;
    a22:
        _dup22 = _dup20;
        ;
        if ((UInt32)_dup22 >= (UInt32)102400) goto a37;
        Void* _phi30;
        Void* __expr30;
        __expr30 = GC_MALLOC_ATOMIC(_dup22);
        _phi30 = __expr30;
        goto a42;
    a37:
        Void* __expr37;
        __expr37 = GC_MALLOC_ATOMIC_IGNORE_OFF_PAGE(_dup22);
        _phi30 = __expr37;
    a42:
        _dup42 = _phi30;
        ;
        if (_dup42) goto a51;
        System_OutOfMemoryException* _new45;
        _new45 = System_OutOfMemoryException_System_OutOfMemoryException__newFN();
        Void_System_OutOfMemoryException__ctorFN(_new45);
        throw (Void*) _new45;
    a51:
        _dup51 = _dup42;
        ;
        Memset((Byte*) ((Byte*) (_dup51)), 0, (local0));
        _dup56 = _dup51;
        ;
        *((Int32*) (Int32*) (_dup56)) = -1;
        _dup75 = (Int32) (((Byte*) (_dup56) + sizeof(pituh*)));
        ;
        *((Int32*) (Int32*) (_dup75)) = -1;
        _dup104 = (pituh*) ((Void*) ((_dup75 + sizeof(pituh*))));
        ;
        Void_pituh__initFN_hello_ehpqe23j_dll(_dup104);
        return _dup104;
    }
    Void Void_pituh__initFN_hello_ehpqe23j_dll(pituh* __this) {
        __check_this((Void*)__this);
        ((System_Object*) (__this))->__vtbl = (Void**) &pituh_vtable_implhello_ehpqe23j_dll;
        return ;
    }
    Int32 Int32_pituh__getsizeFN_hello_ehpqe23j_dll(pituh* __this) {
        __check_this((Void*)__this);
        return (Int32) (sizeof(pituh));
    }
    System_Type* System_Type_pituh__gettypeFN_hello_ehpqe23j_dll(pituh* __this) {
        __check_this((Void*)__this);
        return (System_Type*) ((System_Type*) &pituh__runtimetype_hello_ehpqe23j_dll.data);
    }
    Void* VoidP_pituh__dynifaceFSystem_TypeN_hello_ehpqe23j_dll(pituh* __this, System_Type* _type) {
        __check_this((Void*)__this);
        return 0/*null*/;
    }
    Int32 Int32_pituh_get_static__cctor_calledFN_hello_ehpqe23j_dll() {
        return pituh__cctor_called_hello_ehpqe23j_dll;
    }
    Int32* Int32P_pituh_get_static_addr__cctor_calledFN_hello_ehpqe23j_dll() {
        return &pituh__cctor_called_hello_ehpqe23j_dll;
    }
    Void Void_pituh_set_static__cctor_calledFInt32N_hello_ehpqe23j_dll(Int32 _value) {
        pituh__cctor_called_hello_ehpqe23j_dll = _value;
        return ;
    }
    // Дальше копипастить нет смысла

    В эту простыню превращается простенькая программа на C# после прогона через IL2C:

    using System;

    class pituh {
    public static int Main (string [] args)
    {
    Console.WriteLine ("Kokoko!");
    return 0;
    }
    }


    IL2C брать отсюда: https://csnative.codeplex.com/

    Запостил: inkanus-gray, 11 Февраля 2017

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

    • SEO-пост.

      Метки: #C#, #дотнетговно.
      Ответить
    • Офтоп. Чей коммент? https://ebanoe.it/2017/02/09/how-to-oppress-developers/#comment-75420
      Ответить
    • > > throw (Void*) _new45;
      > > csnative.codeplex.com
      > > Compiling C#/MSIL to Native Code using C.

      WTF? Исключения в Си?
      Ответить
    • откуда ты знаешь, что printf не развернется в еще большую простыню?
      Ответить
      • printf то не развернётся (у него эта простыня хотя бы одна на все вызовы), а вот iostream'ы в асме смотрятся как ёбаный пиздец...
        Ответить
        • А их можно заменить на getchar и putchar или там тоже пиздец?
          Ответить
          • Может, еще на memmove в 0xb8000 заменить?
            Ответить
            • Заменил тебе за щеку, проверь.
              Ответить
            • #include<bits/stdc++.h>
              #define mygc(c) (c)=getchar_unlocked()
              #define mypc(c) putchar_unlocked(c)
              using namespace std;
              
              void reader(int *x){int k,m=0;*x=0;for(;;){mygc(k);if(k=='-'){m=1;break;}if('0'<=k&&k<='9'){*x=k-'0';break;}}for(;;){mygc(k);if(k<'0'||k>'9')break;*x=(*x)*10+k-'0';}if(m)(*x)=-(*x);}
              
              int reader(char c[]){int i,s=0;for(;;){mygc(i);if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF) break;}c[s++]=i;for(;;){mygc(i);if(i==' '||i=='\n'||i=='\r'||i=='\t'||i==EOF) break;c[s++]=i;}return s;}
              
              void writer(const char c[]){int i;for(i=0;c[i]!='\0';i++)mypc(c[i]);}


              Так сойдёт?
              Ответить
              • Нет. Во второй функции переполнение.
                Ответить
                • > переполнение
                  Пример кода?
                  Ответить
                  • Просто позвать reader с буфером любой длины. Функция не знает реальный размер буфера. Переполнение неизбежно.
                    Ответить
                    • Функции это и не нужно. Может более пристально присмотритесь к функции?)
                      Она возвращает ОДНО слово. И это уже моя проблема создать буффер нужной длинны, что-бы ОДНО слово не вылетело за его пределы. Вопросы?
                      Ответить
                      • > Может более пристально присмотритесь к функции?)

                        А чего на неё смотреть? Ты по сути написал очередной убогий gets из стандартной библиотеки.

                        > моя проблема создать бухффер нужной длинны

                        Царь всегда знает, какого размера данные приходят на вход его программе, да? Твоя функция ­— мечта любого какира.
                        Ответить
                        • Лол. Специализированная читалка под чётко ограниченный круг задач. Если я её написал, то да, я отлично знаю что мне приходит на вход. Скорость работы явно шустрее стандартных читалочек.

                          > мечта любого какира
                          Моя программа нужна более, чем полностью никому, кроме меня. У вас, случайно, паранойя не наблюдается?
                          Ответить
                          • > Скорость работы

                            Наверняка считывание очередного слова было критическим местом в этой проге. Гораздо критичнее чтения с диска/сети.

                            > явно шустрее стандартных читалочек.

                            Результаты бенчмарков, разумеется, имеются?

                            > нужна более, чем полностью никому, кроме меня

                            Ок, пусть оно так и остаётся.
                            Ответить
                            • На оба первых замечания:
                              Работа с массивом данных размером 2 * 10 ^ 9 (не шибко большой, но солидный). При полностью неизменном основном коде сокращение времени отработки с ~200 мс до ~6 мс. Потому да, критично.

                              На третье:
                              Я тебя тоже люблю, пупсик.
                              Ответить
                              • помнится, писал программу, которая читает поток данных 850 мбит/с и строит по нему график фурье (16 кривых). Был затык: один кадр отрисовывался 4 секунды. Я сначала распараллелил ффт, получил ускорение 4с -> 3.5 с. Охренел, посмотрел повнимательнее, убрал ненужные перерисовки графика (он полностью перерисовывался после замены каждой кривой, итого N^2 вместо N), получил 70 мс. Так вот я к чему. Научи читать с диска 2 гб за 6 мс, плиз
                                Ответить
                                • > с диска
                                  Да хотя бы из кеша...

                                  Может быть 6мс на одно слово или на какую-то группу слов?
                                  Ответить
                              • 2 гига за 6мс, хуяссе... Это чё за машина, перемалывающая 300+ гигов за секунду?
                                Ответить
                                • Вычислительный кластер.
                                  Я заебался с вами, ребят.
                                  Ответить
                                  • > Я заебался с вами, ребят.

                                    Иди вконтактик, там наивные девочки будут верить твоим сказкам.
                                    Ответить
                                    • > сказкам
                                      Ну а чё, всего 600 SSD по 500MB/s... По меркам гугла - мелочи :3
                                      Ответить
                                      • ну есть pci-e всякие девайсы интересные
                                        вот, например
                                        https://www-ssl.intel.com/content/www/us/en/solid-state-drives/solid-state-drives-dc-p3608-series.html
                                        вам разве такие на новый год не раздают за то, что хорошо себя вели?
                                        Ответить
                                        • > pci-e всякие девайсы
                                          Ну ок, 60 таких няшек и пара-тройка десятков машин с 30GB/s шиной действительно справятся с этим сраным двухгиговым файлом со сраными словами за 6мс. Если получится разбить парсинг на куски и ось лагов не напихает...
                                          Ответить
                                          • тебе же сказали
                                            кла-стер
                                            вон пропускная способность самого крутого проца на сегодняшний момент sparc m7 составляет 160 ГБ/с (не спрашивай, пришлось погуглить)

                                            очевидно, фрагмент кода выше массивно-параллельный, он легко масштабируется вширь (об этом свидетельствует инжекция using namespace std; которая включает именно этот вендор-анлокед режим), поэтому организовав каскад из этих процессоров, использовав некоторые из них в качестве двойного турбонаддува всей системы, легко получить искомые 300+ГБ/с скорости обработки сраных слов
                                            Ответить
                                            • дефекате c++, успокойся уже
                                              Ответить
                                            • > легко масштабируется вширь
                                              Ааа, так вот почему он написан в одну строку и его приходится скроллить по горизонтали.
                                              Ответить
                                    • Сделал тебя женщиной, проверь.
                                      Ответить
                                      • > Сделал тебя женщиной, проверь.
                                        Проверил, опять врёшь. Иди лучше @dm_fomenok помоги.
                                        Ответить
              • > mygc
                GC в крестах, охуеть
                Ответить
    • Добро пожаловать в говенное закулисье высокоуровневого программирования, а ты думал весь этот праздник с большой библиотекой поставки и модульностью бесплатный?
      Ответить
    • А вот какой говнокод получается если юзать последнюю версию

      #include "HelloWorld.h"
      namespace HelloWorld { 
          CoreLib::System::RuntimeType pituh::__type = CoreLib::System::RuntimeType(&HelloWorld::pituh::__rt_info);
          
          // Method : pituh.pituh()
          void pituh::_ctor()
          {
              base::_ctor();
              return;
          }
          
          // Method : 
          CoreLib::System::Type* pituh::__get_type()
          {
              return &HelloWorld::pituh::__type;
          }
          
          // Method : 
          bool pituh::__is_type(CoreLib::System::Type* value)
          {
              return ((&HelloWorld::pituh::__type == value) || base::__is_type(value));
          }
          
          // Method : 
          void* pituh::__get_interface(CoreLib::System::Type* value)
          {
              return base::__get_interface(value);
          }
          
          // Method : pituh.Main(string[])
          int32_t pituh::Main(__array<string*>* args)
          {
              CoreLib::System::Console::WriteLine(u"Kokoko!"_s);
              return 0;
          }
      
          pituh::__type_methods_table pituh::_methods_table;
          __runtimetype_info pituh::__rt_info = { u"pituh", u"", 18, false, &object::__type, nullptr };
      }
      
      auto __main(int32_t argc, char* argv[]) -> int32_t
      {
          __startup();
          auto exit_code = HelloWorld::pituh::Main(__get_arguments(argc, argv));
          __shutdown();
          return exit_code;
      }
      
      auto main(int32_t argc, char* argv[]) -> int32_t
      {
          return __main(argc, argv);
      }


      брать от сюдава https://github.com/ASDAlexander77/cs2cpp
      Ответить
    • и хедер ...

      #include "CoreLib.h"
      namespace HelloWorld { 
          class pituh : public object
          {
          public:
              typedef CoreLib::System::Object base;
              static CoreLib::System::RuntimeType __type;
              void _ctor();
              void* operator new (size_t _size)
              {
                  return __new_set0(_size, GCAtomic::Default);
              }
              void* operator new (size_t _size, const char* _file, int _line)
              {
                  return __new_set0(_size, GCAtomic::Default, _file, _line);
              }
              void* operator new (size_t _size, int32_t _customSize)
              {
                  return __new_set0(_customSize, GCAtomic::Default);
              }
              void* operator new (size_t _size, int32_t _customSize, const char* _file, int _line)
              {
                  return __new_set0(_customSize, GCAtomic::Default, _file, _line);
              }
              virtual CoreLib::System::Type* __get_type() override;
              virtual bool __is_type(CoreLib::System::Type*) override;
              virtual void* __get_interface(CoreLib::System::Type*) override;
              virtual object* __clone() override
              {
                  return new (__FILE__, __LINE__) HelloWorld::pituh(*this);
              }
              virtual int32_t __hash() override
              {
                  return __hash_code(this, sizeof(HelloWorld::pituh));
              }
              virtual bool __equals(object* obj) override
              {
                  return __equals_helper(this, sizeof(HelloWorld::pituh), obj, sizeof(HelloWorld::pituh));
              }
              static int32_t Main(__array<CoreLib::System::String*>*);
              class __type_methods_table : public __methods_table
              {
              public:
                  virtual CoreLib::System::Type* __get_type() override
                  {
                      return _typeof<HelloWorld::pituh*>();
                  }
              };
              static pituh::__type_methods_table _methods_table;
              static __runtimetype_info __rt_info;
          };
      }
      Ответить

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