1. Си / Говнокод #11881

    +134

    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
    // histogram_data.c   550 Kb
    int n_records = 100000;
    unsigned char data[] = {
      215, 100, 200, 204, 233, 50 , 85 , 196, 71 , 141, 122, 160, 93 , 131, 243, 234, 162, 183, 36 , 155, 
      4  , 62 , 35 , 205, 40 , 102, 33 , 27 , 255, 55 , 131, 214, 156, 75 , 163, 134, 126, 249, 74 , 197, 
      134, 197, 102, 228, 72 , 90 , 206, 235, 17 , 243, 134, 22 , 49 , 169, 227, 89 , 16 , 5  , 117, 16 , 
      60 , 248, 230, 217, 68 , 138, 96 , 194, 131, 170, 136, 10 , 112, 238, 238, 184, 72 , 189, 163, 90 , 
      176, 42 , 112, 225, 212, 84 , 58 , 228, 89 , 175, 244, 150, 168, 219, 112, 236, 101, 208, 175, 233, 
      123, 55 , 243, 235, 37 , 225, 164, 110, 158, 71 , 201, 78 , 114, 57 , 48 , 70 , 142, 106, 43 , 232, 
      26 , 32 , 126, 194, 252, 239, 175, 98 , 191, 94 , 75 , 59 , 149, 62 , 39 , 187, 32 , 203, 42 , 190, 
      19 , 243, 13 , 133, 45 , 61 , 204, 187, 168, 247, 163, 194, 23 , 34 , 133, 20 , 17 , 52 , 118, 209, 
      146, 193, 13 , 40 , 255, 52 , 227, 32 , 255, 13 , 222, 18 , 1  , 236, 152, 46 , 41 , 100, 233, 209, 
      91 , 141, 148, 115, 175, 25 , 135, 193, 77 , 254, 147, 224, 191, 161, 9  , 191, 213, 236, 223, 212, 
      250, 190, 231, 251, 170, 127, 41 , 212, 227, 19 , 166, 63 , 161, 58 , 179, 81 , 84 , 59 , 18 , 162, 
      57 , 166, 130, 248, 71 , 139, 184, 28 , 120, 151, 241, 115, 86 , 217, 111, 0  , 88 , 153, 213, 59 , 
      172, 123, 123, 78 , 182, 46 , 159, 10 , 105, 178, 172, 163, 88 , 47 , 155, 160, 187, 84 , 189, 51 , 
      235, 175, 167, 65 , 136, 22 , 66 , 224, 175, 23 , 28 , 92 , 147, 151, 170, 73 , 198, 73 , 84 , 48 , 
      251, 0  , 211, 84 , 48 , 111, 245, 235, 195, 178, 31 , 175, 98 , 198, 241, 234, 220, 52 , 203, 140, 
     // over 5000 строк подобного
    
    int expected_results[] = {
        404,   389,   376,   394,   376,   342,   364,   364,   383,   396, 
        412,   409,   394,   409,   405,   383,   379,   401,   377,   400, 
        383,   410,   386,   383,   418,   416,   406,   349,   390,   388, 
        393,   372,   386,   386,   400,   384,   404,   355,   400,   361, 
        398,   371,   389,   383,   406,   414,   364,   389,   418,   391, 
        404,   396,   390,   397,   375,   389,   387,   392,   368,   430, 
        407,   387,   380,   380,   383,   352,   386,   413,   435,   413, 
        358,   453,   436,   409,   419,   393,   423,   398,   407,   372, 
        399,   353,   370,   389,   399,   376,   395,   439,   412,   379, 
        404,   374,   392,   393,   366,   377,   374,   395,   402,   380, 
        422,   407,   379,   398,   376,   410,   376,   392,   374,   409, 
        415,   382,   411,   398,   379,   385,   383,   374,   421,   371, 
        359,   403,   373,   396,   365,   365,   382,   383,   352,   399, 
        367,   439,   401,   418,   407,   403,   392,   373,   385,   374, 
        389,   365,   414,   415,   360,   384,   387,   381,   400,   410, 
        400,   406,   385,   395,   373,   381,   419,   362,   383,   399, 
        424,   379,   394,   401,   371,   426,   376,   375,   383,   370, 
        405,   402,   372,   404,   364,   419,   390,   376,   368,   405, 
        393,   386,   402,   393,   420,   388,   380,   364,   412,   383, 
        411,   357,   412,   377,   346,   389,   380,   371,   393,   408, 
        386,   425,   392,   338,   373,   382,   380,   365,   379,   394, 
        379,   378,   415,   394,   352,   378,   417,   403,   407,   388, 
        390,   433,   352,   394,   398,   407,   397,   409,   419,   378, 
        387,   359,   406,   384,   403,   385,   411,   418,   408,   371, 
        384,   386,   392,   422,   377,   399,   364,   381,   362,   379, 
        393,   383,   381,   400,   434,   404};
    
    // example_vectors.c - 1.8 Mb
    int vector_size=100000;
    int vector_a[] = {
      215 , 100 , 200 , 204 , 233 , 50  , 85  , 196 , 71  , 141 , 122 , 160 , 93  , 131 , 243 , 234 , 162 , 183 , 36  , 155 , 
      4   , 62  , 35  , 205 , 40  , 102 , 33  , 27  , 255 , 55  , 131 , 214 , 156 , 75  , 163 , 134 , 126 , 249 , 74  , 197 , 
      134 , 197 , 102 , 228 , 72  , 90  , 206 , 235 , 17  , 243 , 134 , 22  , 49  , 169 , 227 , 89  , 16  , 5   , 117 , 16  , 
      60  , 248 , 230 , 217 , 68  , 138 , 96  , 194 , 131 , 170 , 136 , 10  , 112 , 238 , 238 , 184 , 72  , 189 , 163 , 90  , 
      176 , 42  , 112 , 225 , 212 , 84  , 58  , 228 , 89  , 175 , 244 , 150 , 168 , 219 , 112 , 236 , 101 , 208 , 175 , 233 , 
      123 , 55  , 243 , 235 , 37  , 225 , 164 , 110 , 158 , 71  , 201 , 78  , 114 , 57  , 48  , 70  , 142 , 106 , 43  , 232 , 
      26  , 32  , 126 , 194 , 252 , 239 , 175 , 98  , 191 , 94  , 75  , 59  , 149 , 62  , 39  , 187 , 32  , 203 , 42  , 190 , 
      19  , 243 , 13  , 133 , 45  , 61  , 204 , 187 , 168 , 247 , 163 , 194 , 23  , 34  , 133 , 20  , 17  , 52  , 118 , 209 , 
      146 , 193 , 13  , 40  , 255 , 52  , 227 , 32  , 255 , 13  , 222 , 18  , 1   , 236 , 152 , 46  , 41  , 100 , 233 , 209 , 
      91  , 141 , 148 , 115 , 175 , 25  , 135 , 193 , 77  , 254 , 147 , 224 , 191 , 161 , 9   , 191 , 213 , 236 , 223 , 212 , 
      250 , 190 , 231 , 251 , 170 , 127 , 41  , 212 , 227 , 19  , 166 , 63  , 161 , 58  , 179 , 81  , 84  , 59  , 18  , 162 , 
      57  , 166 , 130 , 248 , 71  , 139 , 184 , 28  , 120 , 151 , 241 , 115 , 86  , 217 , 111 , 0   , 88  , 153 , 213 , 59  , 
      172 , 123 , 123 , 78  , 182 , 46  , 159 , 10  , 105 , 178 , 172 , 163 , 88  , 47  , 155 , 160 , 187 , 84  , 189 , 51  , 
      235 , 175 , 167 , 65  , 136 , 22  , 66  , 224 , 175 , 23  , 28  , 92  , 147 , 151 , 170 , 73  , 198 , 73  , 84  , 48  , 
    
    // over 15000 cтрок

    - Сударь, вы изволили принять наркотических средств?
    - Чего?
    - Ты что, сука, упоротый?!

    Запостил: denis90, 06 Октября 2012

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

    • Выхлоп генератора?
      Ответить
    • Используйте «Чтение из файла», тогда ваш код станет мягким и шелковистым.
      Ответить
      • зато так всё all-in-one
        Ответить
        • Сишное ООП - данные и код размещены вместе, образуя единую сущность в виде гномика
          Ответить
          • Я плюсанул
            Ответить
          • Я плюсанул, тк троллезелено.
            >Сишное ООП - данные и код размещены вместе
            Суть алгоритмов STL C++ в разделении кода и данных. Одна из сторон обобщённого программирования.
            Элсо про гномика не понял.
            Ответить
            • > Элсо про гномика не понял
              Баян же
              http://www.youtube.com/watch?v=BBDT-sFbq9o
              Ответить
            • Сишное != крестоблядское
              Ответить
            • > Суть алгоритмов STL C++ в разделении кода и данных.
              Если без зелёного, то это не совсем то. Одно из различий структурного/функционального программирования vs ООП - первые два подхода рассматривают данные и алгоритмы их обработки как независимые явления. ООП же подразумевает слияния данных и методов в единое понятие объекта. Собственно, по этому поводу и был мой не особо успешный зелёный тезис.
              Ответить
              • ооп говно, фп круто
                Ответить
                • '' В Санкт-Петербурге студент избил преподавателя, которому не смог сдать зачет по объектно-ориентированному программированию. У педагога перелом основания черепа и тяжелые травмы, студент скрылся.

                  Вот он, крах объектной парадигмы. Наглядно. ''

                  http://juick.com/Muu/2078713
                  Ответить
                  • Бля, ссылка даже не копируется, не давай ссылки через code
                    Ответить
                    • https://addons.mozilla.org/en-US/firefox/addon/text-link/?src=ss
                      Ответить
                      • зачем? в FF и так открывает после выделения
                        Ответить
                        • Видимо людям нравится, чтобы без выделения.
                          Ответить
                          • Чтобы любой токен - ссылка
                            Ответить
                            • Сами допиливайте. Для хромичей и прочих операстов.
                              javascript: void($("p.description,span.comment-text,div.entry-comment").each(function(i,e) { var html=e.innerHTML , r = /http[\S]+/ , m = r.exec(html) ; if (m) e.innerHTML=html.replace(r, m[0].link(r.exec(e.textContent)[0])); })); void($("div.entry-content:contains('http:')").each(function(i,e) { var text=e.textContent , m = /http:[\S]+/.exec(text)[0] ; if (m)$(e).append($(m.link(m))); }))
                              Ответить
                              • У меня Lynx
                                Ответить
                                • /r скриншот этого треда.
                                  Интересно как моя ава выглядит.
                                  Ответить
                                  • Сча
                                    поставлю Colinux
                                    приду домой и загружу линух. Wait me please.
                                    Ответить
                                    • Сча
                                      Буду качать Lynx, установлю его и разбираться что там и как.
                                      fixed
                                      Ответить
                                      • Лолшто? Под линухом есть менеджер пакетов, который все сделает сам. Это тебе под своей виндой красноглазить придется. Красноглазая винда не нужна.
                                        Ответить
                                        • >Под линухом есть менеджер пакетов
                                          А я слышал труЪ-парни собирают из сырцов.

                                          Но ты вместо того чтобы наговариваться лучше б скрин браузера выложил, под которым сидишь.
                                          Ответить
                                          • > А я слышал труЪ-парни собирают из сырцов.
                                            Одно другому не мешает
                                            sudo emerge lynx
                                            Ответить
                                          • > собирают из сырцов.
                                            Это же настоящий BSDM-way.
                                            Ответить
                                          • >А я слышал труЪ-парни собирают из сырцов.
                                            Ну во дворе детишки и не такое говорят. На самом деле это все понты, чтобы отпугнуть настоящих людей из своей элитной группы. Они говорят, что поставили линукс и хотят выглядеть круче, поэтому рассказывают всякие сказки, типа: "я компиляю ведро 7 дней в неделю и САМ исправляю в нем ошибки компиляции" или "я сделал так, что мой линукс сам мне заваривает кофе, а психоаналитик из емакса исправляет мои нервопроблемы, вызванные настройкой плагина психоаналитика для емакса" или "я запустил скрипт ускорения ведра, создающий рамдиск со свопом, а сам рамдиск я разместил в гигантской видеопамяти моей топовой MsDirectX12-совместимой видеокарте, чтобы хоть как-то начать её использовать".
                                            Ответить
                                  • > /r скриншот этого треда.
                                    > Интересно как моя ава выглядит.
                                    Как-то так: http://rghost.ru/40813462.view
                                    Ответить
                                    • Ох бля. Я и себе уже успел его поставить.
                                      Ответить
                                    • http://rghost.ru/40813974/image.png
                                      Лол.
                                      На словах-то ты Lynx-bro, а на деле ты гумно.
                                      Ответить
                                      • Я счас уроки делаю. Мне завтра в школу. Поэтому компьютер включать запретили. Как разрешат - включу и сделаю скин Лунха.
                                        Ответить
                                        • > Мне завтра в школу.
                                          > Я всё ещё на работе.
                                          А детский труд у нас не запрещен? ;)
                                          Ответить
                                    • Раз такое дело:
                                      http://s18.postimage.org/eywfflje1/govnokod.png

                                      :)
                                      Ответить
                • Не совсем. Они немного перпендикулярны. Возьмём, к примеру, старые добрые фигуры.

                  В ООП мы можем задать единый интерфейс для фигур, и добавление новых фигур будет легко и изящно вписываться в систему. Но как только мы решим добавить в интерфейс новую операцию, нам придётся изменить все реализации.

                  Если мы используем процедурный или функциональный подход, то фигуры представляют из себя структуры или АТД соответственно. Все операции над ними выражаются через функции, каждая из которых проверяет тип фигуры и выполняет нужные действия. Добавление новых операций не затрагивает систему, но при добавлении новых фигур приходится переписывать все функции в системе.

                  Итераторы и алгоритмы stl демонстрируют сочетание двух подходов.
                  Ответить
                  • > но при добавлении новых фигур приходится переписывать все функции в системе

                    А как ООП тут поможет? Если старые функции должны работать по-старому, то они точно так же смогут работать и над новыми фигурами, если же некоторые функции для новых фигур придётся переписать, то переписать их придётся в любой парадигме.
                    Ответить
                    • >> при добавлении новых фигур
                      > А как ООП тут поможет?

                      Если у тебя есть абстрактный класс Shape с методами area, perimeter, contains_point, ... и есть подклассы Rectangle, Triangle, Circle, то добавление фигуры Poligon можно выполнить без переписывания существующего кода.
                      Ответить
                      • Ну так и в процедурщине так же можно, что-то я не понял проблемы.
                        Ответить
                        • нет, в процедурщине придётся исправлять все функции, добавляя новый case в switch по типу фигуры.
                          Ответить
                          • Если для нового типа логика такая же, то ничего менять не надо.
                            Если для нового типа логика другая, то один хуй придётся дописывать.
                            Ответить
                            • > Если для нового типа логика другая, то один хуй придётся дописывать.
                              А полиморфизм на что? Если ты реализовал Shape так, что у тебя в нём содержится енум ShapeKind, то да, ООП тебе не поможет.
                              Ответить
                              • > А полиморфизм на что?

                                Что полиморфизм? Компилятор за тебя догадается, как описать код многоугольника, потому что полиморфизм? Или он всего-навсего подставит другую готовую функцию (причём скорее всего по втбл) в готовый метод?
                                Ответить
                                • Ты меня не понел.
                                  Понятно, что для многоугольника придётся писать реализацию всех операций. Я о том, что при этом не нужно модифицировать код, относящийся к логике операций для других фигур. Т.е. добавляешь новый класс, реализуешь методы, PROFIT. В процедурном стиле тебе нужно добавить новую структуру и поправить ВСЕ существующие функции (что не очень круто, особенно, если у тебя нет сорцов).

                                  С другой стороны, если тебя интересует не добавление новых фигур, а новых операций, ситуация обратная - в ООП тебе нужно изменить ВСЕ классы, в процедурщине достаточно дописать новую финкцию с очередным switch/case.
                                  Ответить
                                  • Я всё равно не понимаю, зачем менять все существующие функции. Если в них вписано result := A[ShapeKind](param1, param2), например, то достаточно только дополнить TShapeKind и написать несколько функций.
                                    Ответить
                                    • А, ну если только руками таблицу виртуальных функций запилить. По сути это ООП, только реализованное средствами процедурного языка.
                                      Ответить
                                      • Ну да, только процедурщина даёт больше свободы в реализации.
                                        Ну и массив объектов разного типа (не ссылок, а объектов) ты не создашь на ООП, а на вариантых записях - как нефиг.
                                        Ответить
                                        • > на вариантых записях
                                          каждая из которых будет занимать место минимум равное размеру максимально толстой записи + накладные расходы
                                          а потом, когда библиотека, знающая о 10 типах и создавшая такой массив, лежит уже в бинарном виде, ты добавляешь в иерархию 11й, чуть больше чем любой другой, и у тебя всё накрывается медным тазом
                                          больше свободы в этих реализациях!
                                          Ответить
                                          • > каждая из которых будет занимать место минимум равное размеру максимально толстой записи

                                            Зачастую это почти не влияет на размер.

                                            > а потом, когда библиотека, знающая о 10 типах и создавшая такой массив, лежит уже в бинарном виде

                                            С библиотеками, уже лежищими в бинарном виде, вообще тяжело, хрен что изменишь.
                                            Ответить
                                  • Кстати, вот пример Shapes на C# vs F#.
                                    http://www.youtube.com/watch?v=x4hmwZuoDCQ

                                    В функционалщине использовали алгебраические типы. Получилось много короче. Но на деле - это лишь утка. Эти АТД классы ожидает теже проблемы при попытке расширения иерархии, что и процедурный подход. Ну и прочие проблемы алгебраических типов, что обсуждались ниже
                                    Ответить
                                  • показать все, что скрытоvanished
                                    Ответить
                            • >> Если для нового типа логика другая, то один хуй придётся дописывать.

                              А почему нельзя дописать «Тор — хуй»?
                              Ответить
                      • Мне вот тоже кажется, что ООП легче поддерживать и добавлять новые возможности программы. ФП - это если нужно быстро налабать небольшую программу на коленке. Впрочем вывод типов приятный. Еслиб его добавили в языки общего употребления, то и фп почти не нужен. Разве что с точки зрения простоты параллелизации, но в язык общего употребления это тоже можно добавить. Впрочем особой частоты кроме хаскеля в других фп то и нет, так что почти не зачет.
                        Ответить
                        • > Мне вот тоже кажется, что ООП легче поддерживать и добавлять новые возможности программы

                          Для этого не ООП нужно, а жёсткое разделение интерфейса от реализации.
                          Ответить
                          • Не помогает. Посмотри на алгебраические типы. Это из-за них не получается отделить интерфейс от реализации. Там фактически общая реализация на все реализации интерфейса (вроде исключая хаксел). Ты пишешь функции (с помошью которых взаимодействовать с объектом) и в каждой из них гигантский паттернматчинг на все возможные реализации и так в каждой функции. Притом у тебя нет никакой возможности сохранить откастинный паттерматчингом объект до потомка (только самый абстрактный предок). И поэтому это приходится делать прямо в каждой функции или передавать извлеченные паттерн матчингом данные из этого объекта уже вне объекта в виде каких-нибудь параметров функции. Прямо антиинкапсуляция какая-то. Допустим я решил не нарушать инкапсуляцию, поэтом паттернматчу какждый раз, а это уже в свою очередь оверхед на каждый вызов функции (вплоть до O(n), где n - кол-во объектов в иерархии). Остаётся надеятся на оптимизатор, который лишние паттернаматчинги уберет или заменит их чем-нибудь типа виртуальной таблицы. Даже если я решил нарушать инкапсуляцию - это приводит к тому, что все равно паттернматчинг с возможным О(n) будет вызываться при обращении к каждой функции, расположенной в интерфейсе объекта.

                            Кто знает, как этот нёх обходить? Минимально пользоваться алгебраическими типами? Тогда это будет даже хуже ооп. В том же хахахакселе даже структур нет (впрочем я не про хаксел). А в других фяп пользоваться нормальным ооп можно обычно, но теряешь многие плюсы фп, тк в них оно прикручено как-то сбоку. Разве что несколько многословно, но более или менее красиво ооп прикручено в динамическитипизированные фяп или в OCaml/F#, хотя в последних тоже далеко не все красиво с ооп.
                            Ответить
                            • Вообщем по величине поста я думаю вы величину батхерта узрели.
                              Ответить
                              • Элсо я поддерживаю Романа из постов выше.
                                Ответить
                                • Я было подумал что я ещё не проникся фп и просто не умею готовить фп+ооп, но оказалось, что не я один испытываю с этим проблемы.
                                  Ответить
                                  • Conclusion:
                                    http://porteightyeight.files.wordpress.com/2009/06/conclusion.jpg
                                    Алгебраические типы не заменяют собой ООП и использовать их можно только в крайне ограниченных случаях.
                                    Ответить
                                    • > Алгебраические типы не заменяют собой ООП
                                      Не заменяют, они не для этого предназначены. В функциональных языках для этого есть другие инструменты. В CL есть обобщённые функции и довольно своеобразное ООП (+ мультиметоды), в Haskell есть typeclasses, в StandardML есть signatures.
                                      Ответить
                                      • >signatures
                                        В чем суть?
                                        Ответить
                                        • Фактически, signature в StandardML - это интерфейс модуля. Несколько модулей могут иметь один и тот же интерфейс, один модуль может иметь несколько интерфейсов. Например, Seq - хороший кандидат на представление в виде signature.
                                          Ответить
                            • > В том же хахахакселе даже структур нет
                              Есть:
                              data Foo = Foo { 
                                fooID :: Int, 
                                fooName :: String 
                              }
                              Объявятся конструктор Foo :: Int -> String -> Foo и два метода: fooID :: Foo -> Int, fooName :: Foo -> String.

                              > Посмотри на алгебраические типы
                              Алгебраический тип это самый обычный union с дополнительным полем, позволяющим отличить какой из вариантов сейчас активен. С такой конструкцией везде работают одинаково - либо крестоблядским свичом, либо паскалевским кейсом, либо хаскелевым паттернматчингом. Никакого ООП тут нет и в помине. Да и расширяемость у ADT оставляет желать лучшего.

                              ООП в хаскеле это именно его классы. Когда я описываю тип данных, и говорю что он является инстансом какого-либо класса (или классов).
                              Ответить
                              • *ООП в хаскеле это именно его классы типов (type-classes).
                                selfix

                                Жаль, что классов типов нет не в Ocaml\F#, не в Nemerle (за чистый Ocaml 100% не ручусь, но вроде нет). Как там с этим в Scala?
                                Ответить
                                • > Как там с этим в Scala?
                                  Говорил же 100 раз, реализуются через имплиситы
                                  Ответить
                                  • >реализуются через имплиситы
                                    def sort[T](elements: Seq[T])(implicit comparator: Comparator[T]): Seq[T]

                                    Имплисит - оказывается это это обычный параметр по умолчанию. Придумали же новое название... Ох уж эти функциональщики... Вместо слова interface придумывают новое - type classes и так со всеми словами.
                                    Это... А менее многословно не дано было сделать? Зачем этот говносинтаксис? Ну и не привычно оно.
                                    (implicit comparator: Comparator[T])

                                    Сделали бы:
                                    comparator=Comparator[T]()
                                    или 
                                    comparator:Comparator[T]=default
                                    Ответить
                                    • Впрочем я понял почему так. Так нужно. Не отвечайте на возмущение на имплиситы.
                                      Ответить
                                      • Первый раз вижу type-classes не на уровне языка, а в качестве шаблона проектирования.

                                        1)Что-то я боюсь, что если вдруг высыпится неодназначность - на большом проекте с большим кол-вом использования одного имплисита - кодер начнет горевать.

                                        2)Реализовывать по классу на каждый метод интерфейса (пусть и анонимному) как-то очень жестоко.
                                        http://habrahabr.ru/company/tcsbank/blog/147759/
                                        Хотелось бы взять лямбдочку или локальную функцию с замыканием. А пока это похоже на закат солнца вручную. По сравнению с Java, Scala - великий автоматизатор, а вот по сравнению с фяп - ололо я все делаю руками.
                                        Ответить
                                        • > вот по сравнению с фяп - ололо я все делаю руками
                                          Когда дело доходит до функциональных конструкций, Haskell гораздо более простой и понятный язык, чем Scala. Я как-то пробовал реализовать эти typeclasses - трэш, угар, содомия и многа букав.
                                          Ответить
                                          • >Я как-то пробовал реализовать эти typeclasses - трэш, угар, содомия и многа букав.
                                            Это на хаскеле то? Вроже наоборот мало букф.
                                            Ответить
                                          • Таже ООП в скале оказывается очень многословный из-за typeclasses на имплиситах. Хотя через интерфейсы как-бы ок. Хотя в OCaml\F# мне нравится оно больше. А АТД - как мы выяснили к ООП отношение имеют очень скромно.
                                            Ответить
                    • проблема в излишней подгонке реализации при добавлении, даже если это бесполезный код.
                      чтобы такого не случалось, stl демонстрирует хороший выход разделения структур и алгоритмов.

                      з.ы.: жаль, что санобляди в жабе не подумали сделать подобие stl, а размазали некие алгоритмы по утилитным классам. только apache-commons и спасает.
                      не поверите, в j2se даже сейчас нет такой элементарной операции, как join, грррр.
                      Ответить
      • особенно на андроиде, где файл хуй знает где и не факт что он не заархивирован и что не придётся ещё хуй знает как его открывать
        по теме - портянка цифр это норма
        ясен хуй она вся из внешнего генератора
        такое вот метапрограммирование ахахах
        Ответить
        • > по теме - портянка цифр это норма

          Для embended или system.
          И похоже случай не из этих.

          > особенно на андроиде, где файл хуй знает где и не факт что он не заархивирован и что не придётся ещё хуй знает как его открывать

          С кирпичами цвета (164,198,57) за плечами...
          Ответить
    • фи, еще и в десятичной системе
      Ответить
    • http://www.vemix.com/Games/xonix/xonix.php/
      Ответить
    • В десятичной системе, не труЪ
      Ответить
    • Смешнее было бы видеть такие определения в h-файле.
      Ответить
    • Крутяк, а как насчёт нормализовать матрицу 100x100. неужели перебивать 10.000 числе вручную? А слабо из текстового файла с результатами расчётов прочитать?
      Ответить
      • Это 146% выхлоп генератора или какой-нибудь математической тулзы.

        На крайний случай можно написать пару-тройку строк кода, которые возьмут этот массив, преобразуют его как надо, и выдадут опять же в виде сяшного кода...
        Ответить
        • Поддерживаю. В ряде задач значения можно зашить жёстко. Какая нахрен разница - выводить данные в файл некоторого формата или сразу в сишный исходник? Не надо будет писать открытие и парсер.
          Ответить

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