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

    Всего: 223

  2. C++ / Говнокод #12064

    +11

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    typedef void Start1(void);
    struct Kernel
    {
        Start1 Start;
    } kernel;
     
    void Kernel::Start(void)
    {
     
    }

    Как всегда оттуда.

    LispGovno, 06 Ноября 2012

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

    +16

    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
    void keyStart(int key,void (*func)())
    {
      while(SDL_PollEvent(&keyEvent))
      {
        switch(keyEvent.type)
        {
          case SDL_KEYDOWN:
            switch(keyEvent.key.keysym.sym)
            {
              /*Выход*/
              case SDLK_ESCAPE:
              func();
              break;
              case SDLK_w:
              func();
              break;
              case SDLK_q:
              func();
              break;
              default:
              break;
            }
          break;
          default:
          break;
        }
      }
          
    }

    Функция высшего порядка, мужики. Сами знаете откуда.

    LispGovno, 06 Ноября 2012

    Комментарии (11)
  4. Java / Говнокод #12053

    +68

    1. 1
    2. 2
    3. 3
    public ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel) {
         if (initialCapacity < 0)
           throw new IllegalArgumentException();

    - unsigned?
    - ЖАБАПРОБЛЕМЫ.

    А ещё это не портируется на 64хбитные платформы с 32хбитным intом.

    LispGovno, 04 Ноября 2012

    Комментарии (54)
  5. Куча / Говнокод #12041

    +129

    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
    public Match(source:SourceLexemes, namedLinkDictionary:NamedLinkDictionary, settings:MatchSettings):MatchResult
    				def endMatchingBlockLexemesByType = settings._endMatchingBlockLexemesByType;
    				def endMatchingBlockLexemesByValue = settings._endMatchingBlockLexemesByValue;
    				assert([_beginOfMatchBlock, _endOfMatchBlock].ForAll(excludedItem => !endMatchingBlockLexemesByValue.Contains(excludedItem)));
    				def matchLexeme(amountOfEntryBlock=0, matchedLexemes=[], sourceTail=source)
    					|(0, _::_, _)                                                                    => Some(matchedLexemes, sourceTail)
    					|(_, _, lexeme_::_) when endMatchingBlockLexemesByType.Contains(lexeme_._type)   => None()
    					|(_, _, lexeme_::lexemes_)                                                       => 
    						match(lexeme_._value, amountOfEntryBlock)
    							|(value_, _) when endMatchingBlockLexemesByValue.Contains(value_)   => None()
    							|(_beginOfMatchBlock, _)                                            => matchLexeme(amountOfEntryBlock+1, lexeme_::matchedLexemes, lexemes_)
    							|(_endOfMatchBlock, 0)                                              => None()
    							|(_endOfMatchBlock, _)                                              => matchLexeme(amountOfEntryBlock-1, lexeme_::matchedLexemes, lexemes_)
    							|(_, 0)                                                             => None()
    							|(_, _)                                                             => matchLexeme(amountOfEntryBlock, lexeme_::matchedLexemes, lexemes_)
    							|_                                                                  => None()
    					|_                                                                               => None()
    				match(matchLexeme())
    					|None                                                    => MatchResult.Failure(source, namedLinkDictionary)
    					|Some((matchedLexemes_, unmatchedLexemesTail_))          => MatchResult.Success(unmatchedLexemesTail_, updateNamedLinkDictionary(matchedLexemes_, namedLinkDictionary))

    Вчера заглянул в свой код.
    Есть один язык, так вот в нем паттерн-матчинг задается на уровне сигнатур функций.
    В связи с тем, что я каждую ночь читал книгу по кулХацкелу, то то что там было написано - вьелось мне в подкоррку и я этого даже не заметил.
    По ночам когда читаешь что-то, оно проникает в незащищенное подсознание. Я даже не ожидал, что напишу такой код. Но я его написал и только опосля понял, что с кодом что-то не так.
    Беда пришла оттуда, откуда её не ждали.
    Ещё я больше не могу без таких функций, как id или ($) или (.) или стрелочка\рыбка. Меня все это конечно раздражает... Мне кажется, что меня держут в клетке и не дают пользоваться правильными функциями.
    Я всегда считал, что зашквар и профессиональная деформация может быть только от крестов.
    Похоже я очень сильно ошибался и поплатился за это.
    Что посоветуете?

    LispGovno, 01 Ноября 2012

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

    +23

    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
    99. 99
    #include <iostream>
    #include <stdlib.h>
    #include <typeinfo>
     
    using namespace std;
     
    #define ololo for(volatile register int i=0;i<10;++i);
     
    struct VB
    {
            virtual void f() const =0;
    };
     
    class V1: public VB
    {
            void f() const {ololo}
    };
     
    class V2: public VB
    {
            void f() const {ololo}
    };
     
    struct TU1
    {
            inline void f() const {ololo}
    };
     
    struct TU2
    {
            inline void f() const {ololo}
    };
     
    struct TUB
    {
            const type_info* type;
            union 
            {
                    TU1 tu1;
                    TU2 tu2;
            };
     
            template<class T>
            void ctor()
            {
                    this->type=&typeid(T);
            }
            
            template<class T>
            inline void call(const T& f)
            {
                    if(this->type==&typeid(TU1))
                            f(this->tu1);
                    else
                            f(this->tu2);
            }
    };
     
    enum {N=1000, N2=N*50};
     
    int main() {
            cout<<"ok"<<endl;
            {
                    VB*v[N];
                    for(int i=0;i<N;++i)
                            if(rand()%2)
                                    v[i]=new V1;
                            else
                                    v[i]=new V2;
                    volatile clock_t a=clock();
                    for(int j=0;j<N2;++j)
                            for(int i=0;i<N;++i)
                                    v[i]->f();
                    volatile clock_t b=clock();
                    cout<< (double)(b - a) / CLOCKS_PER_SEC<<endl;
            }
            cout<<"ok"<<endl;
            {
                    TUB v[N];
                    for(int i=0;i<N;++i)
                            if(rand()%2)
                                    v[i].ctor<TU1>();
                            else
                                    v[i].ctor<TU2>();
                    struct Continuation
                    {
                            inline void operator()(const TU1& a) const {a.f();}
                            inline void operator()(const TU2& a) const {a.f();}
                    } cps;
                    volatile clock_t a=clock();
                    for(int j=0;j<N2;++j)
                            for(int i=0;i<N;++i)
                                    v[i].call(cps);
                    volatile clock_t b=clock();
                    cout<< (double)(b - a) / CLOCKS_PER_SEC<<endl;
            }
            cout<<"ok"<<endl;
            return 0;
    }

    http://ideone.com/plFaLM
    Тут в соседней теме разгорелся спор, что быстрее - полиморфизм виртуальных функций или полиморфизм tagget union. По сути последнее - выбор по if нужной виртуальной функции. Говорят в Java быстрее второе.
    Тема родилась из http://govnokod.ru/12025#comment158188
    Получилось по результатам измерений:
    Виртуальные функции: 1.8 секунд.
    tagget union: 1.94 секунд.
    Притом это всего 2 полиморфных типа в tagget union, а если рост числа полиморфных классов будет расти, то разрыв между виртуальными функциями и tagget union только увеличится. Притом производительность tagget union будет только падать.
    Тема поднята ещё со взглядом на функциональные языки. Это ведь там так модны ADT с постоянным внутри ifподобным паттернматчингом по ним.
    Жду указания на косяки или способы поднять производительность tagget union.

    LispGovno, 31 Октября 2012

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

    +128

    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
    [Record] variant ItemPatternMatched: PatternMatchedBase, IPatternMatched
    			_matchByLexemeValue:option[string]
    			public Match(source:SourceLexemes, namedLinkDictionary:NamedLinkDictionary):MatchResult
    				match(source)
    					|[]               => MatchResult.EndOfLexemes(source, namedLinkDictionary)
    					|lexeme_::lexemes_=>    def updatedNamedLinkDictionary = updateNamedLinkDictionary(lexeme_::[], namedLinkDictionary);
    											def failure = MatchResult.Failure(source, namedLinkDictionary);
    											def success = MatchResult.Success(lexemes_, updatedNamedLinkDictionary);
    											match(_matchByLexemeValue)
    												|None | Some(lexemeValue_) when (lexemeValue_==lexeme_._value) =>											
    													match(this, lexeme_._type)
    														|(Symbol, SourceLexeme.Type.Symbol) | (Identificator, SourceLexeme.Type.Identificator) | (Number, SourceLexeme.Type.Number) => 
    															success
    														|_                                                                                                                          => 
    															failure
    												|_                                                             => 
    													failure
    			|Symbol
    			|Identificator
    			|Number

    Начальник, посмотрев на код, сказал, что NemerleGovno. Я не знаю, что ему ответить?

    LispGovno, 30 Октября 2012

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

    +26

    1. 1
    2. 2
    3. 3
    4. 4
    std::RAII_File(fileName, moda, [&](std::IOHandle fHandle)
    {
       //...
    });

    Паrни. Что-за код мне достался? Какой наркоман это написал? У него же ЛГМ лямбда головного мозга.
    О std-инъекциях я даже молчу.

    LispGovno, 19 Октября 2012

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

    +137

    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
    using System;
     
    class TLockCriticalSystemResource : IDisposable
    {
            public TLockCriticalSystemResource(){Console.WriteLine("Acquire critical system resource");}
            public void Dispose(){Console.WriteLine("Release critical system resource");}
            public bool Property1{private get{return true;}set{throw new Exception();}}
    }
     
    public class Test
    {
            public static void Main()
            {
                    using (var file = new TLockCriticalSystemResource()
                            {
                                    Property1=true
                            })
                    {
                        // Делаем чего-то с ресурсом
                    }
            }
    }

    Ололо. using не даёт гарантию безопасности с точки зрения исключений:
    http://ideone.com/nHDIJ
    Системный ресурс остался захваченным.

    LispGovno, 17 Октября 2012

    Комментарии (35)
  10. C++ / Говнокод #11949

    +22

    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
    #include <iostream>
    
    using namespace std;
    
    auto fw(int i)->bool
    {
       return cout<<"Привет станция мир"<<i<<"!"<<endl, true;
    }
    
    auto ff()->bool
    {
       return cout<<"Это должно быть последние выполненное подвыражение."<<endl, false;
    }
    auto ft()->bool
    {
       return cout<<"Хьюстон, у нас КРЕСТОПРОБЛЕМЫ. Нарушен порядок вычисления и ленивость логических операторов. Мы падаем!!!!1111"<<endl, true;
    }
    
    struct TBabylonBug
    {
       bool a=true;
       TBabylonBug(){}
       TBabylonBug(bool a):a(a){}
       const TBabylonBug operator&&(const bool ophui) const 
       {
          return a&&ophui;
       }
       const TBabylonBug operator&&(const TBabylonBug& ophui) const 
       {
          return a&&ophui.a;
       }
    };
    
    int main() {
       cout<<"кo"<<endl;
       true&&fw(1)&&fw(2)&&ff()&&ft();
       cout<<"кo ко"<<endl;
       cout<<"TBabylonBug().a = "<<boolalpha<<TBabylonBug().a<<endl;
       TBabylonBug()&&fw(1)&&fw(2)&&ff()&&ft();
       cout<<"кo ко ко"<<endl;
       return 0;
    }

    http://liveworkspace.org/code/efffb5204b0f69a2725b7d9f4ba0d570

    LispGovno, 17 Октября 2012

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

    +140

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    var actions = new List<Action>();
    foreach (var i in Enumerable.Range(1, 3))
    {
        actions.Add(() => Console.WriteLine(i));
    }
    
    foreach (var action in actions)
    {
        action();
    }

    Внезапно:
    http://ideone.com/RaiHr
    http://ideone.com/EMQBA

    LispGovno, 17 Октября 2012

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