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

    +974

    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
    /*Вариант - вручную*/
    #include <iostream>
    #include <map>
    #include <string>
    #include <utility>
    
    int main(int argc, char* argv[]) {
      std::map<std::string, std::pair<int, int> > files;
      files["0.txt"] = std::make_pair(0, 7);
      files["1.txt"] = std::make_pair(8, 41);
      files["2.txt"] = std::make_pair(42, 50);
      std::map<std::string, std::pair<int, int> >::const_iterator begin = files.begin();
      std::map<std::string, std::pair<int, int> >::const_iterator end = files.end();
      int num = 21;
      for (; begin != end; ++begin) {
        if (num >= (*begin).second.first && num <= (*begin).second.second) {
          std::cout << "Found in " + (*begin).first + "\n";
          break;
        }
      }
      return 0;
    }
    
    /*Вариант - STL+BOOST*/
    #include <algorithm>
    #include <functional>
    #include <iostream>
    #include <map>
    #include <string>
    #include <utility>
    
    #include <boost/bind.hpp>
    
    int main(int argc, char* argv[]) {
      typedef std::map<std::string, std::pair<int, int> > map_type;
      map_type files;
      files["0.txt"] = std::make_pair(0, 7);
      files["1.txt"] = std::make_pair(8, 41);
      files["2.txt"] = std::make_pair(42, 50);
      int num = 21;
      map_type::const_iterator elem;
      elem = std::find_if(
                          files.begin(),
                          files.end(),
                          boost::bind(
                                      std::logical_and<bool>(),
                                      boost::bind(
                                                  std::less_equal<int>(),
                                                  boost::bind(
                                                              &map_type::value_type::second_type::first,
                                                              boost::bind(
                                                                          &map_type::value_type::second,
                                                                          _1)
                                                              ),
                                                  num),
                                      boost::bind(
                                                  std::greater_equal<int>(),
                                                  boost::bind(
                                                              &map_type::value_type::second_type::second,
                                                              boost::bind(
                                                                          &map_type::value_type::second,
                                                                          _1)
                                                              ),
                                                  num)));
      if (elem != files.end())
        std::cout << "Found in " + (*elem).first + "\n";
      return 0;
    }

    Смысл в том, чтобы с данным значением(пример 21) пройтись по таблице и найти в каком элементе данное число(21) находится в диапазоне std::pair<int, int>...
    Сначала написал вручную, но т.к. нужно было сделать с помощью STL, получилось сие чудо.

    Запостил: rudvil, 13 Мая 2010

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

    • прошлый пост был не очень удачен
      примерно на 800 каментов неудачный =))))
      Ответить
    • тут можно было обойтись одним предикатом для std::find_if и не извращаться так с бустом
      Ответить
      • Можно пример?, не представляю как..
        Ответить
        • struct find_pred {
          	int value;
          	find_pred(int num) : value(num) {}
          
          	bool operator() (std::pair<std::string, std::pair<int, int> > p) const {
          		return (value >= p.second.first && value <= p.second.second);
          	}
          };
          
          map_type::const_iterator found = std::find_if(files.begin(), files.end(), find_pred(21));
          
          if (found != files.end())
          	std::cout << "Found in " + found->first << std::endl;
          Ответить
          • Спасибо, как всегда всё проще чем кажется. =]
            Ответить
    • Этот код
                  писал
                                 Маяковский?
      Ответить
    • STL давно ассоциируется с говнокодом.
      Ответить
      • с++ это наверно единственный язык, абсолютно беспомощный без стандартной библиотеки или ее заменителей
        Ответить
        • Создавайте свои. Не стандартные :) Только к хорошему это не приведет.
          Ответить
        • А в чем собственно минус от того, что С++ делает упор на библиотеки, а не встраивание в язык ?
          Ответить
          • ну это очевидно же
            если язык правильно спроектирован, то встроенные средства дают базис для разработки, а в херово спроектированных приходится функциональность добирать костыликами
            Ответить
            • Хоть и не люблю цпп, но вступлюсь: как раз возможность реализовать столько фич через библиотеки, без жёсткого зашивания в язык, это плюс, как бы говорит о гибкости.
              Ответить
              • Гы, и на итхаппенсе холивар: http://ithappens.ru/story/3099
                Ответить
              • ну сколько можно то?
                уже стопицот раз объясняли что с++ абсолютно негибкий и нелогичный. у него даже нет средств расширения языка, чтоб хоть как-то это говно поправить
                Ответить
                • Но за него пока еще платят, а за лисп, хаскел или смоллток все еще _не_ платят.
                  Ответить
                  • Знаешь лисп, хаскелл и смолток?
                    Нет?
                    Ну так и не будут за них платить.
                    Ответить
                    • Ну да, ну да. Как найдешь конторку в Рашке, где нужны программеры на этих языках сообщи, ладно?
                      Ответить
                      • Какой смысл? Если даже собеседование не пройдешь.
                        Ответить
                        • Смысл в том, что может ты не будешь просто так бросаться словами, а покажешь реальную цену гуру-кодерам на настоящих языках.
                          Ответить
              • гибкость это хорошо, но не надо забывать об удобстве.

                так с кучейбиблиотек можно "очень гибко" писать на си или асме. но долго.
                Ответить
                • >>гибкость это хорошо, но не надо забывать об удобстве.
                  да о какой гибкости и удобстве речь то идет?
                  это что зомбирование с++'ом?
                  Ответить
                • С++ удобен чуть более чем полностью...
                  Ответить
                  • Если любимым языком у программиста является язык Blub, который находится где-то посередине «спектра мощности», то он может сравнить его только с языками, которые находятся в нижней части спектра. Он может взглянуть на язык COBOL и сказать: «Как кто-нибудь что-нибудь может делать на этом языке — у него же нет функции X. — X присутствует в языке Blub.» Тем не менее, для программиста будет непростой задачей просмотреть другую часть спектра. Если он начнет изучать языки, которые находятся в верхней части спектра, то они покажутся ему «непонятными», так как программист на языке Blub думает «на языке Blub» и, скорее всего, не видит полезности разнообразных функциональных возможностей более мощного языка программирования. Само собой разумеется, что это по индуктивности наводит на мысль о том, что, чтобы иметь возможность сравнивать все языки, надо поместить себя на верхушку спектра мощности.
                    Paul Graham
                    Ответить
                    • всякие тулзы, которые нужны для разработки, я пишу на питоне... он круче С#... писать на нем проще и быстрее... кода меньше... но он медленный... мне проще уговорить 1 человека купить мне проц помощнее и памяти побольше, чем затавить это сделать 1.5 миллиона потенциальных клиентов...
                      Ответить
                      • у вас комплексы насчет производительности?
                        иначе мне не понятно почему эта тема постоянно всплывает
                        Ответить
                        • он пишет софт под низкопроизводительные мобильные платформы

                          поэтому все срочно должны писать жутко оптимизированно, кто так не делает - тот дурак.
                          Ответить
                        • это у вас комплексы перед сложностями... если язык сложнее бейсика, надо обязательно пробежаться по всем форумам и блогам и назвать его говном...
                          Ответить
                          • сложность это круто? мне нравится писать на простых, прозрачных языках. это плохо?
                            Ответить
                            • это хорошо... я сам на них часто пишу... но они не везде применимы... есть места где важно количество клиентов, и чем их больше тем лучше... например Gamedev..
                              Ответить
                              • хм раз gamedev следовательно клиенты - это те самые сопливчики которые денежку на новую игрушку у пап просят? как же мы без таких клиентов проживем-то..
                                Ответить
                                • большая часть покупателей AAA игр - люди 18-26 лет...
                                  в казуале 25-40...
                                  Ответить
                                • И что теперь? Не будем писать игры? Может вообще ничего писать не будем, потому что это не удобно делать на Ъ-языках?
                                  Ответить
                                  • это была реплика на то что мои клиенты видите ли не так важны как у благословленных адептов с++

                                    а на чем удобней не тебе судить
                                    Ответить
                            • в треде про с++ говорить про такие языки - табу
                              Ответить
                          • при чем тут бейсики? и по каким форумам тут бегают?
                            неужели мания преследования святого STL спать не дает?
                            Ответить
                          • >надо обязательно пробежаться по всем форумам и блогам и назвать его говном...
                            Не реагируйте просто ни накого. Меньше будет бесполлезных комментов на говнокоде. Сами пользуйтесь, а другим не говорите. Всё равно не все способны понять вашу точку зрения. Те кто способны - с вами спорить не будут, а те кто не способены - будут всё время перечить. И да. Возможно вы не правы. А возможно они правы. Это что-то меняет? Нет...
                            Просто не останавливайтесь на одном языке. Изучайте все, выбирайте наиболее подходящий для данной конкретной задачи.
                            Спорить о приемуществах языка на другими бесполезно.
                            Часто язык выбирается поставленной задачей. Тоесть один больше подходит для одного, а другой для другого. Лучших нет. Закон сохранения гласит: "Потерял в одном, поимел в другом".
                            Ответить
                            • это здесь было повторено уже тысячу раз, но тем не менее находят наглость заявлять что с++ это silver bullet
                              Ответить
                              • в данный момент мы в теме о С++ и посмотри кто первый упомянул что С++ это говно?
                                Ответить
                                • началось с кривости STL?
                                  так это была лишь констатация факта
                                  Ответить
                                  • он решает поставленные перед ним задачи и довольно простыми способами... в чем его кривость?
                                    Ответить
                                    • "довольно простые способы"
                                      однако как хорошо завуалировано, что решения эти, что называется, сделаны бездумно и в лоб.
                                      И это Стандартная библиотека? что же ждать от нестандартных?
                                      Ответить
                                      • в продолжении спора не вижу смысла так как один из нас не разбирается в предметной области... и еще раз напомню, что от стандартной быблиотеки не требуется решений спецефических задач, на то она и стандартная...
                                        Ответить
                                        • один не разбирается, и он же не хочет признавать, что вселенная не вокруг с++ вертится
                                          Ответить
                                          • а я и не хочу чтоб вертелась... для С++ есть свои задачи, где без него совсем плохо...
                                            Ответить
                                            • многострадальный геймдев?
                                              хватит, вдоволь гомном накормили уже - даже такой простейшей вещи как алгебраические типы нет (причем слито по этому пункту показательно), чтож про остальное говорить
                                              Ответить
                                              • в С++ есть... приведи пример типа который тебе нужен, я поищу реализацию либо напишу если немного...
                                                Ответить
                                                • вот у товарища cfdev проблема, реши если сумеешь http://govnokod.ru/3218#comment26233
                                                  Ответить
                        • Потому что если у меня 400 мегагерц и 128 мегабайт памяти, то мне хочется запускать хорошо написанные программы.
                          Ответить
                          • хорошо написанные программы и с++ слабо коррелируют.
                            если уж приходится вылизывать код под лупой, то куда приятней это делать в чистом си или в каком-нибудь макроассемблере
                            Ответить
                            • Это да.
                              А с чего все началось, что у меня на телефоне большая часть прог написана на питоне.
                              Я негодуе! Я щитаю, что на C/C++ было бы быстрее!
                              Ответить
                              • а как же тогда трудоустроить обезьянок? они ж, убогонькие, pure c не потянут
                                Ответить
                                • Шо самое ужасное, что это коммунити пишет, забесплатно!
                                  На меня эта история повлияла драматичнейшим образом, отныне ни одного лишнего байта памяти, ни одного лишнего такта! Кто знает, где завтра будет работать твой код, вдруг на кофемолке уже, а не на кофеварке?!
                                  Ответить
                  • вы в каждом предложении троеточия ставите, это типа с++ная такая обречённость?
                    Ответить
                    • Это значит, что аргументы вызова могут быть любые и в любом кол-ве :))
                      Ответить
            • STL это не костыль, это библиотека...
              Ответить
              • >STL это не костыль, это просто говно

                слегка поправил
                Ответить
                • Неумение чем-либо пользоваться говорит в первую очередь об отсутствии навыков, а не о качестве того чем пользуются (пытаются пользоваться).
                  Ответить
                  • подписываюсь!
                    Ответить
                  • обсирать, не понимая - это одно
                    констатировать факт - абсолютно другое.
                    есть какие-либо свидетельства гениальности архитектурных решений STL ?
                    Ответить
                    • куча книг... Степанов, Саттер и тп... нужно понимать что стл создавалась как универсальное решение, поэтому грешить на ее производительность в специфических ситуациях глупо... это краткий пересказ цитаты ее автора...
                      Ответить
                      • мде) Степанов.. нашел кого в пример ставить
                        иди почитай что твой бог Степанов про ооп думает (небезосновательно)
                        http://neostalinist.livejournal.com/113278.html

                        >>Чтобы иметь дело с реальными проблемами, вам нужны многосортные алгебры -- семейства интерфейсов, которые простираются на многие типы.
                        >>Java сохраняет весь тот хлам, который я никогда не использую на C++ -- наследование, виртуальные функции -- объектно-ориентированное барахло -- и удалила вещи, которые я нахожу полезными.

                        в чем-то этот засранец прав

                        >>Оно начинается с классов
                        в чем-то не прав))
                        Ответить
                        • ну и хуйню он пишет
                          Ответить
                        • Степанов рулит однако... грамотно все объяснил... особенно про бапки понравилось... я пока того же мнения, но жизнь покажет...
                          Ответить
                          • степанов теоретик, в практике не смыслит. за пределы своего акадэмического отполированного мирка не вылазит. вот и несёт бред. его stl нигде не используют кроме как акадэмических исследований (т.е. нищебродских хождений вокруг да около с многозначительным видом). в геймдеве твоём любимом в серьёзном stl, например, не используется.
                            Ответить
                            • я использую на практике... в большинстве случаев он полностью устраивает... в рендере от него отказались в пользу интрузивных списков.... очень нехватает интрузивных списков, поэтому иногда приходится велосипедировать...
                              вот есть срач по поводу использования СТЛ в играх http://www.gamedev.ru/flame/forum/?id=85560
                              Ответить
                              • и разумеется STL там использовали так:
                                >Есть мапа, в нее заталкиваем обьектик каждъй (per-frame ofc), мапа по вертекс
                                >шейдеру. Елемент - другая мапа, по пиксель шейдеру. Чей елемент - толи вектор,
                                >толи опять мапа уже обьекта.
                                Ответить
                    • > констатировать факт - абсолютно другое.
                      И где факты ?
                      > есть какие-либо свидетельства гениальности архитектурных решений STL ?
                      Для начала то, что это СТАНДАРТНАЯ библиотека.
                      Ответить
          • ящитаю, что это большой плюс... я могу подобрать библиотеку наиболее подходящую для моей задачи или просто использовать STL...
            Ответить
            • вот в этом все плюсисты: подавай боярину библиотеку с игрищами и девками.
              Ответить
              • таких библиотек полно по всему инету, совместимых с STL(STLPort) и несовместимых (EASTL)... не хочешь пиши свою... мне не приходится сидеть и жаловаться что где-то кто-то имеет оверхед, я выбираю инструмент/библиотеку которая его не имеет...
                ах да, вы же живете в век Core i7 и 8Gb планок памяти... а вы не забыли что закон Мура для процов уже 2 года не действует? а программы становятся сложнее, а мобильные платформы все больше забивают рынок...
                Ответить
                • >таких библиотек полно
                  бритвы Оккама на них не хватает

                  >пиши свою
                  спс уж проживу без своих великов (тем более для плюсцов)

                  >вы же живете в век Core i7 и 8Gb
                  а вы все еще в девятнадцатом? когда возвратитесь машинку времени одолжите на выходные

                  >мобильные платформы все больше забивают рынок.
                  абсолютно монопенисуально на этот рынок
                  Ответить
                  • о чем спор? у вас 1 клиент, а у меня 1.5 миллиона... поэтому и требования к нашим продуктам разные, и соответственно спектр выбора средств разный...
                    Ответить
                    • спора нет
                      есть лишь слепая вера в мифическую серебрянопульность с++ которую следует развеять
                      Ответить
                      • показать все, что скрытоона не мифическая а вполне реальная...
                        Ответить
                        • охохо а вот это уже фанатизмом отдает, крепким таким фанатизмом
                          а теперь расскажите про светлое будущее, написанное на с++
                          Ответить
                          • зачем, если вы хоть немного разбираетесь в технологиях которые используете, вы должны видеть оверхед от их использования... пообщайтесь с консольщиками, и вам расскажут кучу историй о том как реорганизация данных увеличила производительность в несколько раз... в динамических языках многие из этих техник просто неприменимы...
                            Ответить
                            • >>многие из этих техник просто неприменимы...

                              все строго аналогично и в обратную сторону
                              реализуйте-ка алгебраические типы на 'святом с++'
                              Ответить
                              • это какие? 16 битный флоат устроит?
                                Ответить
                                • надеюсь это такой стёб иначе же вы потеряли всякий авторитет 'великого разработчика на с++'
                                  Ответить
                                  • я не великий... у меня всего 6 лет опыта... из них только 3.5 коммерческого использование... мне еще есть куда расти и чему учиться...
                                    Ответить
                                    • уже поздно отнекиваться
                                      но то, что гонор убавили - это хорошо
                                      Ответить
                              • кстати так нехватает.
                                вот например в геймдеве, я делаю простенький декларативный движок (или как модно называть goal-oriented programming), т.е., я не code monkey и я не пишу вручную в каждом событии обновления типа "передвинуть объект туда-то". У каждой сущности есть поведение, поведение сстоит из действий (класс Action). У действий много разных характеристик: линейный таймаут, функция таймаута, линейная скорость, функция скорости, таргет-точка в пространстве или таргет-динамически изменяющееся Position у IPosable, куча всяких условий. И цимес в том, что некоторые моменты взаимоисключающие. Например, линейный таймаут (простое float-значение) не может быть сразу вместе с функцией таймаута. У типа действия Sleep не может быть таргета. Приходится использовать кучу флагов, все характеристики в одну кучу. Наследование здесь неприменимо, ибо будет каша и много ненужнхы сущностей.
                                С алгебраич. типами данных было проще намного. В общем, в этом плане C# (на чём пишу) и с++ - убогие такие язычки. Но на C# писать "убого" намного удобнее и без лишних телодвижений. В с++ много отвлекаешься на посторонние вещи и логика ускользает. В итоге и пишет пушкофф не особо обременённые АИ всякие танчики для мобилок.
                                Ответить
                                • ох зря это написал)
                                  сейчас же будет безапелляционная заявка о 'серебрянопульности ' высшего языка жрецов геймдева c++
                                  Ответить
                                • С++ пригоден только для графулек (хотя куда пригоднее С+OpenGL, нахрен в рендеринге нужен ООП?)

                                  Вот опять тот же таймаут.
                                  текущее действие может быть 1) бесконечным (нет перехода к след. действию, пока не "заставят") 2) одномоментным (цель достигнута - идём дальше) 2) прерываемым, тогда нужно указать количество миллисекунд, при которых "терпение" уходит.

                                  Алгебраически это было бы что-то типа так:
                                  data Timeout = Infinite | Single | Concrete ms

                                  а в убогом с++ надо извращаться через интегеры и делать конвеншонз типа: 0 это одномоментный, -1 это бесконечный, а больше нуля - тогда прерываемый, столько-то миллисекунд. Детский сад.

                                  А теперь добавим сюда, что таймаут может быть плюс к тому же ещё и хитрой функцией. В с++ как там с лямбдами? Как вфигачить в существую архитектуру наравне с ms (можно сразу делать без ms, но лямбд-то нет!)? Флаги, флаги, флаги... Или десятки подклассов.

                                  Говно.
                                  Ответить
                                  • http://bishop-it.ru/wp-content/uploads/2010/03/learncin21day.png
                                    Ответить
                                    • ну да, есть у С++ такой недостаток... он сложен и ничего с этим не поделать... питон, пхп можно освоить за неделю, шарп и яву за месяц, на С++ уйдут годы...
                                      Ответить
                                      • в реплике пропущено одно важное слово: годы уйдут впустую
                                        Ответить
                                        • говнокодером можно быть и на пхп... все зависит от человека..
                                          Ответить
                                  • > нахрен в рендеринге нужен ООП?
                                    с ним удобнее... причем движков на С единицы, и они менее удобны...
                                    Ответить
                                    • >с ним удобнее
                                      я худею, вот это аргументация!
                                      ооп головного мозга опасно прогрессирует
                                      Ответить
                                      • С++ поддерживает ООП парадигму... что не так??
                                        Ответить
                                        • что не так??
                                          это еще один стеб (или опять потенциальный слив?)
                                          то, что в си++ гордо назвали ООП по сути кривовато спижженая версия ооп симулы (заметим, ооп и тут было не ахти)
                                          Ответить
                                          • оно мне нравится... есть еще вопросы??
                                            Ответить
                                            • - зачем кушаешь какашко?
                                              - оно мне нравится... есть еще вопросы??

                                              еще раз Пола Грэма перечитай и пристыдись
                                              Ответить
                                              • ооп шарпа абсолютно аналогично ооп С++... либо приведи список различий.
                                                Ответить
                                                • а что, кроме c++, с# и других плюсоподобных языков не знаем-с?
                                                  с c# опять мимо, ибо такое же говно, прочитай уже Грэма, спустись с плюсового пантеона, это уже начинает жалко выглядеть
                                                  Ответить
                                                  • хорошо, расскажи мне каким должен быть ООП...
                                                    Ответить
                                                    • ну хотя бы такой как в смолтоке, да в том же пистоне ооп куда логичней выглядит
                                                      Ответить
                                                      • что есть там чего нет в С++ или Сшарп? как и зачем это использовать? какие преимущества?
                                                        Ответить
                                    • > нахрен в рендеринге нужен ООП?
                                      > с ним удобнее...

                                      в каком месте? рендеринг это чисто процедурная парадигма.
                                      Ответить
                                  • > Алгебраически это было бы что-то типа так:
                                    data Timeout = Infinite | Single | Concrete ms

                                    > а в убогом с++ надо извращаться через интегеры и делать конвеншонз типа: 0 это одномоментный, -1 это бесконечный, а
                                    > больше нуля - тогда прерываемый, столько-то миллисекунд.

                                    enum в помощь... но я бы реализовал через абстрактный класс таймера, если типы таймеров могут различаться в рантайме или шаблон если тип определен заранее...
                                    Ответить
                                    • >enum в помощь
                                      ахаха) что не пост, то слив:
                                      не разобравшись в теме выдать 'гениальную' идею - плюсисты строго следуют своим курсом

                                      хоть бы в вике почитал для начала что есть АТД http://en.wikipedia.org/wiki/Algebraic_data_type
                                      Ответить
                                      • я вообще-то 3 варианта предложил... у каждого есть преимущества и недостатки...
                                        Ответить
                                        • каждый из трех не выдерживает никакой критики (с хорошей натяжкой возможно их применять в жестко зажатом контексте и это будет уже не АТД, а всего лишь эмуляция небольшого частного случая, причем любое отклонение - расстрел; а раз гибкости 0.0 то и не стоит напрягаться)
                                          Ответить
                                          • покажи как собираешься использовать вариант из С#?
                                            Ответить
                                    • > enum в помощь...

                                      я же говорю, кучи флагов. я должен флаги эти все вручную описывать. Имена им придумывать. variant-значения все в одну кучу хранятся. или через union'ы - куча потенциальных ошибок.

                                      > но я бы реализовал через абстрактный класс

                                      я же говорю, кучи подклассов. кучи ненужных сущностей. время впустую.

                                      не годится с++ для полноценной логики. в нормальных языках этой одной строчкой реализуется.
                                      Ответить
                                      • ты же говорил что тебе таймер нужен... а теперь вдрук ненужная сущньсть...
                                        Ответить
                                        • facepalm.cs

                                          таймер - нужная сущность. но вот стопицот подклассов таймера, чтобы реализовать то, что реализуется в нормальных языках одной-двумя строчками в пределах ОДНОГО типа - это лишние, ненужные сущности.
                                          Ответить
                                          • таймер - это сущность, сущность - это класс... приведи пример использования и я расскажу в чем ты не прав...
                                            Ответить
                                            • я уже показал пример.
                                              покажи реализацию "data Timeout = Infinite | Single | Concrete ms" на c++.
                                              Ответить
                                              • покажите как вы хотите это использовать...
                                                Ответить
                                      • бляя, cfdev и xXx_totalwar - ну вы и тролляки толстые:)
                                        можно попрекать плюсы отсутствием в них функциональщины (хотя новый стандарт внес дофига разных плюшек), и изо всех сил орать что С++ говно. только аналогично можно в любом языке найти недостатки. пхп - говно. питон - говно (ибо многозадачности толковой нет) и прочее-прочее тоже говно. и живете вы в говне и сами говнюки. и троллите всех, что б все тоже жили в говне. капец умнички.

                                        каждый язык под свою задачу. многие задачи (включая твой алгебраический тип) можно громоздко или менее громоздко (от квалификации программиста зависит) реализовать на с++. вопрос - надо ли? может можно найти другой вариант? то что ты пользуешься кучей флагов и не можешь включить мозг, что б придумать, как сделать проще - минус тебе, а не языку. я могу экскаватором пытаться выкопать ямко для картошки и кричать, какое экскаватор говно, даже картошку им не посадить.
                                        советую всем читающим этот феерический троллинг тупо забить на товарищей cfdev и xXx_totalwar
                                        Ответить
                                  • Ты ставишь знак равенства между c++ и c# - значит, ты не используешь множественное наследование. Почему? Политики по Александреску и mixin'ы - это то,что тебе надо.
                                    Ответить
                                    • я их использую... в с++ миксины очень даже симпатичны и юзабельны... хотя мне больше нравится когда их называют аспекты...
                                      Ответить
                          • вот достаточно популярный документ от сони http://research.scee.net/files/presentations/gcapaustralia09/Pitfalls_of_Object_Oriented_Programming_ GCAP_09.pdf
                            Ответить
                            • Error 404 - Page not found

                              да, это действительно крайне популярный документ
                              Ответить
                              • сори, закрался левый символ
                                http://research.scee.net/files/presentations/gcapaustralia09/Pitfalls_of_Object_Oriented_Programming_ GCAP_09.pdf
                                удалите пробел перед GCAP, он вставляется автоматически
                                Ответить
                • >закон Мура для процов уже 2 года не действует
                  Неа. Закон мура гласит, что-то типа каждый год удвоение числа логических эллементов. Действует он. Сейчас штампуют всё больше ядер.
                  Ответить
                  • но производительность от этого не растет...
                    Ответить
                    • О_о?
                      Как это? Много ядер - много профита при правильном использовании. Хотя на С++ это приходится делать вручную...
                      Ответить
                      • синхронизация в итоге хавает весь профит... в среднем от 2 ядер можно добиться около 160% производительности...
                        Ответить
                        • > синхронизация в итоге хавает весь профит

                          ну это в убогих языках типа с++. в языках, где данные immutable, синхронизация вообще не нужна (только доступ к файловой системе там, все дела). вот кстати напомнили, в чём ещё сосёт с++ - в распараллелировании.
                          Ответить
                          • причем сосет он со страшной силой:
                            любой бенч erlang VS с++ заканчивается полным фиаско последнего
                            Ответить
                            • erlang даже plain c заруливает http://www.sics.se/~joe/apachevsyaws.html
                              Ответить
                              • возьмем рыбу, обезъяну, слона, жирафа и муравья и сравним их способность залезать на дерево. бенч будет очень показательным. и любой бенч по залазинью на любое дерево повторит результаты.
                                плюсы - для своих задач. тем более лет им уже сколько. новомодные тенденции очень медленно в них просачиваются, что б сохранить совместимость с тоннами написанного кода. хотя б из уважения к сотням тысяч программистов не кидался какахами. ерланг крут в свой области, но только и исключительно в ней. и кстати, толковой доки по VM эрланга вообще в природе не существует. что это, повод кричат что эрланг - говно?
                                Ответить
                          • все зависит от аффтара кода...
                            Ответить
                            • ну да, ну да
                              какая это по счету отмазка в Кодексе Си-Плюсиста?
                              Ответить
                              • первая... все решают кадры... говнокодер говнокодит и на PHP, просто ущерб от этого минимален...
                                Ответить
                          • > ну это в убогих языках типа с++. в языках, где данные immutable, синхронизация вообще не нужна
                            она там неявная, то есть обязательная... естественно не без подводных камней...
                            если ты хочешь сказать что ее там проще использовать, то я с тобой полностью согласен... С++ - довольно низкоуровневый язык для таких задач, но опять таки не без профита...
                            Ответить
                            • БЕЗ профита
                              смотрим на бенч апач против yaws
                              Ответить
                              • ссылку на бенч, и ссылку на разницу в возможностях...
                                Ответить
                                • ссылку приводил уже
                                  http://www.sics.se/~joe/apachevsyaws.html
                                  Ответить
                                  • осталось только сравнить возможности, и особенно защищенность обоих...
                                    Ответить
                                    • одобрения просишь?
                                      ну сравни, я не против
                                      Ответить
                                      • сам сравни, ты же веришь в то что более качественный и быстрый продукт никому не нужен...
                                        я уверен что yaws не дотягивает по возможностям до апача и является менее защищенным и устойчивым к сбоям...
                                        Ответить
                                        • зато ты в божественность с++ веришь

                                          в общем утомил ты уже всех, пиши свои игрульки на плюсцах, только не ори про silver bullet
                                          Ответить
                                          • я вообще-то ниразу не говорил что это silver bullet... я и сам в это не верю... он очень сложен... но альтернатив нет...
                                            Ответить
                                            • > он очень сложен

                                              в каком месте он сложен? алогичен, неортогонален - да, сложен - нет.

                                              что сложного в ручном перебирании кирпичиков и считании, что это ООП и круто? вот какой-нибудь ОКАМЛ - "сложен", да.
                                              Ответить
                                              • вы так и не написали, как собираетесь пользоваться вашим таймером...
                                                мне важны функции апдейта таймера, проверки срабатывания, создание, ну и еще фич каких нибудь...
                                                Ответить
                                                • > вы так и не написали, как собираетесь пользоваться вашим таймером...
                                                  мне важны функции апдейта таймера, проверки срабатывания, создание, ну и еще фич каких нибудь...

                                                  не понял, что вы хотите.

                                                  в моей реализации в том-то и дело, что никакие функции и "фичи" не нужны. программист декларирует поведение объектов (можно хоть в XML описать), а далее система сама расчитывает как объекты будут взаимодействовать (двигаться и т. п.). и я говорил не про таймеры, а про таймаут, это только одна из характеристик, что вы на ней зациклились.
                                                  Ответить
                                                  • я прошу куски кода...
                                                    где описываются Infinite | Single | Concrete?
                                                    как проверить на срабатывание?
                                                    Ответить
                                                    • Я прошу описать простейший алгебраический тип на с++.

                                                      "data Timeout = Infinite | Single | Concrete ms"

                                                      - это и описание типа, и определение конструкторов.

                                                      Infinite, Single - это как бы и подклассы Timeout, и сразу же энумы и конструкторы, а Concrete ms какбы конструктор с аргументом, а ms это уже как бы сразу и поле объекта.

                                                      Как сделать то же на С++? На C# выходят тонны мусора.
                                                      Ответить
                                                      • то есть где-то есть описание class Infinite; class Single; class Concrete?
                                                        Ответить
                                                        • в этой строчке уже описаны эти "классы". их можно уже использовать.
                                                          Ответить
                                                      • чистейшую функциональщину в плюсы еще не ввели.

                                                        если делать в лоб (например через всякие boost),то выйдут тонны мусора. или пиши на функциональном языке, или думай на императивном. если думать на функциональном (в терминах АТД), а писать на императивном - тогда и получаются крики что язык - говно. или инструмент поменяй или способ работы с ним. пока что говно - это твой мозг
                                                        Ответить
                                            • АХУЕЛ ЧТО ЛИ??
                                              нет, ну так меня довести мало кто может
                                              носом ткнуть в твой пост?
                                              Ответить
                                              • спасибо...
                                                ткните пожалуста...
                                                Ответить
                                                • них"ра себе наглость
                                                  - есть лишь слепая вера в мифическую серебрянопульность с++ которую следует развеять
                                                  - она не мифическая а вполне реальная...

                                                  http://govnokod.ru/3218#comment26180

                                                  только не думай увиливать и сказочки рассказывать, что это все проделки злобных хацкеров
                                                  Ответить
                                                  • это фразы вырванные из контекста... если учесть пост выше вашего, то станет понятно что на клиентских компьютерах С++ помогает выжать максимум производительности, чего не могут его аналоги... мы говорили про 1.5 миллиона игроков, которые не хотят докупать вашу дешевую память... С++ не подходит абсолютно для всех задач, но есть задачи в которых у него нет конкурентов, и он там является серебрянной пулей не по своей воле...
                                                    Ответить
                                                    • я же сказал, и не думать увиливать
                                                      сохрани хоть какое-то подобие чести
                                                      Ответить
                                                      • моя честь в данном случае сохранена... если вы хотите чтоб за вами было последнее слово, так и скажите, не надо пытаться придираться к словам...
                                                        да и судя по вашим попыткам, вера в серебрянопульность ваших технологий у вас больше... я неоднократно упоминал про то что для динамических языков есть свои задачи и я ими пользуюсь...
                                                        Ответить
                                                        • мне на 'последние слова' строго положить, ибо не скован примитивными догмами.
                                                          пользуйтесь своими динамическими языками, мне это уже давно не интересно
                                                          Ответить
                            • > она там неявная, то есть обязательная

                              с какой стати? в таких языках конкретный объект локален ВСЕГДА только для одного потока. синхронизировать там попросту нечего.
                              Ответить
                              • в С++ тогда тоже нечего синхронизировать... синхронизировать нужно разделяемые данные, то есть опять борьба с мельницами...
                                Ответить
                                • > в С++ тогда тоже нечего синхронизировать... синхронизировать нужно разделяемые данные

                                  а я тебе говорю, что в таких языках и разделяемых данных нет. сколько ещё раз повторить?
                                  Ответить
                                  • не стоит даже время тратить, никакие аргументы плюсерам не интересны
                                    Ответить
                                  • серьезно? а как потоки получают результаты работы друг друга?
                                    Ответить
                                    • Деревья супервизоров говорит о чем-нибудь?
                                      Ответить
                                      • и они вообще-вообще не синхронизируются?? прям божественные технологии... результат один, потоков много и никто никому ниче не должен...
                                        Ответить
                                        • Мда, ситуация и правда патовая. Не вижу смысла объяснять то, что в оф.документации находится. Если снизойдете, то она находится тут http://erlang.org/doc.html/
                                          Ответить
                                          • я вообще-то рассказал как оно все на низком уровне... конечно язык может (в вашем случае должен) ограждать пользователя от этого, но это сосвем не значит что где-то в глубине ядра языка этого нет...
                                            когда-то давно, когда я учился в универе, профессор Святный нам сказал, что только в идеальном случае задача T выполнится на n процессорах за время T/n... но таких случаев не бывает, так как сбор результатов и синхронизация всегда требует времени... у любой реально существующей задачи есть предел при котором увеличение количества процессоров в 2 раза не приведет к увеличению производительности...
                                            Ответить
                                            • в случае с функциональными языками, если допустим, что потоки скидывают свои результаты в общую разделяемую синхронизируемую память (для последующей конвеерной передачи далее), это никак не будет 40%, о котрых вы говорили. это меньше < 1%. Вот если поток ВО ВРЕМЯ своей работы постоянно обращается к общей памяти - то да. но в функциональных языках такого нет.
                                              Ответить
                                              • я говорил о среднем значении ускорения на различных типах задач... то есть выбрали наиболее общие задачи, распараллелили и посмотрели на ускорение... для всяких Куд и Симдов естественно выбирают задачи которые достаточно хорошо параллелятся (например попиксельная обработка изображений), но вот обработку XML несильно распаралелишь...
                                                Ответить
                                                • бля, да вы заебали сравнивать мягкое с зеленым.
                                                  функциональный язык с императивным на задачах, под который функциональный специально разрабатывался. вот же ж тролли. а erlang otp и vm ты будешь всем геймерам на машины ставить, что б у них проги на ерланге летали? или на мобилки запихивать? или на все shared hosting'и?
                                                  если популяризировать ерланг такими методами, то от него вообще все отвернуться. мне он очень нравится как язык, но в данном случае мне за него стыдно.
                                                  Ответить
                                            • Ты давно универ окончил?
                                              Ответить
                        • >>>в среднем от 2 ядер можно добиться около 160% производительности...

                          СКОЛЬКО?!
                          Ответить
                          • 1 ядро 100% - 2 ядра - 160%... че тут неясного...
                            Ответить
                            • о майн гот
                              с кем мы общаемся. мало того что ядра в процентах измеряет, так еще с намеком на бред
                              Ответить
                              • 100% это производительность программы на одном ядре... 160% производительность той же программы на 2 ядрах... то есть не 200 а 160... 40% ушло на синхронизацию... естественно что бывают задачи выигрыш в которых может быть 200%, но есть задачи которые тупо не паралелятся...
                                Ответить
                                • ну сморозил чушь, чтож такого.
                                  оправдываться не стоит, уже нечего оправдывать, просран авторитет
                                  Ответить
                                • > 40% ушло на синхронизацию

                                  это на какую?
                                  Ответить
                                  • в практически любой задаче есть данные которые нужно синхронизировать, в простейшем случае это результат...
                                    если в задаче не нужно синхронизировать результат то С++ тоже не будет синхронизации... но опять таки, есть совсем не гипотетический процессор у которого есть кеш который процессору прийдется синхронизировать (хоть это будет и неявный оверхед), а как известно, работа с памятью является довольно тяжелой операцией (прув я уже выкладывал)...
                                    Ответить
                    • >но производительность от этого не растет...
                      Про производительность Мур ничего не говорил. Там говорилось именно о числе элементов. Это потом его кто-то перефразировал... В рамках одного ядра извратитель закона Мура был не прав. Действительно производительность не растёт. Но при верном распределении нагрузки на ядра - растёт. Большинство задач имеет многоядерные решения, хотя и не все.
                      Ответить
                      • Как много было интересного до меня... Листая, я переворачиваю страницы истории. Я бы и тогда вас убивал.
                        Ответить
        • Так и задумано.
          Ответить
          • немного перефразируем и получим что вы признали следующее:
            - С++ не в состоянии решить никаких, представленных перед ним задач
            - Так и задумано

            и на какой болт такой язык нужен?
            Ответить
            • > - С++ не в состоянии решить никаких, представленных перед ним задач
              как бе количество программ написанных на С++ говорит об обратном...
              Ответить
              • ну разумеется) ведь миллионы мух не могут ошибаться
                Ответить
                • отличный аргумент... говно бывает двух видов: юзабельное и неюзабельное... в данном случае С++ говно, но во многих сферах его использования он просто не имеет альтернатив и список вакансий намекает что не только в геймдеве (вот пруф http://www.linkedin.com/groupAnswers?viewQuestions=&gid=86998&fo rumID=5&sik=1274098375619&goback=%2Ehom удалите лишние пробелы если не работает)...
                  Ответить
                  • >>С++ говно
                    что я слышу! неужели нотки разума проскочили через потенциальный барьер фанатизма? доктор, это чудо.

                    >>он просто не имеет альтернатив
                    в природе нет задач которые лучше решать на с++ и только на нем, выбор есть всегда (разумеется это неверно в случае ограниченности развития, которое остановилось на с++, но фанатиков в чем-то убеждать гиблое дело)
                    Ответить
                    • для того чтоб выжать максимум производительности при максимуме удобств нет лучше выбора чем С++... не забываем что мощные процы и гектары памяти есть не в каждом нетбуке, планшете, телефоне, консоли и тд...
                      к стати что за софт вы пишете??
                      Ответить
                      • откуда ж там удобства? фанатейте хотя бы молча, не распространяйте пагубные привычки.
                        пишем в основном на erlang
                        (highload разумеется), был бы с++ уже б повесился
                        Ответить
                        • сервера?
                          Ответить
                          • инфраструктуру
                            (и с какой стати должен делится конфиденциальной информацией..)
                            Ответить
                            • отличный спор глухого со слепым... приложения для настольных систем на ерланге вообще существуют?
                              Ответить
                              • бывают, лично писал и пользовался, но это не эрланговый уровень спору нет
                                поэтому я за выбор оптимального инструмента под задачу
                                Ответить
                      • как прокомментируете:

                        http://tirania.org/tmp/xpqetp.png
                        Ответить
                        • там все сказано, моно использует Simd а С++ doubles...
                          хотелось бы увидеть еще версию с питоном на этом http://www.top500.org/system/details/10184 .
                          первая строчка немного не из той оперы... для теста актуальны только 2 и 3, либо использование simd в C++...
                          Ответить
                    • >неужели нотки разума

                      Ну ёпта, те, кто пишет на c++ естественно знают, что у него местами чрезвычайно уродливый синтаксис, и не хватает кучи вкусного.

                      >в природе нет задач которые лучше решать на с++ и только на нем, выбор есть всегда

                      Да? И на чём предлагаешь писать игры? Перемешать питон, паскаль, си, асм и кодогенерацию на коммон лиспе в одном проекте? Уж лучше просто взять плюсы. В них по крайней мере при надобности можно отказаться от ненужного.
                      Ответить
                      • что же тогда логику на скриптовых яп пишут?
                        ну и шлепали бы на плюсах, но нет, подавай им Lua
                        Ответить
                        • скриптовые яп для геймдизайнеров, чтоб разгрузить программистов...
                          а еще модификация без перекомпиляции, подгрузка скриптов на лету и тп плюшки...
                          Ответить
                          • > а еще модификация без перекомпиляции, подгрузка скриптов на лету и тп плюшки...

                            в моно это всё возможно! о да!
                            и легко эмбедится.
                            Ответить
                        • То-то эта логика тормозит и глючит. Особенно глючит, с этим в геймдеве вообще беда. Зато пишется легко и без напрягов, да. И похуй что каждый третий игрок находит баг в скриптах.
                          Ответить
                          • а в с++ ясен куй не может быть багов, угу
                            и между прочим, идиот, у луа мощная регистровая ВМ с JIT (написано на православных сях)
                            Ответить
                            • Компилятор c++ помогает искать баги, а недокомпилятор луа - нет.
                              Ответить
                              • твое домашнее задание - осиль 'недокомпилятор' lua на своих плюсцах напейсать, потом вякай
                                Ответить
                            • Теплый ламповый заук?:)))

                              Сорри, не сдержался, прошу пардону!
                              Ответить
                          • Луа придуман для геймдизайнеров, эти люди обычно программируют методом копипаста и другими не сильно напрягающими моск методами... Луа отлично способствует говнокоду, никак не напрягая в плане ошибок и быстродействия... если скрипт не успевает отработать за 1 кадр, то можно отложить работу на следующий, никто не заметит если объект примет решение на 50 мс позже, главное что примет... а низкий фпс заметят все...
                            Ответить
                            • > никто не заметит если объект примет решение на 50 мс позже, главное что примет..

                              ага, это было очень заметно в обливионе. можно целую вечность ждать, пока скрипт не сообразит (в основном это завершения квестов/триггеры квестов).
                              Ответить
                    • напиши драйвер на чем-нибудь кроме C/C++ засранец ты неграмотный
                      Ответить
                      • вот ты мудачина)
                        я про это всегда и говорю: инструмент должен выбираться под задачу
                        Ответить
                      • http://ru.wikipedia.org/wiki/Microsoft_Singularity
                        Будующая Windows 8 написан на C# и драйвера для неё тоже будут на нём. Удволетворён? Нэ?
                        Теперь за драйверо писательство можно будет посадить обезъян. У нас будут дрова на все времена.
                        Ответить
                        • "Будующая Windows 8 написан на C# и драйвера для неё тоже будут на нём." - а еще через некоторое время поставим финскую раковину (с)
                          Ответить
              • > - С++ не в состоянии решить никаких, представленных перед ним задач
                > как бе количество программ написанных на С++ говорит об обратном...

                хаха, на коболе наверное миллиард программ написано. Я бы не сказал, что это йтакой замечательный язык. кристальное, чистейшее говнецо.
                Ответить
                • и многими из них вы пользуетесь?? а программ на С++ у вас наверное большинство..
                  Ответить
        • c++ - это один из языков, которые работают без стандартной библиотеки
          Ответить
    • ээээ народ хватит - уже 150 нахерячили, с таким темпом запросто мой предыдущий пост обгоните <_<
      Ответить
      • цирк уродцев был популярен во все времена
        Ответить
      • Пусть жгут ещё! Дюже интересно!
        И полезно. Во всяком случае для меня.
        Ответить
    • Знатный срач.
      Ответить

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