Преждевременная оптимизация — зло! Да здравствует преждевременная оптимизация!
От: jul_nevermind  
Дата: 19.02.20 12:59
Оценка: -2
Известно высказывание Дональда Кнута о том, что преждевременная оптимизация — это корень всех зол. На практике не всё так однозначно. На базе своего собственного опыта разработки статического анализатора кода Андрей и его команда пришли к выводу, что от неуклонной деградации производительности нас может спасти только преждевременная оптимизация всего, что можно. Спикер хочет поделиться своими соображениями и применяемыми его командой приёмами.

Приятного просмотра!
программирование доклад конференция cpp
Re: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимизаци
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 19.02.20 13:25
Оценка: +4
Здравствуйте, jul_nevermind, Вы писали:

_>Спикер хочет поделиться своими соображениями и применяемыми его командой приёмами.


Пробуйте писать менее рекламные и более информативные сообщения. Например, дав ссылку на видео, дайте и на презентацию: вот она. Лучше пробежать глазами презенташку за пару минут и, если она заинтересовала, тратить время на видео. Уважайте чужое время!
Re: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимизаци
От: Pzz Россия https://github.com/alexpevzner
Дата: 19.02.20 14:47
Оценка: +3 :)
Здравствуйте, jul_nevermind, Вы писали:

_>Известно высказывание Дональда Кнута о том, что преждевременная оптимизация — это корень всех зол. На практике не всё так однозначно. На базе своего собственного опыта разработки статического анализатора кода Андрей и его команда пришли к выводу, что от неуклонной деградации производительности нас может спасти только преждевременная оптимизация всего, что можно. Спикер хочет поделиться своими соображениями и применяемыми его командой приёмами.


А что бы Андрею и его команде не зайти сюда лично, и не обсудить свои мысли с нами? А то чувствую себя аборигеном, которого белый миссионер приехал просвящать по телевизору.
Re: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимизаци
От: ltc  
Дата: 19.02.20 15:43
Оценка:
Здравствуйте, jul_nevermind, Вы писали:

_>Известно высказывание Дональда Кнута о том, что преждевременная оптимизация — это корень всех зол. На практике не всё так однозначно. На базе своего собственного опыта разработки статического анализатора кода Андрей и его команда пришли к выводу, что от неуклонной деградации производительности нас может спасти только преждевременная оптимизация всего, что можно. Спикер хочет поделиться своими соображениями и применяемыми его командой приёмами.


Ты мне про Кнута такого не говори!

Где тут преждевременность? Не вижу. На практике Андрей и Ко установили, что код их диагностик лежит на критическом пути и требует усилий по оптимизации.
Наверняка в продукте хватает инфраструктурного кода, о скорости которого никто не заботится, ибо не нужно. Так что никаких откровений.
Re[2]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 20.02.20 07:27
Оценка:
Pzz>А что бы Андрею и его команде не зайти сюда лично, и не обсудить свои мысли с нами? А то чувствую себя аборигеном, которого белый миссионер приехал просвящать по телевизору.

Я здесь.
Re[3]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: Pzz Россия https://github.com/alexpevzner
Дата: 20.02.20 11:32
Оценка:
Здравствуйте, Analytic2007, Вы писали:

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


A>Я здесь.


Очень рад этому факту.

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

Кстати, если у вас есть желание и интерес, можете поэкспериментировать со своей PVS-Studio на моем среднего размера опенсорсном проекте: https://github.com/alexpevzner/sane-airscan

Если ваш анализатор найдет в моем коде чего-нибудь интересное, я вас публично и со ссылками поблагодарю в своем README. У этого проекта есть потенциал стать в течении пары лет самым используемым драйвером сканера для линукса.
Re[4]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 21.02.20 08:31
Оценка: 18 (1)
Pzz>Кстати, если у вас есть желание и интерес, можете поэкспериментировать со своей PVS-Studio на моем среднего размера опенсорсном проекте: https://github.com/alexpevzner/sane-airscan

Ничего такого уж прям не нашлось, но, тем не менее, анализатор выявил несколько интересных мест.

Фрагмент N1
static zeroconf_addrinfo*
zeroconf_addrinfo_new (const AvahiAddress *addr, uint16_t port, const char *rs,
        AvahiIfIndex interface)
{
  ....
  while (*rs == '/') {
    rs ++;
  }

  rs_len = (int) strlen(rs);
  while (rs_len != 0 && rs[rs_len - 1] == '/') {
    rs_len --;
  }

  if (rs == NULL) {
    addrinfo->uri = g_strdup_printf("http://%s:%d/eSCL/", str_addr, port);
  }
  ....
}


Предупреждение PVS-Studio: V595 [CWE-476] The 'rs' pointer was utilized before it was verified against nullptr. Check lines: 232, 242. airscan-zeroconf.c 232

В начале указатель rs смело используется, а затем вдруг выясняется, что этот указатель может быть равен нулю. Соответственно, или указатель всегда точно не равен нулю, ошибки нет и лишнюю проверку можно удалить, чтобы она не сбивала с толку. Или это полноценная ошибка и функция не готова, что аргумент rs будет равен NULL.

Фрагмент N2

static zeroconf_addrinfo*
zeroconf_addrinfo_copy_single (const zeroconf_addrinfo *addrinfo)
{
    zeroconf_addrinfo *addrinfo2 = g_new0(zeroconf_addrinfo, 1);

    *addrinfo2 = *addrinfo2;
    addrinfo2->uri = g_strdup(addrinfo->uri);
    addrinfo2->next = NULL;

    return addrinfo2;
}


Предупреждение PVS-Studio: V570 The '* addrinfo2' variable is assigned to itself. airscan-zeroconf.c 263

Опечатка. Структура копируется сама в себя. Явно хотели написать:

*addrinfo2 = *addrinfo;


Фрагмент N3

static zeroconf_addrinfo*
zeroconf_addrinfo_new (const AvahiAddress *addr, uint16_t port, const char *rs,
        AvahiIfIndex interface)
{
    zeroconf_addrinfo *addrinfo = g_new0(zeroconf_addrinfo, 1);
    char              str_addr[128];
    ....
    static char link_local[8] = {0xfe, 0x80};
    size_t      len;
    ....
    str_addr[0] = '[';
    avahi_address_snprint(str_addr + 1, sizeof(str_addr) - 2, addr);
    len = strlen(str_addr);

    if (addrinfo->linklocal) {
      len += sprintf(str_addr + len, "%%25%d", interface);
    }
    str_addr[len++] = ']';
    str_addr[len] = '\0';
  ....
}


Предупреждение PVS-Studio: V512 [CWE-119] A call of the 'sprintf' function will lead to overflow of the buffer 'str_addr + len'. airscan-zeroconf.c 224

Небезопасная работа с буфером. Я не знаком с проектом и не могу сказать, возможно ли существование входных данных, которые приведут к переполнению буфера. Но, как я понимаю, вызов функции avahi_address_snprint может заполнить весь буфер целиком. А это значит, что последующий за ним вызов функции sprint уже может привести к выводу строки уже за пределами буфера. Предсказать последствия невозможно, но обычно подобные неаккуратности и становятся в последствии уязвимостями.
Re[5]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.02.20 09:35
Оценка:
Здравствуйте, Analytic2007, Вы писали:

Pzz>>Кстати, если у вас есть желание и интерес, можете поэкспериментировать со своей PVS-Studio на моем среднего размера опенсорсном проекте: https://github.com/alexpevzner/sane-airscan


A>Ничего такого уж прям не нашлось, но, тем не менее, анализатор выявил несколько интересных мест.


Класс! Чего про вас написать, или на мое усмотрение?

В комментарии к гитовскому коммиту я вас уже помянул

A>Предупреждение PVS-Studio: V595 [CWE-476] The 'rs' pointer was utilized before it was verified against nullptr. Check lines: 232, 242. airscan-zeroconf.c 232


Это реальный баг, могло и корку сдампить (в сочетании с багом устройства).

A>Предупреждение PVS-Studio: V570 The '* addrinfo2' variable is assigned to itself. airscan-zeroconf.c 263


A>Опечатка. Структура копируется сама в себя. Явно хотели написать:


Да. Последствия на самом деле не очень значительные, но тем не менее, реальная ошибка.

A>Предупреждение PVS-Studio: V512 [CWE-119] A call of the 'sprintf' function will lead to overflow of the buffer 'str_addr + len'. airscan-zeroconf.c 224


A>Небезопасная работа с буфером. Я не знаком с проектом и не могу сказать, возможно ли существование входных данных, которые приведут к переполнению буфера. Но, как я понимаю, вызов функции avahi_address_snprint может заполнить весь буфер целиком. А это значит, что последующий за ним вызов функции sprint уже может привести к выводу строки уже за пределами буфера. Предсказать последствия невозможно, но обычно подобные неаккуратности и становятся в последствии уязвимостями.


Это false positive, там форматируется IP-адрес с опциональным числовым суфиксом, и все это гарантированно влезет в буфер. Но анализатору, конечно, это знать неоткуда. Наверное, надо не полениться и snprintf написать...
Re[6]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 21.02.20 09:44
Оценка:
Pzz>Класс! Чего про вас написать, или на мое усмотрение?
На Ваше усмотрение
Re[7]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.02.20 09:50
Оценка:
Здравствуйте, Analytic2007, Вы писали:

Pzz>>Класс! Чего про вас написать, или на мое усмотрение?

A>На Ваше усмотрение

Хорошо.

А Go ваш анализатор умеет?
Re[8]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 21.02.20 09:54
Оценка:
Pzz>А Go ваш анализатор умеет?
Нет. На данный момент поддерживается: C, C++, C++/CLI, C#, Java.
Re[5]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.02.20 12:55
Оценка:
Здравствуйте, Analytic2007, Вы писали:

A>Ничего такого уж прям не нашлось, но, тем не менее, анализатор выявил несколько интересных мест.


А вот одну ошибочку она таки не поймала, а clang поймал.

В файле airscan-device.c, в функции device_escl_check_status_callback, в строках от 645-й возможно использование переменных device_status и adf_status до инициализации.
Re[2]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: B0FEE664  
Дата: 21.02.20 17:56
Оценка:
Здравствуйте, Nuzhny, Вы писали:

_>>Спикер хочет поделиться своими соображениями и применяемыми его командой приёмами.

N>Пробуйте писать менее рекламные и более информативные сообщения. Например, дав ссылку на видео, дайте и на презентацию: вот она.

Жуть какая! И это вы называете преждевременной оптимизацией? Преждевременная оптимизация и рекурсивные функции не могут быть совместимы.
И каждый день — без права на ошибку...
Re[3]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 21.02.20 18:27
Оценка:
Здравствуйте, B0FEE664, Вы писали:

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


BFE>Жуть какая! И это вы называете преждевременной оптимизацией? Преждевременная оптимизация и рекурсивные функции не могут быть совместимы.


Ты кнопкой ошибся, дядя. Я никакого отношения к оратору не имею.
Re[7]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.02.20 22:08
Оценка:
Здравствуйте, Analytic2007, Вы писали:

Pzz>>Класс! Чего про вас написать, или на мое усмотрение?

A>На Ваше усмотрение

Написал, как смог
Re[8]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 22.02.20 06:44
Оценка:
Pzz>Написал, как смог

Спасибо.

Как всегда, на всякий случай, контрольное напоминание читателям. Разовые проверки не имеют ничего общего с идеологией статического анализа. Суть — регулярно использование с целью выявления ошибок на самых ранних этапах и тем самым сокращении расходов на их устранение. Подробнее.
Re[9]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: Pzz Россия https://github.com/alexpevzner
Дата: 22.02.20 07:59
Оценка:
Здравствуйте, Analytic2007, Вы писали:

A>Как всегда, на всякий случай, контрольное напоминание читателям. Разовые проверки не имеют ничего общего с идеологией статического анализа. Суть — регулярно использование с целью выявления ошибок на самых ранних этапах и тем самым сокращении расходов на их устранение. Подробнее.


Это понятно.

Было бы здорово, если бы вы сделали интеграцию с гитхабом. Для Go таких инструментов пруд пруди, а вот для C как-то не видно. Сделаете — будете первыми
Re[4]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 23.02.20 03:38
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>поэкспериментировать со своей PVS-Studio на моем среднего размера опенсорсном проекте: https://github.com/alexpevzner/sane-airscan


Кстати, каковы нынче примерные нормы оценки размера проекта? Я всегда считал, что мой основной проект с 1.3 Мб исходников — "меньше среднего", и даже слегка переживал за это, а Вы свой с 250 кб называете "средним".
Re[5]: Преждевременная оптимизация — зло! Да здравствует преждевременная оптимиз
От: Pzz Россия https://github.com/alexpevzner
Дата: 23.02.20 14:41
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

Pzz>>поэкспериментировать со своей PVS-Studio на моем среднего размера опенсорсном проекте: https://github.com/alexpevzner/sane-airscan


ЕМ>Кстати, каковы нынче примерные нормы оценки размера проекта? Я всегда считал, что мой основной проект с 1.3 Мб исходников — "меньше среднего", и даже слегка переживал за это, а Вы свой с 250 кб называете "средним".


Не знаю. По-мне, так это маленький проект, но я написал "средний", чтобы никого не обидеть
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.