Re: boost - вон из профессии
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 12.06.08 15:57
Оценка: +5 :)
Здравствуйте, Kluev

Складывается впечатление, что возражающим Kluev-у товарищам, вероятно, никогда не приходилось выбрасывать из программы вещи типа std::string, std::stringstream и std::set/map после работы с профайлером.

boost::lexical_cast, как и std::stringstream, изрядный тормоз и для некоторых вещей применять его совершенно неразумно. Вне зависимости о того, правомерно ли Kluev охаивает качество boost-а или нет.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: boost - вон из профессии
От: alexeiz  
Дата: 12.06.08 18:12
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Здравствуйте, alexeiz, Вы писали:


A>>Здравствуйте, Kluev, Вы писали:



A>>Если взглянуть на профайл, что я боюсь, тебе сделать не удалось (по причине либо отсутствия профайлера, либо неумения им пользоваться), то видно, что это очередной micro-benchmark, который ничего не значит. Кстати lexical_cast'а в профайле вообще не видно (оптимизация, понимаешь!).


K>Профайлер здесь и не нужен. Я посмотрел в исходники и обнаружил там быдлокодец вокруг iostream.

K>Кстати, в недрах этого чуда несколько раз вызывается new, поэтому производительность в реальных условиях будет еще сильно зависить от состояния кучи. А сам факт динамического выделения памяти для операции string -> number говорит о низкой культуре программирования у бустовских кодеров. Видимо на первом месте в бусте стоит "чистота концепций", а все остальные вопросы игнорируются.

Странный ты человек. Взгляни хоть на профайл один раз. Где там вызывается new? Пока что ты здесь занимаешься игнорированием а не бустовские кодеры.
Re[4]: boost - вон из профессии
От: Kluev  
Дата: 12.06.08 18:57
Оценка: -1
Здравствуйте, alexeiz, Вы писали:

A>Странный ты человек. Взгляни хоть на профайл один раз. Где там вызывается new? Пока что ты здесь занимаешься игнорированием а не бустовские кодеры.


Re[10]: boost - вон из профессии
От: minorlogic Украина  
Дата: 12.06.08 19:01
Оценка: -1
Здравствуйте, CreatorCray, Вы писали:

Z>> В стандартных библиотечных функций, как минимум можно знать чего ожидать, или во всяком случае куда обращаться.

CC>Они ничуть не лучше нормально написанных, оттестированных и задокументированных "велосипедных" функций.

К сожалению я не могу разработать аналоги многих библиотек , в том числе буста с таким же качеством. Надеюсь это не моя бездарномть а просто нехватка ресурсов. Хочу работать в фирме которая готова разрабатывать библиотеки качественее буста.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[2]: boost - вон из профессии
От: minorlogic Украина  
Дата: 12.06.08 19:04
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, Kluev


E>Складывается впечатление, что возражающим Kluev-у товарищам, вероятно, никогда не приходилось выбрасывать из программы вещи типа std::string, std::stringstream и std::set/map после работы с профайлером.

Ты попал в точку. Мне не разу в жизни не пришлось выбрасывать "std::string, std::stringstream и std::set/map после работы с профайлером." Наверное я не дорос то того уровня абстракции.

А вот код где конкатенация строк оптимизировалась заменой std::string на strcpy видел.

E>boost::lexical_cast, как и std::stringstream, изрядный тормоз и для некоторых вещей применять его совершенно неразумно. Вне зависимости о того, правомерно ли Kluev охаивает качество boost-а или нет.

Подозреваю что это очевидно для людей интенсивно использующих буст ?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[5]: boost - вон из профессии
От: minorlogic Украина  
Дата: 12.06.08 19:05
Оценка: +1
Мне этот дамп напоминает дебаговую сборку ? я не прав ?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[6]: boost - вон из профессии
От: Kluev  
Дата: 12.06.08 19:17
Оценка: 5 (1)
Здравствуйте, minorlogic, Вы писали:

M>Мне этот дамп напоминает дебаговую сборку ? я не прав ?


Спешал фор ю.
Re: boost - вон из профессии
От: anc  
Дата: 12.06.08 19:52
Оценка:
Здравствуйте, Kluev, Вы писали:

K>решил сделать небольшой тест.


А попробуй еще мой bicycle


double my_bicycle(const char *)
{
    return 3.1415;
}


а если серьёзно — код num_parse в студию
Re[2]: boost - вон из профессии
От: Kluev  
Дата: 12.06.08 20:16
Оценка:
Здравствуйте, anc, Вы писали:

anc>Здравствуйте, Kluev, Вы писали:


K>>решил сделать небольшой тест.


anc>А попробуй еще мой bicycle


anc>
anc>double my_bicycle(const char *)
anc>{
anc>    return 3.1415;
anc>}

anc>


anc>а если серьёзно — код num_parse в студию


int num_parse
(
  double    *num,
  const char  **stop,
  const char  *p,
  const char  *end
)
{
  i64    ct;
  int    neg;
  double val;
  int    ep;
  int    ep_neg;
  uchar  c;
  int    digs;
  double tmp;

  static CharType ctype;

  for ( ;; ) {
    if ( p < end )
      ct = ctype.type( c = *p );
    else
      goto err_eof;

    if ( ct & char_t::space )
      ++p;
    else
      break;
  }

  if ( ct & char_t::sign ) {
    neg = ( '-' == c );
    if ( ++p == end )
      goto err_eof;
    ct = ctype.type( c = *p );
  }
  else
    neg = false;

  // first char
  if ( ct & char_t::digit )
    { val = c - '0'; ++p; }
  else if ( '.' == c )
    { val = 0; ++p; digs = 0; goto dot_ok; }

  for (;;) {
    if ( p < end )
      ct = ctype.type( c = *p );
    else
      goto ip_eof;

    if ( ct & char_t::digit )
      val = val * 10 + (c-'0');
    else
      goto ip_ok;
    ++p;
  }

ip_ok:

  digs = 0;

  if ( '.' != c )
    goto fp_ok;
  else
    ++p;

dot_ok:

  for (;;) {
    if ( p < end )
      ct = ctype.type( c = *p );
    else
      goto fp_eof;

    if ( ct & char_t::digit ) {
      val = val * 10 + (c-'0');
      --digs;
    }
    else
      goto fp_ok;

    ++p;
  }

fp_ok:

  if ( 'E' == c || 'D' == c || 'e' == c || 'd' == c )
    ++p;
  else
    goto fp_eof;

  if ( p == end )
    goto err_eof;

  ct = ctype.type( c = *p );
  if ( ct & char_t::sign ) {
    ep_neg = ( '-' == c );
    if ( ++p == end )
      goto err_eof;
    else
      ct = ctype.type( c = *p );
  }
  else
    ep_neg = false;

// first char
  if ( ct & char_t::digit )
    { ep = c - '0'; ++p; }
  else
    goto err_syntax;
  
  for ( ;; ) {
    if ( p < end )
      ct = ctype.type( c = *p );
    else
      break;

    if ( ct & char_t::digit ) {
      ep = ep * 10 + (c-'0');
    }
    else
      break;
    
    ++p;
  }

  if ( ep_neg )
    digs -= ep;
  else
    digs += ep;

  *stop = p;
  tmp = pow( 10., digs );
  *num = neg ? -(tmp * val) : tmp * val;
  return num_parse_ok;

ip_eof:
  *stop = p;
  *num = neg ? 0.-val : val;
  return num_parse_ok;

fp_eof:
  *stop = p;
  tmp = pow( 10., digs );
  *num = neg ? -(tmp * val) : tmp * val;
  return num_parse_ok;

err_eof:
  *stop = p;
//  *num = 0;
  return num_parse_eof;

err_syntax:
  *stop = p;
//  *num = 0;
  return num_parse_syntax;

}
Re[2]: boost - вон из профессии
От: Аноним  
Дата: 12.06.08 21:31
Оценка: :)
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, Kluev


E>Складывается впечатление, что возражающим Kluev-у товарищам, вероятно, никогда не приходилось выбрасывать из программы вещи типа std::string, std::stringstream и std::set/map после работы с профайлером.


Ну да, приходится переодически менять структуру данных X на Y и алгоритм Foo на Bar.
Тоже мне откровение
Re[11]: boost - вон из профессии
От: CreatorCray  
Дата: 12.06.08 21:37
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>К сожалению я не могу разработать аналоги многих библиотек, в том числе буста с таким же качеством.

Работай над этим

M> Надеюсь это не моя бездарномть а просто нехватка ресурсов.

а также времени и желания...

M> Хочу работать в фирме которая готова разрабатывать библиотеки качественее буста.

Их много. Не надо считать что буст идеален в плане качества.

Буст начинал как как большой репозиторий бесплатных велосипедов куда каждый мог выложить свой велосипед на peer-review.
Подробнее здесь: http://www.boost.org/users/proposal.pdf
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: boost - вон из профессии
От: landerhigh Пират  
Дата: 13.06.08 02:34
Оценка: 3 (1)
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, Kluev


E>Складывается впечатление, что возражающим Kluev-у товарищам, вероятно, никогда не приходилось выбрасывать из программы вещи типа std::string, std::stringstream и std::set/map после работы с профайлером.

std:string сотоварищами выбрасывать не приходилось. Приходилось выбрасывать глючный быдлокод, который рожали исходи из вот такого "был std::string и все тормозило". Не говоря уже о раздаче люлей любителям передавать контейнеры по значению и профилировать отладочную сборку.
Re[2]: boost - вон из профессии
От: jazzer Россия Skype: enerjazzer
Дата: 13.06.08 02:35
Оценка: 2 (1)
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, Kluev


E>Складывается впечатление, что возражающим Kluev-у товарищам, вероятно, никогда не приходилось выбрасывать из программы вещи типа std::string, std::stringstream и std::set/map после работы с профайлером.


Приходилось, конечно, но почему-то ни разу в голову не пришло заявить "boost/ACE/STL/C++/whatever — вон из профессии"
И скорее всего потому, что на одно выброшенное приходится десять невыброшенных, которые отлично в своих ситуациях работают, давая простой и прозрачный для понимания код.

E>boost::lexical_cast, как и std::stringstream, изрядный тормоз и для некоторых вещей применять его совершенно неразумно. Вне зависимости о того, правомерно ли Kluev охаивает качество boost-а или нет.


А с этим никто и не спорит. Просто "некоторые вещи" и "boost — вон из профессии" несколько несовместимы по уровню обобщения.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: boost - вон из профессии
От: landerhigh Пират  
Дата: 13.06.08 02:37
Оценка: 1 (1) +2 :)))
Здравствуйте, Kluev, Вы писали:

[skip]

[Задумчиво] При прочтении данного кода на ум почему-то постоянно приходило слово "биореактор".
Re[3]: boost - вон из профессии
От: anc  
Дата: 13.06.08 06:26
Оценка: 1 (1)
Здравствуйте, Kluev, Вы писали:


это не аналог strtod() — нет обработки overflow/underflow и напомнило http://www.rsdn.ru/forum/message/2795063.1.aspx

откуда CharType?

тест не правильный — выносить

*end = str + strlen(str);


из цикла подсчета времени нельзя!
Re[2]: boost - вон из профессии
От: Аноним  
Дата: 13.06.08 08:05
Оценка:
E>Складывается впечатление, что возражающим Kluev-у товарищам, вероятно, никогда не приходилось выбрасывать из программы вещи типа std::string, std::stringstream и std::set/map после работы с профайлером.
Честно говоря — выбрасывать нет, не приходилось
Re[4]: boost - вон из профессии
От: Kluev  
Дата: 13.06.08 08:30
Оценка:
Здравствуйте, anc, Вы писали:

anc>это не аналог strtod() — нет обработки overflow/underflow и напомнило http://www.rsdn.ru/forum/message/2795063.1.aspx

проверки нет потому что можно проверить результат на INF, хотя я согласен, что логичней сделать это внутри функции.

anc>откуда CharType?

Другой велосипед

anc>тест не правильный — выносить из цикла подсчета времени нельзя!

внутри функции можно легко заменить проверку p < end на *p, но мне было влом поэтому я просто поставил strlen
Re[3]: Kluev - вон из профессии
От: boost  
Дата: 13.06.08 08:56
Оценка: :))) :))) :))) :))
Здравствуйте, Kluev, Вы писали:

K>
K>int num_parse
K>... // га*нокод вырезал
K>
Re[2]: boost - вон из профессии
От: Pavel Dvorkin Россия  
Дата: 13.06.08 09:06
Оценка: +1 :)
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, Kluev


E>Складывается впечатление, что возражающим Kluev-у товарищам, вероятно, никогда не приходилось выбрасывать из программы вещи типа std::string, std::stringstream и std::set/map после работы с профайлером.


Мне не приходилось. Я их к своим программам, когда изначально известно, что нужна скорость, близко не подпускаю
With best regards
Pavel Dvorkin
Re[2]: boost - вон из профессии
От: minorlogic Украина  
Дата: 13.06.08 09:48
Оценка: 7 (3) +6
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, Kluev


E>Складывается впечатление, что возражающим Kluev-у товарищам, вероятно, никогда не приходилось выбрасывать из программы вещи типа std::string, std::stringstream и std::set/map после работы с профайлером.


E>boost::lexical_cast, как и std::stringstream, изрядный тормоз и для некоторых вещей применять его совершенно неразумно. Вне зависимости о того, правомерно ли Kluev охаивает качество boost-а или нет.


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

А теперь вопрос , это кому в голову опять приходит мысль использовать вместо специализированных парсеров свои велосипеды на std::string, std::stringstream? Ах да , бесстрашным героям которые пишут библиотеки лучше буста. Слава героям капиталистического труда.

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


"boost::lexical_cast" даже по названию может прити в голову что это не инструмент конвертирования строки в дабл а некий универсальный преобразователь типов. И что варианты его использования предполагают и неимение информации о типе (я имею ввиду шаблонные конструкции).

Я не собираюсь идеализировать буст , тем более что он состоит из множества гетерогенных библиотек, но как бы и не хочется оставить без внимания воинствующую безграмотность. Для критики какой либо из бустовских библиотке (а весь буст критиковать это просто безграмотно) надо было бы рассотреть для чего она написанна, варианты использования , и предложить альтернативу лучше удовлетворяющую поставленным задачам.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.