Pull to refresh

Comments 23

С релизом! Картинки в посте отменные, особенно единорожий троллфейс.
Разработчик считает, что это глюк в компиляторе.

Неужели UBSan настолько непопулярен? Он ведь нашёл бы такое за секунды.
void main(void){
    float d = 3.14f;
    int i = 1;
    auto sum = d + i;
}


pvs.c: In function ‘main’:
pvs.c:6:6: error: type defaults to ‘int’ in declaration of ‘sum’ [-Werror=implicit-int]
auto sum = d + i;
^~~


но пасаран!

// ладно, я тоже слегка потроллил :), там по дефолту ворнинг, но не молча же всё это происходит!
Компилятор не читает мои комментарии, в отместку я не читаю его варнинги.
если только :)
«назло маме отморожу уши!»
угу, особенно те, где написано «я бедный пакистанский вирус, протестируйте меня бесплатно, нупазязя!!» :)
У меня возник вопрос: А что говорит PVS-Studio 6.26 о чистоте кода PVS-Studio 6.26?
Говорит, что всё чисто. У разработчиков, использующих Visual Studio, включен анализ после сборки. И, естественно, анализатор запускается ночью и рассылает письма счастья тем, кто заложил подозрительный код и тимлидам (см. BlameNotifier).
А у разработчиков, использующих Linux, все тоже нормально. Так как статический анализ также интегрирован в рабочий процесс, по коммитамм запускаются проверки и все работает как надо.
Разработчиков на macOS тоже не обидели :D Там всё работает как в версии для Linux.
В очередной раз посмеялся с горе-программистов, которые чуть что винят компилятор (это к дискуссии про V1026).
Компилятор видит, что в переменной r считается некоторая сумма. Переполнения переменной r произойти не должно. Иначе это неопределённое поведение, которое компилятор никак не должен рассматривать и учитывать.
Это, к сожалению, распространённое заблуждение, в которое, увы, верят и разработчики трансляторов. Поведение, не определённое в стандарте означает, что ответственность за его определение переносится с создателей стандарта на создателей транслятора. Это совсем не означает, что оно не должно учитываться, но именно так многие считают и распоряжаются своей отвественностью так, как Вы описали.
Претензия к компилятору вполне обоснована, но расчёт на то, что тут кто-то кому-то должен был бы наивен.
Тем не менее, прочувствовать правильный учёт ошибочной ситуации можно, включив опции -fsanitize=undefined -fsanitize-undefined-trap-on-error.
Вы путаете undefined behaviour и unspecified. Последнее как раз должно быть определено компилятором (но не обязательно документировано). А при undefined никто ничего никому не должен. Программа, его содержащая более не считается программой на языке С++. Что и используют разработчики компиляторов для проведения жёстких оптимизаций.
Я не путаю. В компиляторе нет неопределённых мест по природе программ на цифровых вычислительных устройствах(с поправкой на точность определения машинного языка). Неопределённость может быть только в спецификации. Вопрос лишь в том, как именно определяется поведение в компиляторе — наиболее разумным способом или абы как ради баллов в очках оптимизации, задано один раз или меняется от версии к версии. Unspecified же поведение как раз-таки определено на уровне стандарта, но подразумевает возможность выбора. В этом и суть названия, которое плохо передаётся на русском, — оно определено, но не специфицировано.
А планируете ли что-нибудь подобное для Python?
Настоящий такой, статический анализ?
Если нет, то какие сейчас сложности основные есть?
Если да, то когда ждать эту прелесть?
// естественно, будет максимально круто написать его на питоне :)
Про Python пока вообще не думали. Нам ещё Java делать и делать, продвигать и продвигать. Возможно потом будет смотреть в сторону PHP или JavaScript.
Подумайте пожалуйста, очень трудно. Сам Гвидо сказал что проверку для рекурсивных типов он не осилил и ему и так хорошо:

IIRC Brett and I tried and failed to come up with a recursive definition that worked in mypy
и далее:
In my own code I use this:
JsonDict = Dict[str, Any]
which happens to cover perfectly what I'm doing

© github.com/python/typing/issues/182

Ещё очнь нехватает возможности для произволной строчки в коде узнать какие эксепшены там вообще могут быть. :)
Мне кажется, что это потенциально нерешаемая задача :)
Какое-то количество мы можем найти, но гарантировать, что нашла все не можем
Ну на Питоне очень многое из «выстрели себе в ногу на С/С++» в принципе невозможно. Очень маленький простор для статического анализа. Хотя конечно копи-пасты и а != 2 || a != 3 возможны и там…
А насколько сложно создать версии для Rust на основе уже имеющейся?
Спасибо!
Планирую изучить Rust, вместе с Vulcan (надеюсь под него есть либа).
Sign up to leave a comment.