На этапе компиляции такие ошибки можно обнаружить при присваивании значений известных опять же на этапе компиляции. Остальные ошибки такого рода все равно придется решать в рантайме, а их именно так и решают сейчас, когда *интерпретация* инта не совпадает с требуемым диапазоном\набором значений.
Другое дело что тогда выброс исключения\assert\what-you-have будут локализованы, но ни что не мешает написать приблизительно тоже самое сейчас в виде типа данных с контрактом на изменение значения представленное базовым интом.
Просто чекать range даже мне не нужно :) А выбирать storage type (сколько бит выделять) в зависимости от ranges и результатов операций над ними - было бы не плохо.
no subject
Date: 2009-10-16 10:13 am (UTC)no subject
Date: 2009-10-16 10:54 am (UTC)Другое дело что тогда выброс исключения\assert\what-you-have будут локализованы, но ни что не мешает написать приблизительно тоже самое сейчас в виде типа данных с контрактом на изменение значения представленное базовым интом.
no subject
Date: 2009-11-28 11:39 pm (UTC)range<0, 255> a;
range<-10, 10> b;
a += b; // Error: Range check failed
хотя его довольно просто написать. Быть может, это никому не нужно?
ps Какбы намекну, что множество всех предикатов значительно мощнее множества предикатов вида P = {a <= x <= b}.
no subject
Date: 2009-11-28 11:47 pm (UTC)no subject
Date: 2009-11-29 12:54 am (UTC)А выбирать storage type (сколько бит выделять) в зависимости от ranges и результатов операций над ними - было бы не плохо.