Здравствуйте, kov_serg, Вы писали:
Pzz>>Просто раньше за ним живые люди стояли, типа Ричи и Томпсона, которые понимали, что они делают. А теперь коллективный разум в виде коммитета по стандартизации. А "коллективный" — это, считай, никакой. _>Точно: — У семи нянек детё без глаза.
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, Нomunculus, Вы писали:
Pzz>>>Похоже, это еще одно знание, утраченное цивилизацией — то ли в clang, то ли вообще...
Н>>Как и любое такое знание — из разряда умения постройки пирамид. Утратилось, потому что не нать
Pzz>Не, пустые циклу не опримизировать таки нать. Вообще, Си всегда был ценен именно тем, что позволял помимо всего прочего делать всякие низкоуровневые вещи. Причем хорошо вписанные в более высокоуровневую канву сишной программы.
Pzz>А если теперь в нем это постепенно отмирает, нафиг он вообще нужен?
Pzz>Просто раньше за ним живые люди стояли, типа Ричи и Томпсона, которые понимали, что они делают. А теперь коллективный разум в виде коммитета по стандартизации. А "коллективный" — это, считай, никакой.
Может просто пофиксить компилятор? Разве стандарт языка позволяет выкидывать пустые циклы?
Здравствуйте, Sm0ke, Вы писали:
Pzz>>Просто раньше за ним живые люди стояли, типа Ричи и Томпсона, которые понимали, что они делают. А теперь коллективный разум в виде коммитета по стандартизации. А "коллективный" — это, считай, никакой.
S>Может просто пофиксить компилятор? Разве стандарт языка позволяет выкидывать пустые циклы?
Ну если они без побочных эффектов, окромя того, что процессор делом занимают, почему нет?
Я вообще не удивлюсь, если в нонешнем стандарте нескончаемый цикл без побочных эффектов — это UB. Лень смотреть...
vsb>>>Можно ли это сделать на C, согласно стандарту и без ассемблерных вставок? M>>https://godbolt.org/z/qnWzvM6eo vsb>Я так понял, разница в том, что у меня был C++, а в этом примере C. Это обусловлено разницей в стандартах или в clang для C прописано исключение?
Так ты вроде и просил на С изначально.
Чем обусловлено
Я сам удивлен, но из всех компиляторов что я проверил только clang++ выкидывает такой цикл. Причем это только на транке, стабильные релизы не выкидывают.
ПС: хотя если еще проверить неармовые версии clang++, то начиная с 13-ой версии выкидывает цикл.
Здравствуйте, Alekzander, Вы писали:
A>А на каком, пардон, основании? Бесконечный цикл — это же не if (false). Совсем охренели эти оптимизаторы.
До многих это доходит медленно. Современный C++ полон таких подстав. И что самое интересно многие с пеной у рта яростно защищают такое положение дел тыкая носом в стандарт. Похоже там есть яркие представители нетрадиционной ориентации логики и именно они имеют решающий голос в таких вопросах.
Здравствуйте, vsb, Вы писали:
vsb>В голову, конечно, сразу приходит for ( ; ; ) {} но clang с оптимизацией этот цикл тупо выкидывает. vsb>Можно ли это сделать на C, согласно стандарту и без ассемблерных вставок?
Согласно стандарту, вечный цикл без побочных эффектов — это неопределённое поведение.
Поэтому компилятор его и выкидывает: имеет полное право
А какой смысл микроконтроллеру полностью нагрузить ядро?
Там нет какой-нибудь инструкции типа halt, которая повесила бы процессор в ожидание прерываний?
Здравствуйте, Кодт, Вы писали:
К>А какой смысл микроконтроллеру полностью нагрузить ядро?
Удваиваю вопрос. Сам уже полгода въезжая в тему микроконтроллеров, и пока не было нужды добавлять вечный безусловный цикл. Тихая оптимизация это, конечно, зло, стоило бы добавить предупреждение и для особо упоротых упорных добавить флаг -Wno-empty-loop.
Здравствуйте, cppguard, Вы писали:
К>>А какой смысл микроконтроллеру полностью нагрузить ядро? C>Удваиваю вопрос. Сам уже полгода въезжая в тему микроконтроллеров, и пока не было нужды добавлять вечный безусловный цикл. Тихая оптимизация это, конечно, зло, стоило бы добавить предупреждение и для особо упоротых упорных добавить флаг -Wno-empty-loop.
Очевидно же для отладки или для ожидании watchdog-а.
Здравствуйте, Кодт, Вы писали:
К>Согласно стандарту, вечный цикл без побочных эффектов — это неопределённое поведение.
Именно поэтому этот стандарт хочется выкинуть к чертовой матери.
К>Поэтому компилятор его и выкидывает: имеет полное право
Вскоре ему стандарт разрешит убивать людей и вот тогда он оторвётся по полной
К>А какой смысл микроконтроллеру полностью нагрузить ядро?
Точка ожидания отладчика, watchdog-а или ядра прогревают для проверки теплоотвода, выход по переключению контекста в прерывании.
К>Там нет какой-нибудь инструкции типа halt, которая повесила бы процессор в ожидание прерываний?
di
hlt
В некоторых DSP-никах после выполнения операции еще надо пару нопов добавлять иначе не работает. Или еще несколько команд после ret могут исполнят
А компилятор понимаешь всё малину с ног наголову переворачивает, зато по стандарту. Вместо того что бы помогать, он гадит.