Диапазон стал итерируемым на этапе компиляции
16.09.2026Диапазон чисел теперь можно перебирать циклом for внутри вычислений, выполняемых компилятором.
Что это даёт
Списки и таблицы, размер которых известен на этапе компиляции, обычно строятся перебором. Пока перебор был недоступен, приходилось писать цикл с явным индексом и вручную следить за границами.
Теперь доступен обычный перебор с обычной проверкой выхода за границы — тот же, что и в рантайме.
Почему это было неочевидно
Примитивы перебора обычно реализованы через изменяемое состояние, а изменяемое состояние на этапе компиляции запрещено. Для диапазона это препятствие снимается тем, что сам диапазон уже хранит обе границы, а состояние можно восстанавливать из положения.
Тот же приём распространяется на другие структуры с известным состоянием: массив можно перебрать, а вот список с явно выделенной памятью — нет, там состояние появляется во время выполнения.
Практическая польза
Таблицы соответствий и наборы констант по диапазону становятся записываемыми в одну строку. Особенно полезно там, где нужен массив фиксированного размера: его итератор по элементам на этапе компиляции недоступен, а диапазон работает.
Оригинал
implement const Iterator for Range
Упоминаний: 1 · Просмотров: 3