Информация об изменениях

Сообщение Re[20]: Carbon от 15.04.2024 12:05

Изменено 15.04.2024 13:35 Sinclair

Re[20]: Carbon
Здравствуйте, CreatorCray, Вы писали:

CC>Грёбаный сайт!

Боюсь, проблема не только в сайте
Вы избавились от UB, и теперь ваш код работает неправильно всегда, даже в -O0:
https://godbolt.org/z/ToKv8Kx3d
icc: remark #10441: The Intel(R) C++ Compiler Classic (ICC) is deprecated and will be removed from product release in the second half of 2023. The Intel(R) oneAPI DPC++/C++ Compiler (ICX) is the recommended compiler moving forward. Please transition to use this compiler. Use '-diag-disable=10441' to disable this message.
ASM generation compiler returned: 0
icc: remark #10441: The Intel(R) C++ Compiler Classic (ICC) is deprecated and will be removed from product release in the second half of 2023. The Intel(R) oneAPI DPC++/C++ Compiler (ICX) is the recommended compiler moving forward. Please transition to use this compiler. Use '-diag-disable=10441' to disable this message.
Execution build compiler returned: 0
Program returned: 0
oops

CC>А кого будем считать мастером? Тут мнения очень сильно расходятся.
Я верю людям на слово. Поэтому когда кто-то мне пишет, что UB — ерунда, и что он много лет успешно пишет на С++, а остальные — просто неудачники, не понимающие язык, то я сразу считаю такого человека мастером.
Который никогда не допускает сравнения знаковых с беззнаковыми и, уж тем более, знакового переполнения в своих программах.

Вот мне и интересно посмотреть на то, как именно мастер избегает подобных граблей.
S>> Сам-то я вообще не программист
CC>Разве?
Отож. Лет 20 тому ушёл из написания кода в написание презентаций, документов, и емейлов.

CC>Без template is_max, на порядки более прямолинейный и использующий только то, что нужно именно тут и сейчас.

template is_max — просто очень компактный пример, иллюстрирующий проблему. Шаблонный параметр там нужен для того, чтобы помешать заменить is_max на return value == INT_MAX.
Можно привести более длинный пример с конкретным int или long, страдающий от тех же особенностей.

CC>Я код пишу не для вакуума, а под конкретные требования, включающие и компилятор.

Тут дело не в "конкретных требованиях, включающих компилятор", хотя таким образом вы закладываете бомбу под следующее поколение разработчиков, которые будут рано или поздно выкинуть устаревший компилятор и перейти на что-то такое, что поддерживается производителем. Как мы видим, даже ваш любимый компилятор прекрасно умеет злоупотреблять UB.
Re[20]: Carbon
Здравствуйте, CreatorCray, Вы писали:

CC>Грёбаный сайт!

Боюсь, проблема не только в сайте
Вы избавились от UB, и теперь ваш код работает неправильно всегда, даже в -O0:
https://godbolt.org/z/ToKv8Kx3d
icc: remark #10441: The Intel(R) C++ Compiler Classic (ICC) is deprecated and will be removed from product release in the second half of 2023. The Intel(R) oneAPI DPC++/C++ Compiler (ICX) is the recommended compiler moving forward. Please transition to use this compiler. Use '-diag-disable=10441' to disable this message.
ASM generation compiler returned: 0
icc: remark #10441: The Intel(R) C++ Compiler Classic (ICC) is deprecated and will be removed from product release in the second half of 2023. The Intel(R) oneAPI DPC++/C++ Compiler (ICX) is the recommended compiler moving forward. Please transition to use this compiler. Use '-diag-disable=10441' to disable this message.
Execution build compiler returned: 0
Program returned: 0
oops

CC>А кого будем считать мастером? Тут мнения очень сильно расходятся.
Я верю людям на слово. Поэтому когда кто-то мне пишет, что UB — ерунда, и что он много лет успешно пишет на С++, а остальные — просто неудачники, не понимающие язык, то я сразу считаю такого человека мастером.
Который никогда не допускает сравнения знаковых с беззнаковыми и, уж тем более, знакового переполнения в своих программах.

Вот мне и интересно посмотреть на то, как именно мастер избегает подобных граблей.
S>> Сам-то я вообще не программист
CC>Разве?
Отож. Лет 20 тому ушёл из написания кода в написание презентаций, документов, и емейлов.

CC>Без template is_max, на порядки более прямолинейный и использующий только то, что нужно именно тут и сейчас.

template is_max — просто очень компактный пример, иллюстрирующий проблему. Шаблонный параметр там нужен для того, чтобы помешать заменить is_max на return value == INT_MAX.
Можно привести более длинный пример с конкретным int или long, страдающий от тех же особенностей.

CC>Я код пишу не для вакуума, а под конкретные требования, включающие и компилятор.

Тут дело не в "конкретных требованиях, включающих компилятор", хотя таким образом вы закладываете бомбу под следующее поколение разработчиков, которые будут рано или поздно вынуждены выкинуть устаревший компилятор и перейти на что-то такое, что поддерживается производителем. Как мы видим, даже ваш любимый компилятор прекрасно умеет злоупотреблять UB.