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

Сообщение Re[9]: Комплексные числа от 28.01.2022 17:51

Изменено 28.01.2022 17:58 T4r4sB

Re[9]: Комплексные числа
Здравствуйте, Miroff, Вы писали:

M>Практический смысл преизрядный: такому типу даже теоретически невозможно присвоить значение, выходящее за пределы диапазона.


Хм, и каким же образом это обеспечивается?
Вот давай
let index = a - b;

Какой механизм языка не даст мне даже теоретически сделать a<b?
А никакой.

Тогда что же будет вместо? А будут в лучшем случае рантаймовые проверки на КАЖДУЮ промежуточную операцию! Да, в таком случае они есть и для знаковых типов тоже, но всё что я получу на беззнаковых — программа упадёт при попытке вычислить промежуточный результат, а мне это нахрен не сдалось. Тогда какой в этом практический смысл? Что я на этом сэкономлю по сравнению с вариантом "посчитать всё в наиболее удобном для вычислений типе, который очень даже знаковый, а потом в самом конце проверить, но это валидный индекс"? Вместо проверки на каждой операции будет только одна проверка в конце, ну и хорошо.
Re[9]: Комплексные числа
Здравствуйте, Miroff, Вы писали:

M>Практический смысл преизрядный: такому типу даже теоретически невозможно присвоить значение, выходящее за пределы диапазона.


Хм, и каким же образом это обеспечивается?
Вот давай
let index = a - b;

Какой механизм языка не даст мне даже теоретически сделать a<b?
А никакой.

Тогда что же будет вместо? А будут в лучшем случае рантаймовые проверки на КАЖДУЮ промежуточную операцию! Да, в таком случае они есть и для знаковых типов тоже, но всё что я получу на беззнаковых — программа упадёт при попытке вычислить промежуточный результат, а мне это нахрен не сдалось. Тогда какой в этом практический смысл? Что я на этом сэкономлю по сравнению с вариантом "посчитать всё в наиболее удобном для вычислений типе, который очень даже знаковый, а потом в самом конце проверить, но это валидный индекс"? Вместо проверки на каждой операции будет только одна проверка в конце, ну и хорошо.

>А еще можно таким способом сделать нецельночисленные индексы, разреженные индексы, бесконечные индексы для генераторов и т.п.


О, давай введём индекс, который может быть только 0,1,3,42. И вот давай попытаемся что-то посчитать
if let Some(element) = element.get(a+2) ...

(get — это метод, который проверяет валидность индекса и возвращает либо элемент по индексу, либо None)
Но у нас так вышло, что даже теоретическая возможность вычислить 2+2 запрещена так любимым современными хипстерами "ОГРАНИЧЕНИЕМ НА УРОВНЕ СИСТЕМЫ ТИПОВ". (Ещё хипстер может добавить "Благодаря этому ограничению мы сумели выкинуть проверку из get и всегда возвращать элемент, тем самым мы ускорили get, мы такие классные") То есть прога завалится до попытки проверить валидность индекса. А какой толк тогда в этом ограничении, если оно обеспечивается только через проверки в рантайме, да ещё и дико усложняет примерно все операции, в который индекс это не просто уникальный ойдишник, но и число, над которым делается математика?