История изменений
Исправление LamerOk, (текущая версия) :
Порядок ответственности за нарушение ФЗ указан в самом ФЗ:
Вот нарушен этот ФЗ, судья пишет
Ты, если не понимаешь каких-то формулировок, лучше спрашивай. Потому что по твоей же ссылке:
о привлечении к административной ответственности по ч. 2 ст. 12.21.1 КоАП РФ,
КоАП - это не ПДД. ПДД - не КоАП. Водилу привлекли за нарушение ФЗ по КоАП.
Так Вы считаете, что это компилятор должен быть «strictly conforming program»?
Следим внимательно за руками: формулировка в стандарте, естественно, относится к прогону программы, но на момент запуска программы на исполнение, программа самостоятельно не может принять решение о наступлении UB, она может лишь выполнить действия, последствия которых будут UB. Остаются две точки, где на UB могли положится при создании программы - в момент написания программы и в момент компиляции. Стандарт явно запрещает оба варианта. В этом ITT-треде программистов мы не рассматриваем. Остаётся только компилятор.
Теперь ещё раз медленно и печально: поведение соответствующей стандарту программы не может зависеть от UB. То есть, компилятор не может генерировать код на основании обнаруженного UB.
Вот к примеру эта программа содержит UB:
#include <limits.h>
int main(void) { return INT_MAX +1; }
Если компилятор определил наличие UB, он должен либо прекратить трансляцию юнита, либо то, что он выдаст заведомо не будет strictly conforming program
.
Вы же сами пишете «constructed according to the syntactic and semantic rules for conforming implementations». Цвет автомобиля Форд-Т может быть любым, если этот цвет чёрный.
Это потому что ты стандарт за эту неделю так и не осилил прочитать. Если бы прочитал, то знал, что semantic rules в сишечке описаны через некоторые свойства execution environment. Вот к примеру:
3.5
1
bit
unit of data storage in the execution environment large enough to hold an object that may
have one of two values
2
NOTE
It need not be possible to express the address of each individual bit of an object.
3.6
1
byte
addressable unit of data storage large enough to hold any member of the basic character
set of the execution environment
...
6.2.5 Types
...
5
An object declared as type signed char occupies the same amount of storage as a
‘‘plain’’ char object. A ‘‘plain’’ int object has the natural size suggested by the
architecture of the execution environment (large enough to contain any value in the range
INT_MIN to INT_MAX as defined in the header <limits.h>).
А в отношении самого execution environment (за вычетом API и библиотек) есть лишь ограниченный набор требований на запуск и останов программы. То есть сами детали вычислений в стандарте не описаны, в стандарте описано, как сишный код должен транслироваться в формально неописанный и толком неизвестный execution environment.
Исходная версия LamerOk, :
Порядок ответственности за нарушение ФЗ указан в самом ФЗ:
Вот нарушен этот ФЗ, судья пишет
Ты, если не понимаешь каких-то формулировок, лучше спрашивай. Потому что по твоей же ссылке:
о привлечении к административной ответственности по ч. 2 ст. 12.21.1 КоАП РФ,
КоАП - это не ПДД. ПДД - не КоАП. Водилу привлекли за нарушение ФЗ по КоАП.
Так Вы считаете, что это компилятор должен быть «strictly conforming program»?
Следим внимательно за руками: формулировка в стандарте, естественно, относится к прогону программы, но на момент запуска программы на исполнение, программа самостоятельно не может принять решение о наступлении UB, она может лишь выполнить действия, последствия которых будут UB. Остаются две точки, где на UB могли положится при создании программы - в момент написания программы и в момент компиляции. Стандарт явно запрещает оба варианта. В этом ITT-треде программистов мы не рассматриваем. Остаётся только компилятор.
Теперь ещё раз медленно и печально: поведение соответствующей стандарту программы не может зависеть от UB. То есть, компилятор не может генерировать код на основании обнаруженного UB.
Вот к примеру эта программа содержит UB.
#include <limits.h>
int main(void) { return INT_MAX +1; }
Если компилятор определил наличие UB, он должен либо прекратить трансляцию юнита, либо то, что он выдаст - заведомо не будет strictly conforming program
.
Вы же сами пишете «constructed according to the syntactic and semantic rules for conforming implementations». Цвет автомобиля Форд-Т может быть любым, если этот цвет чёрный.
Это потому что ты стандарт за эту неделю так и не осилил прочитать. Если бы прочитал, то знал, что semantic rules в сишечке описаны через некоторые свойства execution environment. Вот к примеру:
3.5
1
bit
unit of data storage in the execution environment large enough to hold an object that may
have one of two values
2
NOTE
It need not be possible to express the address of each individual bit of an object.
3.6
1
byte
addressable unit of data storage large enough to hold any member of the basic character
set of the execution environment
...
6.2.5 Types
...
5
An object declared as type signed char occupies the same amount of storage as a
‘‘plain’’ char object. A ‘‘plain’’ int object has the natural size suggested by the
architecture of the execution environment (large enough to contain any value in the range
INT_MIN to INT_MAX as defined in the header <limits.h>).
А в отношении самого execution environment (за вычетом API и библиотек) есть лишь ограниченный набор требований на запуск и останов программы. То есть сами детали вычислений в стандарте не описаны, в стандарте описано, как сишный код должен транслироваться в формально неописанный и толком неизвестный execution environment.