1. Pascal / Говнокод #8664

    +102

    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
    function naq(a:integer;n:integer;m:integer):string;
    var astr:string;
    begin
      astr:=inttostr(a);
         case m of
           1: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*1)+'*p^'+inttostr(n+1);
           2: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*2)+'*p^'+inttostr(n+1)+'+'+inttostr(a*1)+'*p^'+inttostr(n+2);
           3: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*3)+'*p^'+inttostr(n+1)+'+'+inttostr(a*3)+'*p^'+inttostr(n+2)+'-'+inttostr(a*1)+'*p^'+inttostr(n+3);
           4: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*4)+'*p^'+inttostr(n+1)+'+'+inttostr(a*6)+'*p^'+inttostr(n+2)+'-'+inttostr(a*4)+'*p^'+inttostr(n+3)+'+'+inttostr(a*1)+'*p^'+inttostr(n+4);
           5: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*5)+'*p^'+inttostr(n+1)+'+'+inttostr(a*10)+'*p^'+inttostr(n+2)+'-'+inttostr(a*10)+'*p^'+inttostr(n+3)+'+'+inttostr(a*5)+'*p^'+inttostr(n+4)+'-'+inttostr(a*1)+'*p^'+inttostr(n+5);
           6: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*6)+'*p^'+inttostr(n+1)+'+'+inttostr(a*15)+'*p^'+inttostr(n+2)+'-'+inttostr(a*20)+'*p^'+inttostr(n+3)+'+'+inttostr(a*15)+'*p^'+inttostr(n+4)+'-'+inttostr(a*6)+'*p^'+inttostr(n+5)+'+'+inttostr(a*1)+'*p^'+inttostr(n+6);
           7: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*7)+'*p^'+inttostr(n+1)+'+'+inttostr(a*21)+'*p^'+inttostr(n+2)+'-'+inttostr(a*35)+'*p^'+inttostr(n+3)+'+'+inttostr(a*35)+'*p^'+inttostr(n+4)+'-'+inttostr(a*21)+'*p^'+inttostr(n+5)+'+'+inttostr(a*7)+'*p^'+inttostr(n+6)+'-'+inttostr(a*1)+'*p^'+inttostr(n+7);
           8: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*8)+'*p^'+inttostr(n+1)+'+'+inttostr(a*28)+'*p^'+inttostr(n+2)+'-'+inttostr(a*56)+'*p^'+inttostr(n+3)+'+'+inttostr(a*70)+'*p^'+inttostr(n+4)+'-'+inttostr(a*56)+'*p^'+inttostr(n+5)+'+'+inttostr(a*28)+'*p^'+inttostr(n+6)+'-'+inttostr(a*8)+'*p^'+inttostr(n+7)+'+'+inttostr(a*1)+'*p^'+inttostr(n+8);
           9: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*9)+'*p^'+inttostr(n+1)+'+'+inttostr(a*36)+'*p^'+inttostr(n+2)+'-'+inttostr(a*84)+'*p^'+inttostr(n+3)+'+'+inttostr(a*126)+'*p^'+inttostr(n+4)+'-'+inttostr(a*126)+'*p^'+inttostr(n+5)+'+'+inttostr(a*84)+'*p^'+inttostr(n+6)+'-'+inttostr(a*36)+'*p^'+inttostr(n+7)+'+'+inttostr(a*9)+'*p^'+inttostr(n+8)+'+'+inttostr(a*1)+'*p^'+inttostr(n+9);
         end;
      end;

    Лень было искать алгоритм раскрытия (1-q)^n

    Запостил: rob1nzon, 28 Ноября 2011

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

    • проблема была в нормальном вычислении n! / (k! * (n-k)!) и минуса при конкретных членах?
      Ответить
      • Даже если и так, то треугольничек всё равно можно сократить до линии.
        Ответить
        • спасибо кэп, поэтому я и написал "нормальном"
          Ответить
        • Тарас, а что, в дельфи нет другого способа дописать число в строковом представлении, чем каждый раз использовать inttostr?
          а если нужно использовать локаль пользователя? (скажем, разделитель .,)
          Ответить
          • Можно написать функцию i2s, будет короче.
            А, ещё же есть format(s, [args]), по аналогии с сишкофункцией. Даже с проверками типа, только проверки все в период выполнения, а жаль.
            Ответить
            • может ты тогда назовешь минусы потокового подхода ненавистного С++, в котором как известно можно сделать
              // std::ostream & o
              o << somestring << somenumber << somedate << someuserclass;
              я даже не акцентирую, какого конкретно типа каждый из аргументов, может somenumber это пользовательский класс для комплексного числа

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

                  delphi:
                  astr:=inttostr(a);
                  naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*2)+'*p^'+inttostr(n+1)+'+'+ inttostr(a*1)+'*p^'+inttostr(n+2);

                  C++:
                  // std::ostringstream oss;
                  std::string const p = "*p^";
                  oss << a << p << n << '-' << (a*2) << p << (n+1) << '+' << a << p << (n+2);
                  Ответить
                  • Ты format сравнивай с потоками, а не говнокод. Или ты считаешь потоки сравнимыми с данным говнокодом?
                    Ответить
                    • ты конечно аноним
                      а я программист который каждый день работает за денюшку на С++
                      поверь, формат удобней потоков только когда надо выводить числа/строки с конкретными размерами полей и заполнением/выравниванием, хотя потоки и это позволяют
                      обычно как раз надо вывести в поток что то переменной длины
                      строку лога или кусок xml
                      как замена сишному небезопасному printf есть boost::format, используется реально крайне редко
                      так что не аргумент
                      Ответить
                      • Тогда тебе придётся взять последнюю версию Дельфи, в которой можно перегружать операторы. Можешь сделать поток с перегруженным "+"
                        Ответить
                        • Это будет не красиво:
                          stream+var1+var2+lol;
                          Ответить
                          • И я не уверен, что это не отметёт оптимизатор, как выражение, результат которого "не используется".
                            Ответить
                        • shl перегружай, век мидгаарда не видать!
                          Ответить
                          • Истинный воин должен стремиться в асгард к Одину и прелестным валькириям. Для этого нужно умереть с оружием в руках, в нашем случае это клавиатура
                            Ответить
                    • давай сравним format с потоками
                      мне надо вывести
                      log << "received " << bytes_count << " bytes from client " << socket.endpoint() << std::endl;

                      в понимаю, что дельфишном format это будет что то типа (внимание, псевдокод)
                      log := format('received %u bytes from client %s\n', bytes_count, socket.endpoint().ToString);

                      отлично
                      ой, неплохо было бы еще ошибку вывести
                      переписываем С++
                      log << "received " << bytes_count << " bytes from client " << socket.endpoint() << " with error " << ec << std::endl;
                      отлично
                      теперь дельфи
                      log := format('received %u bytes from client %s with error %s\n', bytes_count, socket.endpoint().ToString(), ec.ToString());
                      дельфепроблемы - приходится изменять код в 2 местах, а не в 1, error-prone
                      дельфепроблемы - каждый объект обязан иметь метод ToString
                      Ответить
                      • > дельфепроблемы - каждый объект обязан иметь метод ToString

                        Крестопроблемы: каждый объект должен уметь выводить себя в поток. Так что, имхо, оверхед примерно одинаковый.
                        Зато объект с ToString можно и на компонент гуя вывести, а в крестах объект, умеющий себя выводить в поток, не сможет вывести себя на гуй.
                        Ответить
                        • orly?

                          std::string s = boost::lexical_cast<std::string>(myobjec t_which_can_into_stream_only);

                          насколько просто сделан lexical_cast и сколько строк кода заняла бы твоя собственная функция оставлю тебе в виде домашнего задания
                          Ответить
                          • >boost::lexical_cast<std::string>
                            фу, бля, костыль...
                            Ответить
                            • костыль?
                              template <class T>
                              std::string tostring(T const & t)
                              {
                                  std::ostringstream oss;
                                  oss << t;
                                  return oss.str();  
                              }

                              принимать натощак
                              Ответить
                              • Ты начал с того, что на дельфи код в некоторых случаях получается чуть длиннее. Когда тебя ткнули носом в достоинства ToString, ты начал изобретать велосипеды, компенсирую недостаток. Ну-ну...

                                Ещё раз сравни оба подхода, и подумай, почему в современных платформах используется ToString: единообразие применения объектов где угодно. Без дополнительных телодвижений.
                                Ответить
                                • это был ответ на твою реплику, что если объект в С++ умеет выводить себя в поток, то его невозможно показать в гуй
                                  я тебе показал, что если объект выводит себя в поток, абсолютно никаких проблем показать его в гуй, использовав tostring(obj), причем показать его в нужной локали, а не в той, в которой умный школьник его задумал, когда писал метод ToString
                                  но раз тебя метод ToString так отлично устраивает, я тебе рекомендую в дельфи вызвать метод ToString у переменных типа int, double и даже string
                                  ой... нельзя чтоли? как же так
                                  и да, оба подхода уже сравнены:
                                  http://govnokod.ru/8664#comment122893
                                  Ответить
                                • Нет, потому, что в «современных платформах» оверхед создания строки (в динамической памяти) и копирования её в поток игнорируют.
                                  Ответить
              • >может ты тогда назовешь минусы потокового подхода ненавистного С++
                4)Куча лишних вызовов функций.
                Ответить
                • поясни, в чем состоит куча и каких лишних
                  Ответить
                  • Это все превращается в:
                    stream.operator<<(stream, param1).operator<<(stream, param2).operator<<(stream, param3).operator<<(stream, param4)... .operator<<(stream, param100500);
                    Ответить
                    • а как ты думаешь во что превращается вывод каждого аргумента из дельфишного формат?
                      а как ты думаешь насколько эффективно по памяти .operator <<().operator <<() для потока и operator +(), operator+(), operator+() для дельфишной строки?
                      Ответить
                      • > а как ты думаешь насколько эффективно по памяти .operator <<().operator <<() для потока и operator +(), operator+(), operator+() для дельфишной строки?

                        Одинаково.
                        Ответить
                        • т.е. когда в дельфи делается stringobj + stringobj, то не создается еще один string, а результат записывается в первый аргумент?
                          Ответить
                          • Чтобы получить эквивалент плюсовым потокам нужно записывать так:
                            http://govnokod.ru/8664#comment122833
                            Ответить
                          • Когда пишешь s:=s+s2, то да.
                            Когда пишешь s:=s1+s2+s3+...+sn, то всё пишется в один временный объект, общий для всех, квадратичного расхода памяти нету.
                            Ответить
                            • ты проверил?
                              а что будет, если s1, s2, s3... - объекты моего типа mystring?
                              Ответить
                            • >s:=
                              Лишнее копирование.
                              Ответить
                              • Авотхуй
                                И даже не потому, что там коровьи строки, а потому, что функция сложения строк знает адрес приёмника.
                                Ответить
                • А где номер 3?
                  Вспоминается рассказ про то, как русские школьники запустили в американскую школу трёх свиней, на спинах у которых были нарисованы цифры 1, 2 и 4, после чего пиндосы два месяца искали свинью под номером 3...
                  Ответить
                  • >А где номер 3?
                    Это для внушительности большего числа пунктов.
                    Ответить
                    • ну т.е. мы выяснили, что при работе с потоками лишних вызовов функций нет, да и по памяти потоки намного эффективнее постоянного создания временных строк из суммы двух предыдущих
                      ну и позволяют легко и безопасно менять поведения вывода объектов, не изменяя сами объекты
                      Ответить
                      • В Дельфи нет постоянного вызова суммы для двух строк. Там сразу вызывается функция суммы для массива.
                        У тебя какая-то нездоровая кукареку-активность проявилась в попытках найти говнокод в строках Дельфи. К чему это?
                        Ответить
                        • как к чему
                          как раз к твоим нападкам о том, что С/С++ говно, а дельфи идеал
                          у нас в конторе есть дельфишный отдел, пишут на дельфи 7, собирают версии bat-файлами, сложное управление солюшеном из нескольких проектов, о каких бы то ни было переходах на распоследние версии RAD с перегрузкой операторов, шаблонами и контейнерами/паттернами речь никогда не зайдёт
                          трагичное зрелище
                          если бы не огромная куча UI приложений, написанных на VCL и куче компонент, которые надо постоянно дописывать, дельфишного отдела бы давно не было
                          Ответить
                          • > конторе есть дельфишный отдел, пишут на дельфи 7
                            слоупоки и/или жлобы

                            > собирают версии bat-файлами
                            контора уровня ЖЭК, не могут нанять хотя бы одного, кто can into make?
                            Ответить
                            • расскажи это заказчику, почему ему надо переставить весь АРМ, а не конкретный компонент, на 100500 рабочих местах лишь потому, что дельфишный отдел перешёл на новую версию студии, и почему ему теперь надо собирать комиссию по приемке не конкретного компонента, а всего комплекса ПО

                              расскажи в конторе какого уровня работаешь ты, покупают ли тебе каждый новый билд каждого ПО, которое ты используешь для работы?
                              Ответить
                              • > расскажи в конторе какого уровня работаешь ты
                                пушков, ты?

                                > покупают ли тебе каждый новый билд
                                покупают, хотя я не настаиваю на bleeding edge
                                Ответить
                                • сказал человек, у которого в хистори 50% постов о паскале и 50% о javascript
                                  ну расскажи, какой комплект софта тебе закупают и сколько он стоит, купили ли тебе уже последнюю RAD Studio, если купили, то почему ты не уверен, парсит ли дельфи разделитель дробной части? значит не дельфи... ой я запутался
                                  какое сверхмощное IDE тебе купили для js?
                                  Ответить
                                  • > какое сверхмощное IDE тебе купили для js
                                    WebStorm?
                                    Ответить
                                    • не подсказывай
                                      бухгалтер его ЖЭКа на обеде, так что подождём
                                      Ответить
                                      • давай сразу перейдем к мерянью машинами и гольфклубами :-Р
                                        Ответить
                                        • Лучше мерейтись:
                                          с==3
                                          Ответить
                                        • ну ты первый начал про жэк
                                          когда ты приходишь в паспортный стол или налоговую, или покупать билет в ржд или метро, или еще овер 9000 мест, где стоят убогие компьютеры максимум пентиум4 с запущенными всевозможными АРМами синенькими - думаешь они все делаются на передовых языках передовыми средствами 2012 года?

                                          я думал ты похвалишься "вы все неудачники, моя контора <ХХХ> делает охуенные проекты передовыми инструментами за много миллионов и я вас всех в рот ебал", а мы бы за тебя порадовались
                                          Ответить
                                          • я вас всех в рот ибал
                                            Ответить
                                          • > ну ты первый начал про жэк
                                            и судя по реакции попал в точку.

                                            > я думал ты похвалишься
                                            а хрен ли тут хвалиться? что не работаю на проебись-шаражку, где хорошие компы дронам не выдают, чтобы не спиздили?

                                            > паспортный стол или налоговую, или покупать билет в ржд или метро
                                            и у первой группы и у второй бабло есть
                                            Ответить
                                            • ну раз есть бабло, но всё так же пишут на дельфи 7, то что то у тебя не стыкуется в логике, может ты что то упускаешь?

                                              типичная позиция школьника-максималиста, который оценивает весь мир в бинарной логике
                                              Ответить
                                              • Какой же ты, Пушков, неизобретательный. Сначала "первый начал", теперь "школотой" ходишь.

                                                Не заинтересован менеджмент в вашей производительности труда. Пока до дыр свои АРМ не протрете не будет апгрейда. Это совпром и ГУП, детка.
                                                Ответить
                                                • всё скучаешь по своему анальному другу пушкову?
                                                  ищи его на гейдеве, это как раз профессиональный ресурс твоего уровня
                                                  Ответить
                                                  • Объект говорит как пушков, сыплет фактами из "изучаем дельфи" конца XX века как пушков, следовательно объект является пушковым.
                                                    Ответить
                                                • причем здесь менеджмент
                                                  вопросы об апгрейде инструментария ставит начальник группы начальнику отдела, затем вопрос поднимается выше до департамента, а уже начальник департамента способен эти вопросы ставить перед коммерческим директором, которому лишь надо знать сколько в этом году дать бабла на ПО на весь департамент

                                                  ограничений никаких нет, нет желания начальника группы дельфистов, который не ставит вопрос самостоятельно и не отвечает на ежегодное письмо "а что нам надо продлить из лицензий на следующий год, а что купить", там молодых дерзких и успешных юношей, как ты, нет, они 10 лет пишут на дельфи 7 и у них всё работает, каждое ТЗ заказчика исполняется в срок - вот они и не хотят переходить на передовые ИДЕ с новыми багами и кучей новых проблем с развертыванием и сдачей заказчику

                                                  если для тебя эта вертикаль кажется слишком напыщенной, или к тебе сам коммерческий директор приходит спросить перед обедом "слушай давай твой джавоскрипт на паскале мы теперь будем писать вот в этом, я уже купил, уверен тебе понравится", то мне нечего тебе сказать - такие вопросы ставятся снизу, от исполнителей работы
                                                  и если тебе, как стажеру, уже всё купили и настроили, даже асичьку, это не значит, что так случилось по личному желанию директора
                                                  повзрослеешь - поймешь
                                                  Ответить
                                                  • О, виликий гуру! У тебя баттхерт от осознания мысли о том, что работаешь на шаражку, где держат на окладе дельфистов-слоупоков, которые боятся на новую студию мигрировать?

                                                    Еще остались в природе те, которые боятся слезть с шестой студии?
                                                    Ответить
                                                    • все проекты делаются на 2008, следующей уже будет та, которая будет поддерживать C++11 в полной мере
                                                      или ты сейчас тоже будешь заявлять "только 2010! no thinking required!"
                                                      предвосхищая твой вопрос - 2010 официально есть из коробки мсдн, но стоит только дома

                                                      и да, жду хотя бы намёка на твою нешарашку
                                                      или круг заказчиков
                                                      Ответить
                                                      • У меня всё равно длиннее, можно даже не пытаться, только приведет к негативным последствиям. И нет, не нужен персонал, который даже дельфи обосрать не может грамотно (опираясь таки на факты из справочника, да)
                                                        Ответить
                                                        • что ты всё увиливаешь
                                                          к каким негативным последствиям это приведёт? самозабанишься?
                                                          просвети нас, глупых
                                                          я теряюсь в догадках
                                                          гуру паскаля и джавоскрипта, знающий персонажей гейдева не понаслышке, стремающийся раскрыть какие же секретные проекты он делает на верхнем этаже кремля, наверное что то очень серьезное
                                                          Ответить
                                                          • >к каким негативным последствиям это приведёт?
                                                            У ТЕБЯ БУДЕТ БАТХЕРТ ОТ КРЕСТОПРОБЛЕМ. только и всего. иди за вазилином
                                                            Ответить
                                                          • > нас
                                                            здесь поподробнее, пожалуйста. по скольку вас, клоунов, фасуют?

                                                            ты пушкова уже слабее напоминаешь, и это отнюдь не комплимент
                                                            Ответить
                                                            • т.е. хвалиться нечем совершенно?
                                                              ну напрягись
                                                              скажи хотя бы "делаем сайты на заказ, среди заказчиков владельцы заводов, газет, пароходов, я отвечаю за то то", ну или "делаем убийцу документооборота IBM на дельфе, нужны формочки, будильники каждые 3 часа и интенсивный обмен с субд"
                                                              я все пойму и прощу
                                                              Ответить
                                                            • нас нас
                                                              ты видишь, для тебя даже давно раздел зарезервирован, гюльчатай анонимный
                                                              http://lurkmore.ru/Govnokod.ru#bugmenot

                                                              вот почему Тарасу не стыдно предстать каким есть - закончил институт, судя по всему аспирант, имеет академический интерес к разным языкам и мат аппарату, но на практике делает только программки для души
                                                              со знанием такого малораспространенного языка как ада я его могу даже кое-куда порекомендовать
                                                              разве это плохо? нет, он молодец

                                                              что молчишь?
                                                              какой вес я могу придавать твоим словам, если тебе сложно очертить свою профессиональную деятельность? ты же там замахивался на 10 миллионов строк дельфишного кода, небось устал пока писал, объем сравним с серьезным офисным пакетом - чего утаиваешь, намекни
                                                              Ответить
                                                              • бывает зайдешь на говнокод с работы, уставший, а в паскальном разделе мишустиноид щебечет... щебечет и щебечет, ссука

                                                                я ни хера в твой лепет не хочу вникать, поди в школу писать изложение
                                                                Ответить
                                                              • Тарас вообще Человек с большой буквы Т.
                                                                Ответить
                                                            • Манера писать короткими фразами без заглавной буквы напоминает мне другого любителя крестов с ГД.ру.
                                                              Ответить
                                                      • молодец, проигнорировал про шестую студию.
                                                        найдешь или вспомнишь слоупока, который на ней застрял - увидишь то самое, что происходит в уголке дельфи 7, но незамутненным климактерической неприязнью к паскалю
                                                        Ответить
                                                    • >боятся слезть с шестой студии?
                                                      мы не боимся. мы не можем по техническим причинам. не тролль нас
                                                      Ответить
                                                      • у вас много с++ кода, использующего переменные, объявленные внутри for?
                                                        Ответить
                                                        • Мы циклы не используем. Они давно не нужны в чистом виде.
                                                          Ответить
                                                          • Вот почему я порой завидую программистам на C++. В Java от циклов не избавиться, их выкинули только в Scala и Clojure.
                                                            Ответить
                                                        • Проблема не только в этом. Главное, что под [старый кусок мамонтового дерьма] всё было написано и давным-давно протестировано, под новый — мало того, что ошибки компиляции сразу править, так ещё и невероятную тучу тестов провести (в том числе перетестировать то, что давно оттестировано и уже не тестируется), и для каждого несоответствия исследовать, баг это, или фича. Это очень много времени.

                                                          Кстати, та же история с Java 1.4 (и даже 1.4.x для конкретных x).
                                                          Ответить
                                          • И вот уже чтобы запустить «синенький АРМ» нужен целый пентиум4. Н-да, средства явно передовые.
                                            Ответить
                            • если D7 хватает, то может и правильно делают - у нас перевели на XE некий довольно большой проект - грят тормозит сильно - сама среда тормозит. ноут i5 2.53GHz, 2Gb ram, winxp.
                              я сам только мельком смотрел, но все-равно заметно.
                              Ответить
                              • смотрите новую серию триллера "бугменот и корпоративные жлобы" на всех калькуляторах города
                                Ответить
                              • BDS действительно тяжеловата, но не настолько чтобы оставаться в 1990-ых

                                у них либо денег нет на закупку лицензий на сектор, либо мозгов, чтобы смело мигрировать и таки выучить новые фичи типа параметризованных типов
                                Ответить
                                • на мелких и средних проектах - оно нормально работает.
                                  могли решить, что овчинка выделки не стоит. не получится жеж взять исходник, скомпилить и чтоб сразу заработало. уникоды, отличия в реализации VCL (видел, что Bitmap.Refresh стал другим - ранее не моргал, стал моргать и двойным буфером не лечится - надо менять), DecimalSeparator теперь по-другому, a{:char} in ['q','w','e'] тоже переписывать нужно...
                                  наверно еще много чего изменилось - вот и не хотят тратить ресурсы.
                                  Ответить
                                  • дык, и весь говнокод, полагающий SizeOf(Char) = SizeOf(Byte), а такого может быть много, помня о том, что арифметика указателей была разрешена только для character pointers

                                    а вот с Char in Set нелогично получилось, это да
                                    Ответить
                                    • про char и byte я вообще молчу. но тут уж сами виноваты.
                                      арифметику указателей - приводить к инту? правда при переходе на 64 бит будут те же траблы. А есть интовый тип, размер которого совпадает с размером указателя?
                                      Ответить
                                      • > А есть интовый тип, размер которого совпадает с размером указателя?
                                        Вроде как. Хотя Bydlocodero вслед за крестоебами полностью просрали концепцию fundamental and generic types, теперь у них целый зверинец интринсик типов
                                        Ответить
                          • Кстати, насколько компилятор Delphi работает быстрее компилятора C++? Как обычно собирают дельфи-проекты? GNU make? CMake? или своя тулза есть?
                            Ответить
                            • скорость работы моего компилятора С++ меня только может радовать, у меня хороший компьютер, с дельфи сравнить не могу, дельфи у меня не стоит и параллельные проекты мы не делаем
                              бат-файлами они собирают на своей выделенном для отдела машине в полуавтоматическом режиме, насколько я помню, у них есть собственная на дельфи писанная утилита, которая сливает с системы контроля версий сорцы требуемых версий, сама формирует bat, собирает солюшен и сдает в архив, рассылая письма
                              тестируются на своих машинах они конечно по F5 или что там в дельфи аналогичное

                              точнее они формируют bat и скармливают его своей утилите, во
                              Ответить
                              • ок, спасибо за развёрнутый ответ. меня, как пользователя gentoo, скорость компилятора c++ радовать не может
                                Ответить
                                • i7-2600k@4700GHz, 8+Gb ddr3-1866, raid0 в наше время вполне по карману
                                  проверь, что у тебя MAKEOPTS="-j" если многоядерный проц
                                  Ответить
                                  • Ноутбук ThinkPad T61P, Core 2 Duo, 4GB RAM DDR2.
                                    Опции компиляции правильные, в три потока собирается. Сам c++ довольно долго компиляется, это факт (к примеру, 300 средних java-классов можно скомпилять примерно за 10 секунд). На какие жертвы только не пойдёшь ради быстрой работы приложений...
                                    Ответить
                                    • если делать rebuild, то медленнее и натужнее компиляции С++ с огромными 20-этажными шаблонами ничего не найти, я с этим даже спорить не буду
                                      поэтому есть разные способы это самое время сократить
                                      т.к. ты гентушник, то тебе явно только rebuild и приходится делать, это может напрягать, конечно
                                      проанализируй, какие такие преимущества тебе даёт гента, что тебе приходится мириться с долгой пересборкой, не окажется ли любой другой x86_64 дистрибутив сопоставим по скорости, получаешь ли ты эти самые 5% прироста на своем достаточно стандартном процессоре, я даже не знаю что конкретно софт может использовать из камня core 2 (может какие то улучшения в плавающей точке?), если есть критичная разница в конкретных приложениях - может стоит из сорцов только эти приложения с USE флагами и собирать в бинарном дистрибутиве?
                                      гента, как для меня, отличный дистрибутив чтобы поковыряться и разобраться в linux и отличный дистрибутив поддерживать N одинаковых машин в корректном состоянии, а ставить на ноут и жить с ним... там бинарных репозиториев еще не завели?
                                      Ответить
                                      • есть бинарные пакеты для программ типа firefox и openoffice, собирать которые слишком долго и уныло. Я пробовал много разных дистрибутивов: Mandriva, пару лет жил с Ubuntu, потом пробовал Debian, Gentoo, Arch и Fedora. Из всего этого добра мне больше всего понравилась Gentoo: всё прозрачно, удобная работа с консолью, мега-удобный emerge, трогательная забота о мёрже конфигов, стабильные версии пакетов, стабильная и быстрая работа сети (fedora в этом отношении - sucks) отличные доки и комьюнити.
                                        Arch - это треш. Перед каждым обновлением нужна молитва, какие-то детские баги с bluetooth.
                                        Fedora - это вообще феерический пипец. По дефолту на ней даже gcc не стоит, компилятор java поставить из репозитория - проблема, глюков очень много.

                                        Подумываю вот попробовать OpenSuse... Но вряд ли что-то сравнится с gentoo...
                                        Ответить
                                        • потыкай еще сюды
                                          http://linux.wikia.com/wiki/Category:Gentoo_based_distro

                                          мне кто то хвалил отечественный calculate, например
                                          Ответить
                                        • еще идея в голову пришла
                                          попробуй перейти на другой компилятор
                                          гцц так вообще никогда не был самым быстрым, ни по скорости компиляции, ни по оптимизации конечного бинарника
                                          http://clang.llvm.org/features.html#performance
                                          они вроде как обещают хорошее ускорение компиляции с++
                                          Ответить
                                          • ядро linux ничем кроме gcc не компилируется :)
                                            Для компиляции других приложений попробую clang, спасибо за наводку.
                                            Ответить
                                            • как это ничем
                                              25 October 2010 Clang/LLVM able to compile a working Linux Kernel.[23]
                                              но вообще стоит ожидать любого подвоха при компиляции ведра, да

                                              кстати столман на днях приезжает в москву, погрызёт ногти и перед нами
                                              Ответить
                                              • Читал вроде эту статью, заголовок громкий, а на деле всё банальнее: половина не работает
                                                SELinux, Posix ACLs, IPSec, eCrypt, anything that uses the crypto API - None of these will compile
                                                Module loading is totally broken.
                                                Ответить
                                                • ну компилятор молодой, еще пилят и будут долго пилить, но достаточно многообещающий
                                                  палка о двух концах
                                                  еще одна бесплатная конкуренция g++ - это отлично
                                                  но выпускается из стен корпорации бабла - грустно
                                                  Ответить
                                                  • Конкуренция ещё никому не мешала, особенно в open source. О clang слышал много хороших отзывов, особенно в плане скорости компиляции.
                                                    gcc - это ж солянка, гнушники не хотят писать генератор нативного кода для каждого языка, а компилить всё языки в АСД и генерить бэкэндом машинный код. Универсальность всегда вредит производительности.
                                                    Ответить
                                                    • А Кланг работает по тому же принципу, что и ГЦЦ? Меня интересует возможность генерации промежуточного кода (для генерации которого не нужно знать архитектуру процессора и опкоды) и передача этого кода универсальному компилятору.
                                                      Ответить
                                                      • clang - это фронтенд для
                                                        http://ru.wikipedia.org/wiki/Low_Level_Virtual_Machine
                                                        Ответить
                                                        • То есть там используется язык, описанный в той статье?
                                                          Так это хорошо.
                                                          Ответить
                                  • > 2600k
                                    k-то зачем?
                                    Ответить
                                    • написал жеж
                                      работает постоянно на 4700 GHz вместо 3400, без k такого не сделать, аве интелу
                                      Ответить
                                      • > работает постоянно на 4700 GHz
                                        Прослоупоучил. Никогда не занимался разгоном, по мне - совершенное безумие.
                                        Ответить
                                        • ну все компоненты системы сразу подбирались именно под разгон
                                          труды окупились - компиляция по сравнению с предыдущим компом (6-летний пень-4 в обёртке от жлобов HP) ускорилась в 10-20 раз
                                          это превзошло все мои ожидания
                                          Ответить
                                          • > труды окупились
                                            Интересно, насколько велика разница с неразогнанным процессором? В своё время я брал специально 2600, поскольку 2600к счёл пустой тратой денег.
                                            Ответить
                                            • ну в скорости разница теоретически 4.7/3.4, практически - меньше, конечно, но >1
                                              в цене разница заметнее, т.к. кроме k надо хорошо доплатить за приличную мать (где интел тоже за чипсет просит $$), приличный тихий кулер, добавить на недохлый БП и память, а затем уже и хочется и рейд и тихий удобный корпус для этого всего, и клавиатуру с подсветочкой
                                              но я не жалею - если жене не жалко на дребедень всякую, чего мне на себя жалеть для дела - на работе предложили взять новый системник с i5, я подумал и купил себе какой хотел
                                              труды окупились оргазмом, когда самый здоровый проект на работе ребилдился вместо 20 минут полторы (это с опцией "собираем проекты последовательно"), когда можно линух поставить тут же на виртуалку, замапить на живую рабочую папку и компилять в 8 потоков ребилд за минуту/билд за мгновения, вместо ебли с копированием архива на выделенную одноядерную слабую машинку и туплением по 15-20 минут в интернете пока там соберётся
                                              для дома (где задачи поиграть, интернеты и офис) - лучший выбор i5, конечно, игры всё равно в графику упираются
                                              Ответить
                                              • > теоретически
                                                В том вся беда, что теоретически.
                                                Я брал себе для дома, для игр, ну и виртуалки гонять. Собирать ничего не пробовал, у меня даже никакого компилятора не стоит. Потому и интересно, какой процент добавит этот разгон. На момент, когда я апгрейдился, 2600 от 2600к отличался на две тысячи (ЕМНИП); соответственно, я уже и без того потратился на остальное барахло, что решил просто пропить эти две тысячи. Так и вышло.
                                                Если исключительно под разгон, для целей, где важна производительность, плюс, контора платит - свой вопрос снимаю.
                                                Ответить
                              • Так у них же всё хорошо.
                                Ответить
                                • лол, не особо хорошо
                                  Ответить
                                • конечно хорошо
                                  процедурное программирование форевер
                                  производительность? не, не слышал
                                  работа с девайсом в синхронном режиме за 3 секунды, когда на С++ то же самое 100мс асинхронно - кого это ебёт
                                  зато формочки клепаются быстро, а отсутствие контейнеров, шаблонов и т.д. из коробки - да это никому и не нужно, зато можно скачать какой нибудь очередной бессистемный компонент, коллективный разум поможет
                                  но отдел выполняет свою работу, поэтому в чем то ты прав - у них всё хорошо
                                  инструмент выполняет ту работу, для которой он предназначен
                                  Ответить
                                  • > производительность? не, не слышал

                                    Схуяли дельфа сливает по производительности? Писать надо правильно.

                                    > работа с девайсом в синхронном режиме за 3 секунды, когда на С++ то же самое 100мс асинхронно - кого это ебёт

                                    Ну если в коде дельфи вставлена какая-нибудь херня типа sleep(3000), то может быть.
                                    Ответить
                                    • +1.
                                      Очень много delphi-программистов, которые только и умеют наклепать формочки, назначить какие-то проперти и эвенты, в которых написать код типа как в этом посте.
                                      про 3 секунды и 100 мс - они просто не умеют его готовить.
                                      Ответить
                                      • 2ctm: еще больше программистов, которым нравится следить за большинством формоклепателей и делать выводы =(
                                        Хотя, что уж там, чему учили, то и умеют, если учились
                                        Ответить
                            • nightly дельфевых проектов - признак школоты, которая хочет быть, как настоящие програмиссты

                              комплирует шустро и днем

                              был багладовый make, потом msbuild приделали
                              Ответить
                              • т.е. Continous Integration - для косоруких джаваёбов?
                                Ответить
                                • это не нужно, 10E7 LoC соберется за время похода в сортир
                                  Ответить
                                  • да, плюсы здесь курят в сторонке. Только вот Java компилируется примерно также быстро, а Continous Integration у джавистов в почёте. Очередной оверинжениринг?
                                    Ответить
                                    • "немедленный эффект от неполного или неработающего кода приучает разработчиков к работе в итеративном режиме с более коротким циклом."
                                      Хех, я так собаку приучал не ссать на пол. М. б. перебрали юниоров?
                                      Ответить
                          • > если бы не

                            Странная нападка. То же самое можно сказать про любой из давно существующих языков.

                            Если бы не огромное количество кода написанного на Fortran/Cobol/C/C++/Delphi(нужное дописать), и который нужно поддерживать, то их бы давно не было.
                            Ответить
                  • Ах, так теперь это русские школьники в американской школе?
                    Ответить
              • >format позволяет в качестве аргумента передать свой собственный класс, который сам знает как себя выводить?
                Да: передаем в format параметром obj.ToString;
                Ответить
                • ок
                  а что делать с локалью?
                  obj.ToString должен вывести что то одно?
                  или мне придется делать версию obj.ToString(somelocale) и каждый раз описывать что то?
                  Ответить
                  • > и каждый раз описывать что то?
                    Установи в конструкторе или в сетере.
                    Ответить
                    • ок
                      а если у меня одновременно два потока, один с юзерской локалью, а другой - дефолтной?
                      Ответить
                      • почему объект вообще должен в себе хранить какую то локаль и держать её всю жизнь
                        дельфишный подход?
                        Ответить
                      • Ты уже начинаешь извраты придумывать. Тут многие до этих вещей не доходили и ответить тебе не смогут.
                        Ответить
                        • почему извраты
                          std::ostringstream defaultoss, useross;
                          useross.imbue(std::locale(""));
                          double somedouble = 100.500;
                          defaultoss << somedouble;
                          useross << somedouble;

                          бывает очень удобно, когда надо английский csv с ихними разделителями читать, перерабатывать и выводить как русский, чтобы в русском excel открылось
                          работа с локалями вообще очень удобна, задаешь для потока (а не для каждого объекта ёпта) и больше не беспокоишься
                          Ответить
                          • Никогда не приходилось переключать локаль на лету. о_О
                            Ответить
                            • формат csv: значения разделяются запятыми
                              обычно сохраняют из экселя, так таблицы проще и портабельней передавать
                              строка таблицы выглядит как 100.500, 200.456, sometext
                              для русского экселя не выполняется, более того, если этот csv открыть в нем, то он всю строку засунет в первую ячейку
                              для русского экселя разделитель дробной части запятая, а разделитель ячеек - точка с запятой
                              доводилось писать утилиту (пакетная обработка данных для нейросетки), которая должна была принять на вход здоровый csv одного из двух форматов (русский/нерусский), серьезно перерабатывать его и выдавать csv под русский эксель

                              открывается файловый поток входного csv, избирается формат ячейки, формируются локали, в которых задается фасет numpunct с верным decimal_point, фасет, подавляющий пробел между группами тысяч (т.к. по науке зачем то в русской локали 100500 выводится как 100 500), затем одна локаль назначается на входной поток файла, а другая (под русский csv) на выходной
                              весь остальной движок не ебёт себе мозг что и как читать из файла
                              он просто делает >> из потока и << в поток
                              Ответить
                              • для русского экселя не выполняется, более того, если этот csv открыть в нем, то он всю строку засунет в первую ячейку
                                для русского экселя разделитель дробной части запятая, а разделитель ячеек - точка с запятой
                                доводилось писать утилиту

                                тур-де-франс, достаточно было правым меню воспользоваться
                                Ответить
                                • правым меню над чем?
                                  над входным файлом?
                                  в экселе 65к ограничение на количество строк в таблице, это была еще одна причина не использовать ручной вариант

                                  речь о том, что в С++ все эти хитрожопые операции (которые дельфишников никогда не касаются, потому что сложно) делаются очень небольшим числом строк
                                  Ответить
                                  • Я не вижу тут ничего не реализуемого средствами Дельфи, если только это уже не сделано до нас.
                                    Ответить
                                    • средствами дельфи единственный выход читать файл построчно
                                      затем строки разбивать на ячейки, используя переданный сверху delimiter
                                      затем в каждой ячейке пытаться распарсить значение, в котором известен разделитель дробной части
                                      в С++ это всё делает поток за тебя
                                      достаточно сначала один раз сказать как ему делать, задав свою локаль, а потом вызывать
                                      myfile >> mydoublevariable;
                                      Ответить
                                      • > в С++ это всё делает поток за тебя

                                        Сам, волшебным образом. Просто благодаря своей крестовости, а вовсе не библиотеке, которая и в Дельфи наверняка есть, а если и нет, то дописывается.
                                        Ответить
                                  • хуй его знает над чем, но оно там есть, и любая секретутка справится с его обнаружением, определением схемы и записью макро, ага
                                    Ответить
                                    • тарас, в дельфях тысячный разделитель сам парсится или телодвижения нужны?
                                      Ответить
                                    • Если бы это всем было надо - все бы точно сказали, есть оно или нет.
                                      Ответить
                                    • опенофис например при открытии файла csv сразу предлагает выбрать в каком формате что записано и какие разделители использованы
                                      но не суть
                                      csv файл на 100500 строк (реально дохуя) в любом формате -> утилита, которая не только читает и пишет, но и перерабатывает (UI, настройка модели с построением графиков, обучение и тестирование нейросети) -> csv файл нужного формата для вывода аналитических результатов в excel
                                      ты предлагаешь csv файл на 100500 строк -> еxcel, обрезка до 65к строк (уже олол), ручные действия по конвертации и сохранению -> утилита на переработку ....

                                      выбран первый алгоритм действий, думаю понимаешь почему
                                      и секретутки с макросами тут не причем
                                      Ответить
                          • Вообще да, тут налицо шаблон "Мост" со всеми вытекающими. С++ в этом плане удобнее. В Java принят другой подход, там сложно форматировать объекты сразу для нескольких локалей. Но тем не менее решение есть, хоть не очень элегантное, но довольно простое: объявить интерфейс Formattable, с методом, принимающим поток и локаль (локаль не является атрибутом потока в java), и реализовывать его для всех своих объектов.

                            Но вообще ни разу не приходилось такими вещами заниматься.
                            Ответить
                    • И можно так:
                      ToString(obj) и ToString(obj, utf)
                      Ответить
                      • Хотя нет, напиши свой format для delphi и чередуй выводимые объекты и параметры вывода если нужно. Так проблема в несколько тредов решится.
                        Ответить
                        • ну т.е. вопрос решается тем, что такого в дельфе нету, если хочешь - реализуй огромный велосипед самостоятельно, локалями, блекджеком и шлюхами, взяв самую последнюю дельфишную студию
                          действительно, среда не для школьников

                          потоки имелись в виду stream, а не thread
                          Ответить
                          • С чего ты взял, что велосипед уже не реализован?
                            Я вот утверждать не могу, мне пользоваться не доводилось просто.
                            Ответить
                        • Если будет такой format, в который можно передавать как выводимые параметры, так и параметры вывода, то все эти стрёмы просто не нужны.
                          Ответить
              • Потоки мне понравились, кстати. Минус только в том, что для того, чтобы вывести число не просто, а с 2 знаками после запятой, например, то всё равно много писанины.

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

                Нет. Хотя хрен знает, может и можно.
                Ответить
                • >Хотя хрен знает, может и можно.
                  Знаю, нельзя. Но я не хрен.
                  Ответить
              • Преимущества форматной строки:
                1. Специальный язык позволяет записать форматирование более компактно.
                2. Весь вывод в одном месте, поэтому легче модифицируется.
                3. Формат можно отделить от кода программы и хранить отдельно.
                4. Поэтому легко локализируется.

                Недостатки форматной строки:
                1. Отсутствует статическая проверка.
                2. Формат отделён от данных, поэтому проще внести ошибку при модификации.
                3. Язык форматирования практически невозможно расширить.
                4. До variadic templates в C++ плохо подходит для пользовательских типов.

                Впрочем, с variadic templates и паровоз из << городить нет необходимости.
                Ответить
                • и что же мы имеем
                  .
                  	форм строка 		форм строка 
                  	c системными типами	c пользовательскими типами 	потоки
                  C++	да			да				да
                  дельфи	да			нет				да
                  Ответить
                  • блять ебучее редактирование
                    .
                    	форм строка 		форм строка 
                    	c системными типами	c пользовательскими типами 	потоки
                    C++	да			да				да
                    дельфи	да			нет				нет
                    Ответить
                • Не могу не вставить своё мнение.

                  > 1. Отсутствует статическая проверка.
                  > 3. Язык форматирования практически невозможно расширить.

                  Есть языки, в которых это довольно легко реализуется. С помощью макросов. В частности, Nemerle.

                  К тому же, то, что названо "язык форматирования" в .NET легко задаётся свой.
                  Ответить
                  • > Есть языки
                    Тут извечный спор Дильфины vs Крестоносцы, для них существует только два языка
                    Ответить
                  • Разумеется, можно. И в C++ можно. Но вот с уже существующим языком и существующими функциями ничего не сделать (кроме хаков компилятора).
                    Ответить
              • http://www.yosefk.com/c++fqa/io.html
                Ответить
    • показать все, что скрытоКГ/АМ
      Ответить

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