Под линуксом там с сигналами что-то можно мутить. Ключик -fnon-call-exceptions позволяет написать в обработчике сигнала throw. Хотя такой подход у красноглазых считается не тру. Под виндой похожий фокус тоже достигается каким-то ключиком, /EH кажется.
В одном виндовом математическом пакете видел такую реализацию: функцией set_se_translator устанавливается обработчик исключений, который делает throw. Было это, правда, на 32-битной системе, и с какими ключами там оно компилировалось, уже не вспомнить.
В 32 битах кодируется 232 чисел. Из них одно - ноль, (231 - 1) положительных и (231) отрицательных. То есть отрицательных на одно больше, и для самого малого отрицательного нет парного положительного.
0x80000000 - это как раз минимальное отрицательное, для которого при смене знака в результате деления результат невозможно представить в 32 битах - это переполнение.
При умножении его на -1 или при операции смены знака также происходит переполнение, но исключение не бросается.
В современном мире серверу модно падать, а потом его кубернетис перезапустит, а пока тот перезапускается - запросы шлются на другую реплику :) Но на С++ конечно так нельзя, оставишь UB - потом злоумышленники будут в твоем кластере червей разводить.
Поэтому бекенд сервис надо делать на go, а запросы на тяжелые вычисления пересылать через mq на сервисы-воркеры. Заодно придется развести полный девопс, чтобы вот это все запустить, деплоить и обслуживать :)
Comments 12
Reply
Reply
Reply
Reply
да, пишется sub, перехватчик сигналов
Reply
Reply
Reply
В 32 битах кодируется 232 чисел.
Из них одно - ноль, (231 - 1) положительных и (231) отрицательных. То есть отрицательных на одно больше, и для самого малого отрицательного нет парного положительного.
0x80000000 - это как раз минимальное отрицательное, для которого при смене знака в результате деления результат невозможно представить в 32 битах - это переполнение.
При умножении его на -1 или при операции смены знака также происходит переполнение, но исключение не бросается.
Reply
Reply
Но на С++ конечно так нельзя, оставишь UB - потом злоумышленники будут в твоем кластере червей разводить.
Reply
Заодно придется развести полный девопс, чтобы вот это все запустить, деплоить и обслуживать :)
Reply
Reply
Leave a comment