LINUX.ORG.RU

Избранные сообщения tt

Почему программы на с++ тормозят :)

Форум — Development

https://www.computerenhance.com/p/welcome-to-the-performance-aware

ах, наконец-то кто-то заметил слона в посудной лавке :-)

Видео, 22 минуты https://m.youtube.com/watch?v=tD5NrevFtbU

Заменяем крутой полиморфизм на тупой свитч - получаем 1.5 ускорения :) Я так понял конечно тут еще компилятор виновен, может ему можно как-то явно указать кто и куда морфирует в данной программе .. но результат пока (под вин, судя по notepad++ и оформлению окон) явно не в пользу красивого программирования.

В тред приглашаются программисты со своими (анти)примерами :)

едит: исправил ссылку на видео

 ,

Andrew-R
()

Краткая история о том, как не надо писать (и улучшать) код

Форум — Development

По мотивам разговора в Почему программы на с++ тормозят :) решил оформить это отдельной темой.

В исходниках GNU grep я наткнулся на такое:

/* Whether to output filenames.  1 means yes, 0 means no, and -1 means
   'grep -r PATTERN FILE' was used and it is not known yet whether
   FILE is a directory (which means yes) or not (which means no).  */
static int out_file;
  /* Which command-line options have been specified for filename output.
     -1 for -h, 1 for -H, 0 for neither.  */
  int filename_option = 0;
  /* Don't output file names if invoked as 'grep -r PATTERN NONDIRECTORY'.  */
  if (out_file < 0)
    out_file = !!S_ISDIR (st.st_mode);

Тут явно напрашивается enum вместо магических констант. О чем я сразу подумал. А дальше в коде я наткнулся еще на такой однострочник, с которым без поллитры не разобраться:

  out_file = (filename_option == 0 && num_operands <= 1
              ? - (directories == RECURSE_DIRECTORIES)
              : 0 <= filename_option);

В общем, я подумал, что эта лапша наверное родом откуда-то из конца 80-х - начала 90-х, когда код писали в «хакерских традициях». Но нет. Всё это безобразие было введено в 2019-м году в 3-х коммитах под следующими заголовками:

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

Не делайте так. Не хакерствуйте над битами как для конкурса IOCCC.

 , ,

wandrien
()