Диапазон стал итерируемым на этапе компиляции

16.09.2026

Диапазон чисел теперь можно перебирать циклом for внутри вычислений, выполняемых компилятором.

Что это даёт

Списки и таблицы, размер которых известен на этапе компиляции, обычно строятся перебором. Пока перебор был недоступен, приходилось писать цикл с явным индексом и вручную следить за границами.

Теперь доступен обычный перебор с обычной проверкой выхода за границы — тот же, что и в рантайме.

Почему это было неочевидно

Примитивы перебора обычно реализованы через изменяемое состояние, а изменяемое состояние на этапе компиляции запрещено. Для диапазона это препятствие снимается тем, что сам диапазон уже хранит обе границы, а состояние можно восстанавливать из положения.

Тот же приём распространяется на другие структуры с известным состоянием: массив можно перебрать, а вот список с явно выделенной памятью — нет, там состояние появляется во время выполнения.

Практическая польза

Таблицы соответствий и наборы констант по диапазону становятся записываемыми в одну строку. Особенно полезно там, где нужен массив фиксированного размера: его итератор по элементам на этапе компиляции недоступен, а диапазон работает.

Оригинал

implement const Iterator for Range

Упоминаний: 1 · Просмотров: 3