Арифметическое переполнение
От: AlexRK  
Дата: 22.02.14 08:20
Оценка: -1
Приветствую, уважаемые коллеги.

Думаю над сабжевым вопросом. Существующие языки программирования разбираются с переполнением по-разному:

С++. Стратегия типа "суем голову в песок" — объявляем переполнение UB и не паримся. Кому надо — пусть руками ифы ставит. Плюсы — скорость, думать над кодом не надо. Минусы — полное отсутствие надежности.

C#. Каждая операция с проверкой. Плюсы — при переполнении поведение вполне определенное, опять же не надо специально думать при написании кода. Минусы — скорость, да и потенциальный вылет эксепшена хоть и не UB, но тоже скорее всего оставит программу в некорректном состоянии.

SPARK. Переполнения запрещаются статически. Плюсы — скорость, полная надежность. Минусы — очень геморройно писать/изменять код и согласовывать все контракты. Только для ракет и АЭС.

Python. Используем arbitrary precision arithmetic. Плюсы — надежно, код писать просто. Минусы — тормозно, тащим с собой огромную кучу кода (на фоне использования виртуальной машины может быть не важно, но если смотреть абстрактно — это большой минус).


Может быть есть иные подходы обработки переполнений? Хочется вариант с полной скоростью и полной надежностью, но не такой сложный в использовании, как контракты из SPARK. Можно немного поступиться удобством. Немного! Примерно так, как поступаются удобством статически типизированные языки, заставляя писать типы (по сравнению с динамическими). Возможно ли такое в мейнстим программировании в принципе?

И это я еще не говорю про числа с плавающей точкой...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.