LINUX.ORG.RU

История изменений

Исправление 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.