О, адвокат Файрфокса подтянулся, тоже то ещё вредоносное поделие.> Да. Если взять компилятор из 80-х, будет работать. Если отключить оптимизации в
> современном компиляторе, будет работать. Если же современный компилятор и с оптимизациями,
> то работать не будет.
Что-то мне кажется вопрос скорее в том, как оно будет работать. И дело даже не в оптимизациях.
>> То, что программа у вас в результате "работает предсказуемо", поскольку вы может быть способны как-то предсказать, как она будет работать, вовсе не значит определённого поведения. Ваши способности к предсказанию и определение поведения программы - вещи весьма разные.
> Он дело советует -- сходи и почитай статьи, которые он рекомендует. Вот
> сходи и почитай, и если останется желание позубоскалить, то зубоскаль. Но
> сначала почитай.
Незачем нам ходить. Вам упорно кажется, что поведение программ, поведение которых не определено, является определённым. И вы даже упорно пытаетесь довести это до нас. Компиляторы 80х внезапно не делают ваши примеры чем-то иным, поведение всё равно не определено.
> В том-то и проблема, что предсказать поведение программы теперь невозможно, не учитывая
> всех тех UB описанных в стандарте, как UB.
> Взять, скажем, целочисленное переполнение. В C -- это UB. Которое исторически трактовалось
> как "сделать то, что процессор делает при сложении целых".
Ага. Ordu начал рассказ, как следует трактовать C. Но сей пересказ того, как ему кажется следовало трактовать, значит в целом ничего.
> То есть, исходный C предполагал, что программист обладает этой "способностью к предсказанию"
> поведения кода с UB, на которую ты тут зубоскалишь.
:-))) Это очень плохое предположение. Хотя его и можно допустить. Результат можно наблюдать. Возможно так и было задумано. >:-)
> Знание программистом
> архитектуры даёт ему чёткое понимание того, что произойдёт при разадресации NULL.
> Или что произойдёт при переполнении целого.
Может быть и даёт кстати. Вот только Ordu уже похоже должен начать подозревать, что ему почему-то уже "не даёт". И надо будет приучаться жить с этим >:-)
> Потом пришли современные техники оптимизации кода, которые выполняют оптимизацию многими
> фазами, и хоть каждая фаза вполне разумна, но в процессе трансформаций
> кода может теряться смысл выполняемых программой телодвижений, и затем вдруг --
> хоп -- и UB становится русской рулеткой: что сделает отоптимизированная программа
> уже не угадать.
Короче, от использования "старого компилятора" программа не превращается в имеющую так сказать лучше определённое поведение. Просто получается пример с программой, не имеющей такового. Здесь следует ещё раз сказать, что такой пример не представляет собой чего-то эмпирически отличного, выглядеть может не хуже, а кому-то и лучше, любого примера работы с вполне определённым поведением :-) Мы уже высказались по поводу этого свойства.
> То есть, современный C переопределил понятие UB
Это опять конечно же не так.
Просто кое-кому приходится открыть для себя, что же это такое наконец. И это ещё с высокой вероятностью не конец >:-)